当前位置: 首页 > 科技观察

清除!一起穿梭操作系统历史

时间:2023-03-18 02:05:45 科技观察

本文转载自微信公众号“ConeZhang”,作者Cone。转载请联系ConeZhang公众号。你好,我是。首先,让我们思考一个问题。为什么会有操作系统?我们的教科书上会提到分时系统、批处理系统等现代操作系统之前的中间产品,也会讲到管理硬件的功能,但是好像没有说为什么要有操作系统系统,操作系统的诞生是为了解决什么样的问题?下面通俗易懂的说说为什么会有这个东西。假设古代的计算机需要人工操作,但在操作过程中不再需要人为干预。这时候人会闲着,电脑却被这个任务占用了,无能为力。这是浪费时间。(程序员工资这么高,时间这么浪费,损失惨重!),而对于CPU这个计算机的核心部件来说,并不总是有数据要运行,还有操作在等待对于其他组件,比如IO操作,等待IO的时间很长,浪费了宝贵的CPU资源。所以这种电脑运行效率很低,所以操作系统解决的问题之一就是提高效率,提高CPU的使用率,不让CPU休息,疯狂的压榨它!!!同时,如果电脑操作员直接操作电脑硬件,既麻烦又容易出错,所以人们总是寻求一些方法来解决现有的问题。任何学科都建立了这种解决问题的方法。既然麻烦,不如按照计算机领域的哲学方法论来解决:存在的问题,那么操作系统相对于硬件来说就是中间层。它的出现屏蔽了底层硬件的细节,从而大大降低了出错的概率,让计算机操作人员操作起来更加顺畅,程序也可以由操作系统自动管理。上面提到的两个问题可以用三个词来概括:自动化。程序员总是倾向于追求自动化,比如自动化测试等等。自动化有什么好处?借用工业革命时期的一句话,就是:解放生产力。而不是那些重复性的工作。因此,操作系统的出现也可以比作生产力的解放,让程序运行起来更有效率。既然我们知道了自动化运行需要这样的操作系统,那什么是操作系统呢?为什么叫操作系统而不是管理系统或其他名称?什么是操作系统?操作系统的英文名称是:OperatingSystems。翻译成操作系统,操作这个词有点像流水线工人操作员,是不是感觉有点土?这样理解的话,就有点偏差了。这是另一个英文单词:OperatingSurgeon。这个词的意思是首席外科医生。谁是主刀?他是整个手术室的权威。来人要xx手术刀,助理医生马上就送来了。他是手术室里主宰一切的人。所以操作系统是主宰一切的系统,是计算机系统世界的领导者。那么操作系统主导什么,它都包含什么?当然,计算机上发生的一切。在最原始的计算机中,没有操作系统,而是由人直接控制事物,这就是所谓的单一控制终端和单一操作员模式。但随着计算机复杂度的增加,人类不再有能力直接控制计算机。所以我们编写操作系统来控制计算机,将人类从控制它们的日益复杂的任务中解放出来。由此可见,操作系统是掌控计算机一切的舵手,权限至高无上。我们知道操作系统管理着计算机的一切,那么操作系统到底管理什么?操作系统管理什么?这张图看得更清楚了。如下所示。操作系统的4个核心管理,当然还有其他的安全管理等等。如图,第一个是进程管理,一共有三个管理要素:第一个是公平性,即每个程序都有机会被CPU执行。二是非阻塞。没有程序可以无限期地阻塞CPU以供其他程序执行。如果一个程序在运行过程中需要输入输出或者被其他东西阻塞,这种阻塞并不能阻止其他进程继续运行。第三是优先级,CPU也有优先级之分,也就是说优先级高的进程会先被CPU执行,优先级次之。内存管理主要是管理缓存、主存、磁盘、磁带等存储介质所形成的内存架构。为了实现这种内存架构,设计了一种虚拟内存的分层结构,将物理内存扩展为外部存储介质。这样内存空间就大大增加了,可以运行的程序大小也大大增加了。内存管理的另一个目的是让许多程序共享同一物理内存。这就需要对物理内存进行分段和保护,防止一个程序访问另一个程序占用的内存空间。外存管理通常也称为存储管理,也就是文件系统管理。文件系统的主要目的是将磁盘变成一种易于使用的存储介质,供用户使用。这样,我们在访问磁盘时就不需要知道磁盘的物理属性,也不需要知道数据在磁盘上的精确位置,如磁道、列、扇区等。当然,文件系统也可以建立在光盘和磁带上。只不过最常用的文件系统都是用磁盘作为介质的。I/O管理,也称为设备管理,就是对输入输出设备进行管理。I/O管理的目的有两个:一是屏蔽不同设备的差异性,即用户访问不同设备的方式相同,从而降低编程难度。要知道有成千上万的IO设备,每一个IO设备的适配都在这里进行,这就是抽象和封装的魅力;二是提供并发访问,即可以共享看似不具备共享特性的设备(如打印机等)。带着以上三个问题,我们进入了操作系统的世界,了解了操作系统为什么会产生,它是干什么的。接下来我们就进入正题了,操作系统的历史,那么操作系统到底经历了什么?经验法则:一张图片胜过一千个字。让我们从处于起步阶段的状态机系统开始。第一阶段:状态机系统状态机系统出现在计算机的萌芽阶段,也就是1940年左右之前。实际上,这种系统不能算是操作系统,因为它是一个简单的状态转换程序通过特定输入和特定状态进行转换。能做的计算也很简单,仅限于加减法,不支持命令交互等功能。当然,它有一个非常大的优势,没有安全隐患,很少人能接触到,自然没有安全问题。第二阶段:单一控制系统如果你学过计算机概论,你应该了解计算机领域的经典模型——冯·若伊曼体系结构原理。1945年前后提出,属于这一时期。还记得我们的世界第一台电子计算机是什么时候出现的吗?是的,也是在这个时期出现的。它于1946年2月诞生于美国宾夕法尼亚大学,名字叫ENIAC。事实上,这台电子计算机并没有配备所谓的操作系统。它只是提供了一些标准命令供用户使用。这些标准命令集构成了最初的操作系统SOSC(SystemOperationSupportCenter)。这些SOSC满足系统运行的基本功能,并提供人机交互功能。在这种情况下,它们在任何时候都只能做一件事,不支持并发或多道程序设计。这种系统下的资源利用率很低。你输入一个命令,它执行一次,类似于拨号和移动,但移动它会占用所有计算机。在这种情况下,我们可以理想地只运行一个程序。从机器的角度来看,它必须一直等待人操作。效率实在是太低了。有关详细信息,请参见下图。如果多人需要使用这台电脑,指令会断断续续,影响效率。即使一个人输入多个指令,相对于计算机,人输入指令的速度也会非常慢。有没有不等待别人自己执行的操作?随着计算机的发展,当然有,然后我们就会打破这种过于笨拙的局面,来到自动化时代。Phase3:BatchProcessingSystems仔细审视SOSC,发现SOSC效率低下的原因是计算机一直在等待人的下一步动作,而人总是很慢。因此,人们觉得,如果去掉等待人输入命令的时间,所有人都应该先想好自己要运行的命令组成一个程序,然后列一个清单,打印在纸带上,然后交给它交给操作员。分批处理不就可以提高效率吗?这样就形成了一个批处理操作系统。这又一次大大提高了操作系统SOSC对单个控制端的效率。显然,在这种工作模式下,系统的功能得到了提升,复杂度也有所增加。在这个系统中,用户只需要将程序放到磁带上,用户不在场就可以做其他事情。接下来就是操作员操作批处理系统,对任务进行一项一项的处理,并给出处理后的结果。出现了最早的自动化处理原型。但此时,也只能一一处理了。当任务读取IO时,CPU会等待。这还是会在一定程度上影响CPU的运行效率。有什么办法可以改善吗?这时候,我抓住了CPU和I/O设备是串行运行的事实,做了一篇文章。第四阶段:多通道批处理系统我们来看一下单通道批处理下CPU和IO操作的关系,如图。当进行IO操作时,CPU会等待IO操作的结果,结果返回后会继续执行程序。我们此时可以认为程序是串行的。由于I/O设备相对于CPU运行速度如此之慢,因此让高速设备等待低速设备是不可接受的。CPU和I/O可以并发吗?即当一个程序输入输出时,另一个程序继续执行。换句话说,是否可以通过重叠CPU的操作和I/O设备的操作来改善整个系统?答案是肯定的,我们可以设计多个程序同时加载到计算机内存中,以前内存中只有一个程序,现在有多个程序在运行,于是出现了多程序批处理操作系统。这是一个划时代的操作系统。从原来的任务串行执行到任务并发执行,CPU使用率有了很大的提升,如图。这样CPU随时都可以开始使用,不会再打瞌睡了。这两个阶段可以围绕如何提高CPU运行效率进行优化。可以发现,当程序1要让出CPU时,是让程序2执行还是让程序n执行,这就涉及到CPU运行时间如何分配。随着发展,我们有了分时运行的方案。第五阶段:分时系统和多通道批处理操作系统的出现,大大提高了计算机的效率(主要是吞吐量)。但是,批处理系统存在一个很大的问题。编写程序的人需要将其交给计算机操作员来执行程序。全部执行完才能知道结果,执行步骤也不知道。这显然是低效的,也是非常不可接受的。万一电脑操作员弄错或者忘记了,那么这个时候就需要提出让每个人都能拥有电脑的使用权,从而考虑如何分配CPU资源。这是一个分时系统,分配给每个用户的时间是均等的。也就是给大家一个有限的时间,只要时间到了,就换一个流程。这种分时切换下的操作系统是分时操作系统。在这种系统下,用户可以自行调试程序。这相当于多个程序同时执行。只要我们把CPU切换时间无限细分,每个用户都会有一种自己独占计算机资源的感觉。在这种运行方式下,多个程序一起执行,这就是我们现代操作系统中进程并发的概念。详情如图所示。A、B、C、D四个程序在CPU上依次执行。如果各自细分成无限细分,就好像A、B、C、D这四个程序各自独占了CPU资源。这也发生了程序执行的并发现象是一种错觉,只是执行速度太快了,人类无法感知。在分时系统下,操作系统的复杂度开始大幅度增加,同时还会涉及到资源互斥、进程通信死锁、保护等问题,复杂度指数可以说增长得超快。那么在分时系统下,各个进程获得CPU的执行时间是公平的,没有偏差。这会导致一个问题。例如,输入单词时不可能等待CPU执行操作。必须及时响应,否则用户体验极差!所以有一个实时系统。第六阶段:实时系统随着计算机技术的进步,有一种需求:程序需要运行时立即运行,而不是等待分时轮到执行进程,如当前的鼠标、键盘等输入需要在不破坏操作系统原有操作系统的情况下响应这些事件。也就是说,计算机必须在指定的事件范围内响应这些事件。这是一个实时系统,具体如下图所示。这时候响应事件的优先级最高,CPU会优先处理这些高质量的事件,也就是有被实时处理的感觉。第七阶段:现代操作系统1980年以后,开始进入现代操作系统时代。计算机行业开始迅速腾飞,出现了DOS、Windows、MacOS等主流操作系统。总结了前几个阶段的优缺点,发展了现代操作系统,同时期也出现了PC,计算机的计算能力开始大幅提升。后来出现了网络,又发展了分布式操作系统。在操作系统的历史演进过程中,我们可以发现,它基本上都是围绕着如何提高CPU效率展开的。我们的目标是防止CPU打瞌睡。围绕这一点看一下计算机的发展史,就非常可以理解当前时代出现的问题是什么,如何解决。终于,我们生活在最好的时代,一个只要动动手就能得到想知道的信息的时代。让我们一起享受这个时代带来的便利吧!