2.1.2 计算机结构与操作系统的产生
了解操作系统的发展历史,有助于理解操作系统的关键性设计需求,也有助于理解现代操作系统的基本特征。在研究操作系统的形成和发展之前,需要对计算机系统的结构有一个全面的了解。
1.计算机系统结构简介
一台计算机由处理器、存储器、输入/输出(I/O)设备和系统总线等部件组成,这些部件以某种方式互相连接(一般为系统总线),共同实现计算机执行程序的功能,各个部件作用如下。
处理器:控制计算机的操作,执行数据处理功能。当只有一个处理器时,它通常指中央处理器(CPU)。
主存储器:存储数据和程序。这个存储器是易失的,通常称为主存储器或内存。
I/O设备:在计算机和外部环境之间移动数据。外部环境由各种外部设备组成,包括辅助存储器设备(通常为磁介质、光介质存储设备)、通信设备和终端、键盘、鼠标等。
系统总线:为处理器、主存储器和I/O设备间的通信提供的一些结构和机制。
现代通用计算机系统涉及的I/O设备很多,由设备控制器来管理,每个设备控制器负责一种特定类型的设备(如磁盘驱动器、音频设备、视频显示器)。CPU与设备控制器可以并发工作,并竞争内存周期。为了确保对共享内存的有序访问,需要内存控制器来协调对内存的访问。这些部件都是计算机硬件资源。
2.操作系统的发展历史
从1946年世界上第一台计算机出现,到操作系统产生,在时间上经历了3个主要阶段:1946年~20世纪50年代中期无操作系统阶段;20世纪50年代后期简单操作系统阶段;20世纪60年代单CPU多道环境操作系统产生。正如2.1.1小节所说,操作系统最基本的目标是提高资源利用率和方便用户使用,因此在操作系统发展过程中,几个关键的技术阶段可以总结为:程序切换方式的变化——从手工处理到机器自动调度;多设备运行关系的变化——从串行运行到并行运行;程序运行方式的变化——从单道程序到多道程序。
(1)程序切换方式:从手工处理到机器自动调度——解决人机矛盾
20世纪40年代后期~20世纪50年代中期,是早期的计算机发展阶段,这期间称为第一代电子管计算机时代,当时还没有操作系统,程序员都是直接与计算机硬件打交道的,使用方式是用户独占计算机,每次只能一个用户使用计算机,一切资源由该用户占有。每台机器由控制台控制,控制台包括显示灯、触发器、某种类型的输入设备和打印机。用机器代码编写的程序通过输入设备(如卡片阅读机)人工控制载入计算机。如果程序运行出现错误,程序终止,错误提示由显示灯指示。程序员修改错误后,重新输入程序。如果程序正常完成,输出结果在打印机上打印。
计算机的主要工作是运行程序,程序的运行时间是机器的必须开销,除此之外,此时计算机的最大时间开销主要有两个:一个是运行程序间的调度时间,另一个是程序(作业)的准备时间。第一类时间开销,可以通过一定方法减少程序占用机器时间的浪费,比如每个用户为运行的程序预定使用机器的时间和时长,机器按照这个预定表调度程序,一个程序运行时间如果比预定时间短,空余的时间会浪费,相反,如果超时则会被强制停止,但是程序切换还需要人为干预;第二类时间开销只能由程序员将编写好的程序机器码穿成卡片,由卡片阅读机将程序装入内存。解决以上两类时间开销问题都需要人工介入,人工的速度相对于机器来说非常慢,所以产生了人机矛盾。
早期的机器非常昂贵,因此最大限度地使用机器非常重要,由于调度和准备而浪费的时间是难以接受的。为了提高机器利用率,人们开发了一个程序运行监督程序来解决第1个问题,由该程序来取代预定时间调度,监督程序实时了解程序运行状态,如果正在运行的程序出错或结束,监督程序自动调度下一个程序运行,实现自动的串行调度处理,在一定程度上解决了人机矛盾,后来称这种监督程序为批处理操作系统的雏形。根据这一雏形,20世纪50年代中期由通用汽车公司开发了第1个批处理操作系统,也是第1个操作系统,在IBM701上运行。
(2)多设备运行关系:从串行运行到并行运行——提高资源利用率
程序调度监督程序,实现了程序自动调度执行,解决了程序间人工调度或按预定时间表执行所浪费的时间,计算机的使用效率提高了,但是处理机仍然经常空闲。问题在于,一个程序计算的内容是依靠输入设备输入的,相对于处理器来说,I/O设备速度太慢,造成I/O设备工作时,CPU长时间空闲。看一个程序执行的例子,程序的任务是处理一个记录文件,每读一条记录后进行处理,之后进行输出。处理器的处理能力是平均每秒处理100条指令,图2-7给出了一组有代表性的数据,描述处理机的运行情况,整个工作时间中,计算机用96.8%的时间等待I/O设备读写数据,造成的浪费很明显。
图2-7 I/O速度与CPU速度比较
这个问题是由作业的输入/输出联机(简称联机I/O)造成的。所谓联机I/O是指由CPU直接控制I/O设备,其工作过程是,程序员把写好的程序交给操作员,操作员把一批作业穿装到纸带上,输入设备(输入机或读卡机)读取纸带上的程序,将其写到磁带上,监督程序读取(CPU直接控制)磁带数据装入内存运行;程序结束时,监督程序读取(CPU直接控制)磁带上结果到输出设备。也就是说,作业从输入机到磁带,由磁带调入内存,以及结果的输出打印都是由CPU直接控制的(联机),如图2-8所示。在这种联机操作方式下,随着处理机速度的不断提高,处理机和I/O设备的速度差距形成了一对矛盾。因为在进行输入或输出时,CPU是空闲的,使得高速的CPU要等慢速的I/O设备,从而不能发挥它应有的效率。为了克服这一缺点,在批处理系统中引入了脱机输入/输出(简称脱机I/O)技术,即CPU不直接控制I/O设备,而是采用一个简单的外围机控制I/O设备,输入时,外围机将代码从低速I/O设备(如纸带机)读取到高速I/O设备(磁盘或磁带)中,输出时,外围机将代码从高速I/O设备(磁盘或磁带)读取到低速I/O设备(如纸带机)中,而CPU只与高速I/O设备交换数据,从而减少对I/O设备的依赖性,如图2-9所示。
图2-8 联机I/O示意图
图2-9 脱机I/O示意图
为了消除而不是仅仅减少计算机处理效率对I/O设备的依赖性,必须使I/O和CPU并行处理,并行处理是在通道和中断两种硬件的帮助下得以实现的。通道是专门用来控制I/O设备的处理器,称为输入/输出处理器(简称I/O处理器);中断是可以中断/恢复CPU工作的机制。与主机相比,通道速度较慢,价格较便宜。它可以与CPU并行工作。当要传输数据时,CPU只要命令通道去完成I/O工作,自己仍做计算工作,当通道完成传输工作后,用中断机构向CPU报告I/O工作完成情况,CPU中断原有工作,转而完成接收/输出数据工作。这样,CPU和I/O设备就可以并行工作,而不必让CPU空闲等待低速I/O设备工作,在很大程度上提高了资源的利用率。
(3)程序运行方式:从单道程序到多道程序——从根本上提高设备利用率
设备上的并行操作,初步解决了高速处理机和低速I/O设备的矛盾,提高了计算机的工作效率,但是不久又发现,这种并行是有限的,并不能完全消除CPU对I/O的等待。因为到目前为止,所讨论的计算机运行环境都是资源为一个程序所独占的环境(称为单道程序环境),在这种环境下,即使设备可以并行,由于内存中只有一个用户作业运行,CPU在等待通道控制I/O的过程中,无事可做,仍然处于空闲状态。那么,为了提高设备的利用率,能否在系统内同时存放几道程序呢?这就引入了多道程序的概念。所谓多道程序,是指在计算机内存中同时存在几道已经运行但尚未结束的相互独立的程序。
在多道环境下,CPU在等待一个作业传输数据时,就可以转去执行内存中的其他作业,从而保证CPU以及系统中的其他设备尽可能被充分利用,图2-10所示为2道程序运行时CPU的利用率比单道运行有所提高。
图2-10 多道程序运行时CPU利用情况
3.解决多道程序共享资源——操作系统的产生
多道程序设计的思想使设备利用率从根本上得到解决,但是,内存中存放多个作业,多个作业共享系统的所有资源,给系统带来一系列复杂的问题,例如,内存如何分配给多个作业?CPU如何为多个作业所用?不仅计算机的硬件资源,软件资源也面对如何为多道程序共享使用的问题。总的来说,多道程序环境下,需要解决以下问题:
·处理机管理问题;
·内存管理问题;
·I/O设备管理问题;
·文件管理问题;
·作业管理问题。
解决这些问题是计算机有效工作的根本,需要专门的机制,因此操作系统产生了,这些问题恰恰就是操作系统要解决的问题。接下来就要在一个CPU、一个内存、一套外设的环境下讨论操作系统的基本功能及作用。