概述:
操作系统协调各任务公平分享CPU。所谓的操作系统隐藏在各任务和中断背后,在系统运行时,并不以独立的形式存在,没有自己的执行线程。就像赛场外的裁判,只是协调整个比赛过程,而不亲自参与比赛,由运动员自己进行比赛。什么时候这个裁判才起作用呢?当系统时钟中断或系统调用时,操作系统代码才会出面协调任务的进行。而中断处理在某些方面超出了系统软件的管理范围,而由CPU硬件触发,比所有任务都优先执行。中断处理以外剩余的CPU时间,由各任务依据优先级设置、资源分配和执行流程来共同分享。
在系统运行时,除了任务、中断这样的动态运行对象外,还存在一些静态对象,如调度机制、任务间通信机制、内存管理机制和输入输出系统等。这里所讲的静态是相对的,指这些对象代码没有自主的执行线程,总处于被动的调用状态。调用时对内存中的分配的静态数据结构进行操作,有时也改变任务的运行状态。
操作系统在计算机运行过程中扮演的角色:魔术师和管理者。
魔术师隐藏了背后的复杂,把差的东西变好,把少的东西变多,把复杂的东西变得容易。
操作系统通过进程抽象让每个用户感觉到有一台自己独享的CPU;通过虚拟内存的抽象,让用户感觉到物理内存空间具有无限扩张性。
管理者则针对所有计算机资源进行管理以达到公平和效率的“双料”境界。操作系统对CPU、内存、磁盘等的管理,使得不同用户之间或者同一用户的不同程序之间可以安全有序的共享这些硬件资源。
历史:
操作系统Operating Systems指的就是掌控局势的一种系统。掌控的是计算机或计算机里发生的一切事情。最原始的计算机并没有操作系统,而是直接由人来掌控事情,即所谓的单一控制终端、单一操作员模式。但随着计算机的复杂性的增长,人已经不能胜任直接掌控计算机了。于是我们编写出OS这个软件来掌控计算机,将人类从日益复杂的任务中解脱出来。由于计算机的功能和复杂性不断发生变化,操作系统锁掌控的事情也就越来越多,越来越复杂。同时操作系统本身能够使用的资源也不断增多。
操作系统的不断发展与改善由两个因素驱动:
1,硬件成本的不断下降
2,计算机的功能和复杂性的不断变化
第一阶段:单一操作员、单一控制端操作系统(20世纪40年代)
代表机型是ENIAC。此时没有操作系统的整体概念,唯一想到的就是提供一些标准命令供用户使用,这些标准命令集合就构成我们原始的操作系统SOSC(单一操作员、单一控制终端 single operator,singleconsole)。
SOSC操作系统的设计就是满足基本的功能,并提供人机交互。在这种操作系统下,操作系统本身只是一组标准库函数而已。操作系统不自我运行,而是等待操作员输入命令再运行。用户想使用什么服务,就直接在命令行键入代表该服务的对应操作系统的库函数名即可。
第二阶段:批处理操作系统(20世纪50年代)
SOSC效率之所以低下,是因为计算机总是在等待人的下一步动作,而人的动作总是很慢。因此,如果将人的因素拿走,让所有人先想好自己要运行的命令,列成一个清单,打印在纸带上,然后交给一个工作人员来一批一批地处理,效率不就提高了么。
批处理操作系统针对的是第二代通用计算机,如IBM的1401和7094等,通过去除人机交互达到CPU和输入输出利用率的改善。
在SOSC环境下,每个用户自己控制程序的开始和结束。而在批处理下,很多用户的程序一个接一个地存放在磁带上,用户本人无法控制程序的开始和结束。而这个任务就交给了批处理操作系统。整个批处理操作系统是由批处理监视器和原来的操作系统库函数组成。
此种操作系统的任务就是加载一个程序、运行、打印结果,然后执行下一个程序。
第三代:多道批处理操作系统(20世纪60年代)
虽然批处理操作系统通过无需人机交互过程而在一定程度上提高了计算机的效率,但还是不那么令人满意。因为,CPU和输入输出设备的运行是串行的,即在程序进行输入输出时,CPU只能等待。CPU需要不断地探询I/O是否完成,因而不能执行别的程序。(磁带上的程序要先读进来,程序才能执行,执行完了又需要写到另一个磁带上。读写磁带的时候CPU是不工作的,这就是很大的浪费。)
能否将CPU和I/O进行并发呢?即在一个程序输出结果时,让另一个程序继续执行。CPU和I/O重叠需要我们将多个程序同时加载到计算机内存里(以前是加载一个程序,执行,输出,再加载下一个程序),从而出现了多道批处理系统。
由于多个程序同时执行,操作系统需要能够在多个程序之间进行切换,并且能够管理多个输入输出设备,同时还要能够保护一个进程不受另一个进程干扰。此时的操作系统要复杂的多:即要管理工作,又要管理内存,还要管理CPU调度。
第四代之一:分时操作系统(20世纪70年代)
多道批处理操作系统的出现使计算机的吞吐率大大提高,但是另一个问题,将程序制作在卡片上交给计算机管理员统一运行,将使用户无法立即获知程序运行的结果。
能否让人回到计算机前面来,每个人自己管理自己的程序,大家的程序可以同时运转。人的因素又引了回来。这看上去与原始的SOSC似乎一样,但有很多关键不同:多人同时连在计算机上,每个人是一个I/O终端而已,终端显示器只能接收和发送有限的文本命令和信息。计算机在所有连接的终端用户之间进行分时,即分给每个人有限的时间,只要时间到了,就换一个进程。
在分时操作系统下,任意时间可以运行多个程序,用户直接与计算机交互,可当场调试程序。SOSC是一切等着人,执行一条命令就等人,分时系统是人等机器。机器不用再等你,当你想问题的时机器就切换到别的程序,等你想完了机器再切换回来,接受你的输入。
因为机器昂贵,我们不能容忍机器(CPU)在I/O设备工作期间闲置下来。同时,因为人的时间宝贵,我们不能容忍人们在机器面前漫长等待。因此,我们发明了分时操作系统来解决这两个问题。因为分时而引入的多道程序设计,又造成操作系统的空前复杂,我们需要应对竞争、通信、死锁、保护等一系列的新功能。
之二:实时操作系统
使用计算机对某些工业进程进行监视,并在需要的时候采取行动,这种对计算机响应时间有要求的系统通常称为临界系统或应用。为了满足这些应用对响应时间的要求,人们就开发了实时操作系统。实时操作系统是指所有任务都在规定时间内完成的操作系统,即必须满足时序可预测性。显然,实时操作系统的最重要部分是进程调度。只有精确、合理和及时的进程调度才能保证响应时间。
第五代:现代操作系统(1980年以后)
随着硬件越来越便宜,个人机出现了。人们可以拥有自己的电脑,无需与别人分享。由于个人机由用户一个人独享,分时操作系统的许多功能就无需存在。因此,个人操作系统又变回了标准库函数系统。(例如DOS)
但人们发现没有分时功能的操作系统使一些事情做不了。因为,虽然只有一个人在用机器,但这个人可能想同时想做好几件事。于是又将各种分时功能加了进去。于是Windows NT等就出现了。