操作系统的发展经历了一个慢长的过程,今天我就带大家看看哈
1.手工操作(无操作系统)
手工操作阶段
过程:用户把程序写在纸带上(其实就是在纸带上打孔),然后输入到计算机中,计算机随后会处理这个程序,把输出结果又放在纸带中(其实还是打孔),展示给用户看。
由于用户在纸带上编写程序的速度很慢,纸带输入输出的速度也很慢,而计算机的处理速度快,所以系统资源的利用率极低。
主要缺点: 用户独占全机,人机速度矛盾导致系统资源利用率极低。
2.批处理系统
单道处理系统
单道批处理系统引入了脱机输入/输出技术(用磁带完成),但是每次只能往内存中输入一道程序,监督程序(这是操作系统的雏形)负责控制程序的输入输出。
过程:多个用户把程序写在纸带上,然后通过外围机录入到磁带中,监督程序会控制程序的输入和输出,每次只允许计算机内存中存在一道用户程序。
由于磁带录入到处理器中的速度比纸带快得多,所以单道批处理系统一定程度上缓和了人机速度矛盾,资源利用率有所提升,
主要优点: 缓和了一定程度的人机速度矛盾,资源利用率有所提升。
主要缺点: 内存中仅能有一道用户程序运行,只有该程序运行结束后才能调入下一道程序,CPU有大量的空闲时间是在等待I/O完成,资源利用率依然很低。
在这里要解释一下,什么叫"CPU有大量的时间是在空闲等待I/O完成",I/O其实就是输入/输出(Input/Output)。这句话的意思就是,程序在输入输出的时候,什么事情都不做,必须等输入输出完成,该程序才做接下来的事情。
举个现实的例子:你去买宵夜,你和奶茶小贩说:"老板,我要一杯奶茶"后,你就在那里等,而不是去买其他的东西。
在这里,你就是CPU,奶茶小贩就是输出设备,而你向奶茶小贩说了你的需求(这就是CPU要输出设备做的事)后,你没做其他的事情,而是站在那里等,那这个等的时间就是空闲时间,其实你可以在这个空闲时间做其他事情。
多道批处理系统(操作系统正式诞生)
在单道批处理系统中,内存中仅有一道作业,它无法充分利用系统中的所有资源,致使系统性能较差。
在多道批处理系统中,用户所提交的作业都先存放在外存上并排成一个队列,称为“后备队列”。然后,由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享CPU和系统中的各种资源。其优缺点为:
(1)资源利用率高;
(2)系统吞吐量大:系统吞吐量是指系统在单位时间内所完成的总工作量。能提高系统吞吐量的主要原因可归纳为:第一,CPU和其它资源保持“忙碌”状态;第二,仅当作业完成时或运行不下去时才进行切换,系统开销小;
(3)平均周转时间长;
(4)无交互能力
每次往计算机内存中输入多道程序,并引入了中断技术,由操作系统负责管理这些程序的并发运行。
过程:和单道批处理系统差不多,只不过是可以向计算机内存中调入多道程序,让他们在计算机内存中并发运行。
主要优点:多道程序并发运行,共享计算机资源,资源利用率大幅提升,CPU和其他资源保存"忙碌"状态的时间增长。
主要缺点:用户响应时间长,没有人机交互功能(用户提交自己的作业之后只能等待计算机处理完成,中间不能控制自己作业的执行)
这里举个例子说说:为什么多道批处理系统能使资源利用率大幅提升呢?
假如现在计算机中有3个设备,输入设备、CPU、输出设备,他们分别负责输入、计算、输出。
那现在有3个作业,每个作业需要1s输入,1s计算,1s输出。
假如采用单道批处理系统。那过程将如下图。
可以看出,
输入设备的工作区间为[0,1],[3,4],[6,7]。
CPU的工作区间为[1,2],[4,5],[7,8]。
输出设备的工作区间为[2,3],[5,6],[8,9]。
这些设备的工作区间都没有重叠。
整个过程用了9s。
假如采用多道批处理系统。那过程将如下图。
可以看出,
输入设备的工作区间为[0,3]。
CPU的工作区间为[1,4]。
输出设备的工作区间为[2,5]。
这些设备的工作区间有重叠,而且在[2,3]时,输入设备,CPU,输出设备都在工作。
整个过程用了5s。
从对比可以看出,多道批处理系统能使资源利用率大幅提升,也提升了工作效率。
3.分时操作系统
2、原理
分时操作系统将系统处理机进行切片(划分时间片),采用轮转运行方式轮流地切换给各终端用户的程序使用(例如规定每个作业每次只能运行一个时间片)。由于时间间隔很短,每个用户就感觉像独占全机一样,这样就解决了主机共享问题。而对于人机交互,为实现用户键入命令后能对自己的作业及其运行及时控制或修改,各个用户的作业都必须留在内存中(作业在磁盘上是不能运行的),用时间片进行切换管理。分时操作系统的特点是可有效增加资源的使用率,支持人机交互与资源共享。例如UNIX系统就采用了剥夺式动态优先的CPU调度以支持分时操作。
简而言之,分时操作系统的核心原理在于将作业直接放入内存,并引入了时间片的概念,采用轮转运行的方式,规定每个作业每次只能运行一个时间片,然后就暂停该作业并立即调度下一个作业运行。在不长的时间内使所有的作业都执行一个时间片的时间,便可以使每个用户都能及时地与自己的作业进行交互,从而使用户的请求得到及时响应。这样就解决了在分时系统中最重要的及时接收、及时处理问题。
(1)多路性:系统允许将多台终端同时连接到一台主机上,并按分时原则为每个终端分配系统资源,提高资源利用率,降低使用费用。
(2)独立性:各终端之间相互独立,互不干扰,每个用户都感觉像一人独占主机一样。
(3)及时性:用户的请求能在很短的时间内就得到响应。
(4)交互性:用户可通过终端与系统进行人机对话,例如请求多方面的服务。
主要优点:用户请求可以被即时响应,解决了人机交互问题,允许多个用户使用一台电脑,并且用户对计算机的操作相互独立,感受不到别人的存在。
主要缺点:不能优先处理一些紧急任务,操作系统对各个用户/作业都是完全公平的,循环地为每一个用户/作业服务一个时间片,不区分任务的紧急性(有时候我们需要某个作业被马上执行,比如导弹发射,如果不能实时操作,必将产生灾难性的后果)
4.实时操作系统
实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。提供及时响应和高可靠性是其主要特点。
5.linux发展史
故事,还要从Unix的诞生开始讲起:
Unix
MULTICS项目:
二十世纪六十年代时,大部份计算机都是采用批处理的方式(也就是说,当作业积累一定数量的时候,计算机才会进行处理)。
那时,我们熟知的美国电话及电报公司(AT&T)、通用电器公司(G.E.)及麻省理工学院(MIT)计划合作开发一个多用途、分时及多用户的操作系统,也就是这个MULTICS,其被设计运行在GE-645大型主机上。
不过,这个项目由于太过复杂,整个目标过于庞大,糅合了太多的特性,进展太慢,几年下来都没有任何成果,而且性能都很低。
于是到了1969年2月,贝尔实验室决定退出这个项目。
Ken Thompson和Dennis Ritchie:
贝尔实验室中的有个叫 Ken Thompson 的人(如下图),他为 MULTICS 这个操作系统写游戏了个叫“Space Travel”的游戏,在 MULTICS 上经过实际运行后,他发现游戏速度很慢而且耗费昂贵 —— 每次运行会花费75美元。
退出MULTICS项目以后。他为了让这个游戏能玩,所以他找来Dennis Ritchie(如下图)为这个游戏开发一个极其简单的操作系统。这就是后来的Unix。
值得一提的是,当时他们本想在DEC-10(可以把它看做是一个硬件平台)上写,后来没有申请到,只好在实验室的墙角边找了一台被人遗弃的 Digital PDP-7 的迷你计算机进行他们的计划,这台计算机上连个操作系统都没有,于是他们用汇编语言仅一个月的时间就开发了一个操作系统的原型。
Unix诞生:
他们的同事Brian Kernighan非常不喜欢这个系统,嘲笑Ken Thompson说:“你写的系统好真差劲,干脆叫Unics算了。” Unics 的名字就是相对于 MULTICS 的一种戏称,后改成了Unix。
于是,Unix 就在这样被游戏和玩笑创造了,当时是1969年8月。也就是这一年,Linux 之父 Linus Torvalds 在芬兰出生了。
1971年,Ken Thompson 写了充分长篇的申请报告,申请到了一台PDP-11/24的机器。于是Unix第一版出来了。在一台PDP-11/24的机器上完成。这台电脑只有24KB的物理内存和 500K 磁盘空间。
Unix占用了12KB的内存,剩下的一半内存可以支持两用户进行Space Travel的游戏。而著名的 fork() 系统调用也就是在这时出现的。
C语言
C语言诞生背景:
到了1973年的时候,Ken Thompson 与 Dennis Ritchie 感到用汇编语言做移植太过于头痛,他们想用高级语言来完成第三版Unix,对于当时完全以汇编语言来开发程序的年代,他们的想法算是相当的疯狂。
一开始他们想尝试用Fortran,可是失败了。后来他们用一个叫BCPL的语言开发,他们整合了BCPL形成B语言,后来Dennis Ritchie觉得B语言还是不能满足要求,就是就改良了B语言,这就是今天的大名鼎鼎的C语言。
于是,Ken Thompson 与 Dennis Ritchie 成功地用C语言重写了 Unix 的第三版内核。至此,Unix这个操作系统修改、移植相当便利,为Unix日后的普及打下了坚实的基础。而Unix和C完美地结合成为一个统一体,C与Unix很快成为世界的主导。
Unix的流行
Unix 的第一篇文章 “The UNIX Time Sharing System”由 Ken Thompson 和 Dennis Ritchie 于1974年7月的 the Communications of the ACM 发表。这是UNIX与外界的首次接触。
结果引起了学术界的广泛兴趣并对其源码索取,所以,Unix第五版就以“仅用于教育目的”的协议,提供给各大学作为教学之用,成为当时操作系统课程中的范例教材。各大学公司开始通过 Unix 源码对 Unix 进行了各种各样的改进和扩展。于是,Unix 开始广泛流行。
BSD的诞生:
1977 年,Berkeley 大学的 Bill Joy 针对他的机器修改 UNIX 源码,称为BSD(Berkeley Software Distribution),Bill Joy 是 Sun 公司的创始人(就是Java诞生的那个公司);
1978年,对 Unix 而言是革命性的一年;因为学术界的老大柏克利大学,推出了一份以第六版为基础,加上一些改进和新功能而成的 Unix。这就是著名的“1 BSD(1st Berkeley Software Distribution)”,开创了Unix的另一个分支:BSD 系列。 同时期,AT&T成立USG,将 Unix变成商业化的产品。
BSD-Unix和AT&T-Unix:
从此,BSD的 Unix 便和AT&T 的Unix 分庭抗礼,Unix就分为System IV 和 4.x BSD这两大主流,各自蓬勃发展。
BSD对UNIX最重要的贡献之一是TCP/IP。BSD 有8个主要的发行版中包含了TCP/IP:4.1c、4.2、4.3、4.3-Tahoe、4.3-Reno、Net2、4.4以及 4.4-lite。这些发布版中的TCP/IP代码几乎是现在所有系统中TCP/IP实现的前辈,包括AT&T System V UNIX 和Microsoft Windows中的TCP/IP都参照了BSD的源码。
1979 年,UNIX 发布 System V,用于个人计算机;
1984 年,因为 UNIX 规定:“不能对学生提供源码”,Tanenbaum老师自己编写兼容于 UNIX 的Minix,用于教学
Unix的私有商业化:
这是一个AT&T妄图私有化的Unix的时代。为了私有化Unix,1986年IEEE指定了一个委员会制定了一个一个开放作业系统的标准,称为 POSIX (Portable Operating Systems Interface)。最后加上个X,不知道是为了好听,还是因为这本质上是UNIX的标准。
当然,AT&T的Unix取得了这个标准制订战争的胜利,还取得了Unix这个注册商标。此时BSD的拥护者自喻为冷酷无情的公司帝国的反抗军。就销售量来说,AT&T UNIX始终赶不上BSD/Sun。到1990年,AT&T与BSD版本已难明显区分,因为彼此都有采用对方的新发明。
这段时期,从实验室出来的被全世界所分享的Unix,正处于被私有化的关键时期。
BSD分支:
FreeBSD: FreeBSD 是最受欢迎的 BSD,针对高性能和易用性。它支持英特尔和 AMD 的32位和64位处理器。
NetBSD: NetBSD 被设计运行在几乎任何架构上,支持更多的体系结构。在他们的主页上的格言是"理所当然,我们运行在 NetBSD 上"。
OpenBSD: OpenBSD 为最大化的安全性设计的 —— 这不仅仅它宣称的功能,在实践中也确实如此。它是为银行和其他重要机构的关键系统设计的。
还有两个其他的重要 BSD 操作系统:
DragonFly BSD: DragonFly BSD 的设计目标是提供一个运行在多线程环境中的操作系统 —— 例如,计算机集群。
Darwin / Mac OS X: Mac OS X 实际上基于 Darwin 操作系统,而 Darwin 系统基于 BSD。它与其他的 BSD 有点不同,虽然底层内核和其他的软件是开源代码(BSD 代码),但操作系统的大部分是闭源的 Mac OS 代码)。苹果在 BSD 基础上开发了 Mac OS X 和 iOS,这样他们就不必写操作系统底层,就像 谷歌在 Linux 基础上开发 android 系统一样。
GUN
诞生背景:
AT&T的这种商业态度(闭源,不开放源代码,还收费,就像是现今的Windows),让当时许许多多的Unix的爱好者和软件开发者们感到相当的痛心和忧虑,他们认为商业化的种种限制并不利于产生的发展,相反还能导制产品出现诸多的问题。随着商业化Unix的版本的种种限制和诸多问题,引起了大众的不满和反对。
于是,大家开始有组织地结成“反叛联盟”以此对抗欺行罢市的AT&T等商业化行为。
Richard Stallman:
此时,一个名叫Richard Stallman的领袖出现了(如下图),他认为Unix是一个相当好的操作系统,如果大家都能够将自己所学贡献出来,那么这个系统将会更加的优异!他倡导的Open Source的概念,就是针对Unix这一事实反对实验室里的产品商业化私有化。
尽管Stallman既不是、也从来没有成为一个Unix程序员,但在后1980的大环境下,实现一个仿Unix操作系统成了他追求的明确战略目标。
Richard Stallman早期的捐助者大都是新踏入Unix土地的老牌ARPANET黑客,他们对代码共享的使命感甚至比那些有更多Unix背景的人强烈。
GNU:
1984 年,Richard Stallman开始 GNU(GNU’s Not Unix)项目,计划开发一套与Unix相互兼容的操作系统。Stallman是一个有理想的人,他想建立一个完全自由的操作系统,公开源码,任何人都可以修改该系统。他给这个操作系统取的名字叫GNU。
1985 年 Richard Stallman 又创办 FSF(Free Software Foundation)基金会来为 GNU 计划提供技术、法律以及财政支持。
尽管 GNU 计划大部分时候是由个人自愿无偿贡献,但 FSF 有时还是会聘请程序员帮助编写。当 GNU 计划开始逐渐获得成功时,一些商业公司开始介入开发和技术支持。当中最著名的就是之后被 Red Hat 兼并的 Cygnus Solutions。
Richard Stallman的GNU项目核心:
产品:GCC、Emacs、Bash Shell、GLIBC;
倡导:自由软件;自由软件指用户可以对软件做任何修改,甚至再发行,但是始终要挂着 GPL 的版权; 自由软件是可以卖的,但是不能只卖软件,而是卖服务、手册等;
GNU 的软件缺乏一个开放的平台运行,只能在 UNIX 上运行;
GNU组织的建立,延续了当年Unix刚出现时的情形,并为这种情形建立了可靠的法律和财务保障。GNU 工程十几年以来, 已经成为一个对软件开发主要的影响力量, 创造了无数的重要的工具。例如:强健的编译器(如GCC),有力的文本编辑器,甚至一个全功能的操作系统。从那时开始,许多程序员聚集起来开始开发一个自由的、高质量、易理解的软件,让这使得Unix社区生机勃勃,一派繁荣景象。
要提供一个完整的操作系统,需要包含内核、编译器、编辑工具、C库、Shell等等一系列重要组成部件。自90年代发起这个计划以来,GNU 开始大量的产生或收集各种系统所必备的组件,像是函数库、编译器、调式工具、文本编辑器、网站服务器,以及一个Unix的使用者接口(Unix shell)等等。
到了1990年左右的时候,GUN社区已经大成气候了,但这时还缺一个内核,Stallman开始开发内核,取名为Hurd,但由于各种原因Hurd被耽误了。所以,GNU一直没有操作系统的kernel。正当Richard Stallman在为操作系统内核伤脑筋的时候,Linux 出现了。
GPL诞生背景:
计算机软件作为人类的知识财富,为人类社会的发展起到了巨大的作用,但长期以来软件源码作为个人或公司的私有财产受到严格的保密,很难做到像文学艺术作品一样地进行公开的交流,很大程度上造成软件的低水平,重复劳动严重,在一定意义上制约了软件的发展。
就像是Microsoft的Windows操作系统,就只有该公司内部能够查看源代码和修改操作。
GPL:
1985 年,Richard Stallman提出“应将软件源码看成人类共同拥有的知识财富,应该公开地自由交换、修改”。于是,为了避免 GNU 开发的自由软件被其他人用作专利软件, Richard Stallman创建 GPL(General Public License)版权声明;
该授权书主要有以下几点:
自由软件(free software)指的是源码自由,不是价格;
自由软件必须附带程序源代码,但可收取费用;
任何人都可以自由分发自由软件并收取费用,但必须列明原创者姓名;
任何人都可以修改源代码,但必须列明修改人名字,以保护原创者名誉;
任何人都可以采用源代码中的某一段,但其开发之软件必须也为自由软件(例如,如果 Netscap 是自由软件,而 IE 采用了其中的部份源代码,则 IE 也必须成为自由软件);
任何自由软件的衍生品也必须是自由软件;
自由软件没有担保,以保护分发者。
1991 年,Richard Stallman 对授权做了微小的修改,即所谓的通用公共授权第 2 版。同时,他也推出了更宽松的通用公共授权,用于自由程序库。这一系列的授权有效地保护了自由软件不受商业软件的非法侵犯,例如,1998 年 Netscap 决定采用与 GPL 差不多的 NPL(Netscap Public Liscense),这样一来,Microsoft 就无法将 Netscap 中的源代码运用在 IE 上,除非它们也要成为自由软件。
至此,在 GPL 下人们就可以自由交流、修改软件源码了,这一协议极大地推动了整个计算机软件行业的发展,并带来了以下明显的益处:
对于广大计算机软件的学习者来说,可以直接从源码中吸取营养,缩短学习的时间,提高学习的效率,少走弯路,再也不必花大量时间去看那些不知正确与否的“未解之谜”了,学习在某种程度上变成了一件轻松愉快的事情了。
可以集中大家的智慧发展软件,避免重复劳动。一个软件只有公开源码,通过很多人的研究才有可能发现其中深藏的错误,大家才能公开探讨相关的问题,并进行改进,在大家的共同“挑剔与监督”下才有可能编写出尽善尽美的软件来。
Linux
用GNU GPL协议的源代码可以被其他项目所使用,只要这些项目使用同样的协议发布。为了让Linux可以在商业上使用,林纳斯·托瓦兹决定更改他原来的协议(这个协议会限制商业使用),以GNU GPL协议来代替。之后许多开发者致力融合GNU元素到Linux中,做出一个有完整功能的、自由的操做系统。- 在1991年,林纳斯·托瓦兹开始在MINIX上开发Linux内核,为MINIX写的软件也可以在Linux内核上使用。后来使用GNU软.件代替MINIX的软件,因为使用从GNU系统来的源代码可以自由使用,这对Linux的发展是有益。使
6.Linux内核版本和企业选择
Linux的发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本。
Redhat系列
Redhat系列的包管理方式采用的是基于RPM包和YUM包的管理方式,包分发方式是编译好的二进制文件。
- RHEL (Redhat Enterprise Linux):也就是所谓的Redhat Advance Server,收费版本,稳定性非常好,适合服务器使用。
- Fedora Core :由原来的Redhat桌面版本发展而来,免费版本,稳定性较差,最好只用于桌面应用, 用户可免费体验到最新的技术或工具,而功能成熟后会被加入到RHEL系统中。因此也被称为RHEL系统的“试验田”。
- CentOS:RHEL的社区克隆版本,免费版本,稳定性非常好,适合服务器使用,CentOS 是RHEL源代码再编译的产物,而且在RHEL的基础上修正了不少已知的 Bug ,相对于其他 Linux 发行版,其稳定性值得信赖。
- OpenSUSE: 德国著名的Linux系统,全球范围内有着不错的声誉及市场占有率,发行量在欧洲占第一位。。OpenSUSE对个人来说是完全免费的,包括使用和在线更新。
-
Debian 系列
包括Debian和Ubuntu等。Debian是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。提供了接近十万种不同的开源软件支持,在国外用于很高的认可度和使用率。对于各类内核架构支持性良好,稳定性、安全性强更有免费的技术支持。
Debian最具特色的是apt-get / dpkg包管理方式。
分为三个版本分支(branch): - unstable,为最新的测试版本,其中包括最新的软件包,但是也有相对较多的bug,适合桌面用户。
- testing,经过unstable中的.测试,相对较为稳定,也支持了不少新技术。
- stable,一般只用于服务器,上面的软件包大部分都比较过时,但是稳定和安全性都非常的高。
- Linux的核心版本号如下:
- 3.10.0-123.e17.x86-64
主板本.次版本.释出版本-修改版本