《操作系统概念》(第六版)第三章 操作系统结构的翻译已经完成。详细内容请见http://www.tulipsys.com
操作系统提供了执行程序的环境。在内部,操作系统的构成相当不同,它们沿着一些不同的思路组织。新的操作系统的设计是主要的工作(major task)。设计之前必须要明确定义系统目标。针对所期望的系统类型选择算法和策略。
可以从几个有利的位置来观察一个操作系统。首先是分析它所提供的服务。其次是分析它向用户和程序员提供的接口。最后是分析系统组件和这些组件之间的联系。本章我们将研究操作系统的这三个特征,并展现用户、程序员以及操作系统设计者的观点。我们要考虑:操作系统提供了什么样的服务、它是怎样提供这些服务的,以及设计这样的系统需要什么样的方法学理论。
3.1 系统组件
构造像操作系统这样大型的复杂的系统就必须要将它划分成许多小块(piece,可以理解为子系统)。每一小块必须是系统某一部分的详细定义,这包括输入、输出和功能。显然,不是所有的系统都有着同样的结构。然而许多现代操作系统有着同样的目标,就是支持从3.1.1节到3.1.8节所列出的系统组件。
3.1.1 进程管理
程序本身并不能做什么,只有在CPU执行它的指令时才能有所作为。可以把进程看作是正在运行的程序,但是当我们进一步研究时,对进程的定义将更为普遍。一个分时用户程序(如编译器)是一个进程。个人用户在PC上运行的字处理程序是一个进程。一个系统任务(如输出到打印机)也是一个进程。现在,我们认为进程是一个作业或分时程序,但是,稍后你将明白这个概念更加普遍。在第四章中将会看到我们可以提供允许进程创建与其并发执行的子进程的系统调用。
进程需要特定的资源(包括CPU时间、内存、文件和I/O设备)来完成工作。这些资源或者在进程创建时分配给它,或者在其运行时。除了在进程创建时所获得的各种物理资源和逻辑资源以外,各种各样的初始化数据(或输入)也可能一同传送。例如,考虑一个能够在终端的显示屏上显示一个文件状态的进程。这个进程将获得包含输入的文件名,并且将执行相应的指令和系统调用来获取所期望的信息并显示在终端上。
我们着重强调一个程序本身不是一个进程;程序是一个静态实体(passive entity)(像是存储在磁盘中的文件的内容),而进程是一个动态实体(active entity),它由一个程序计数器指明要执行的下一条指令。进程必须要按顺序执行。CPU执行完进程的一条指令后再执行下一条,直到进程结束。更进一步讲,最多执行一条代表该进程的指令。这样,从来就不会出现两个独立运行的序列。一个程序在运行时创建多个进程是非常普遍的。
在系统中,进程是工作单元。这样的系统由进程集合构成,有些是操作系统进程(那些执行的系统代码),其它的是用户进程(那些执行的用户代码)。通过对CPU的多路复用,所有的这些进程可以被并发执行。
操作系统要负责下列与进程管理相关的工作:
·创建和撤销用户及系统进程
·挂起和恢复进程
·提供进程同步机制
·提供进程通信机制
·提供死锁处理机制
我们将在第4章到第7章中讨论进程管理。
3.1.2 主存储器管理
就像我们在第1章中所讨论的,主存储器是现代计算机系统运行的核心。主存储器是由字或字节组成的大型队列,容量在数十万到数十亿之间。每个字或字节都有它自己的地址。主存储器是CPU和I/O设备共享的大容量快速存储器。中央处理器在取指令周期中从主存储器中读取指令,而且在取数据周期中从主存储器中读写数据。通过DMA,I/O操作也实现了对主存储器的数据读写。通常主存储器是CPU唯一能够直接寻址和访问的大容量存储空间。例如,CPU要处理磁盘中的数据,那么CPU首先发出I/O调用将这些数据传送到主存储器中。同样,指令必须在存储器中才能够由CPU执行。
为了执行一个程序,必须要将它映射到绝对地址并载入内存中。在程序运行时,它通过产生绝对地址来从内存中访问程序指令和数据。最后,程序结束,它将释放所占内存空间,下一个程序能够被载入并执行。
为了提高CPU利用率和计算机响应速度,我们必须在内存中保留多个程序。有许多不同的内存管理策略,而且不同算法的效率取决于具体的环境。为具体的系统选择内存管理策略要考虑到许多因素——尤其是系统的硬件设计。每种算法都需要自己的硬件支持。
操作系统要负责下列与内存管理相关的工作:
·跟踪内存使用情况,明确哪一部分正在工作和为谁所用
·在内存空间有效时决定将哪个进程载入内存。
·根据需要分配和释放内存空间
将在第9章和第10章中讨论内存管理技术。
3.1.3 文件管理
文件管理是操作系统中可视性最强的组件之一。计算机能够将数据存储在各种类型的物理介质上。磁带、磁盘和光盘是最常用的介质。每种介质都有自己的特性和物理结构。每个存储媒体由一个驱动器控制(如磁盘驱动器或磁带驱动器),这种驱动器也有自己的独有特性。这些特性包括访问速度、容量、数据传输率和存取方式(顺序的或随机的)。
为了便于使用计算机系统,操作系统提供了一个计算机系统的整体逻辑层面。操作系统把存储设备的物理属性抽象定义为一个逻辑存储单元——文件。文件被映象到物理媒介中,通过存储设备来访问这些文件。
文件是由其创建者定义的相关信息的集合。一般的文件表现为程序(源程序和目标代码)和数据。数据文件可能是数字的、字母的或二者混合的。文件可能是形式自由的(如文本文件),也可能有严格定义的格式(如固定字段)。(Files may be free-form (for example, text files), or may be formatted rigidly (for example, fixed fields).)由字、字节、行或记录组成的文件结构是其创建者定义的。文件概念具有相当广泛的含义。
操作系统通过管理大量存储体(如由驱动器控制的磁盘和磁带)实现了文件的抽象概念。另外,为了更简易的使用文件,通常将他们组织到目录中。最后,如果有多个用户访问文件,我们可能需要控制谁以什么样的方式(例如:读、写、追加)访问。
操作系统要负责下列与文件管理相关的工作:
·创建和删除文件
·创建和删除目录
·将文件映象到辅助存储器中
·将文件备份到永久(非易失性)存储体中
我们将在第11章和第12章中讲述文件管理技术。
3.1.4 I/O系统管理
操作系统的目的之一就是要向用户隐藏具体的硬件特性。例如,在UNIX中,通过I/O子系统向操作系统本身隐藏了I/O设备的特性。I/O子系统由以下几个方面组成:
·一个内存管理模块,这包括:buffering、caching和spooling。
·一个通用设备驱动程序接口
·针对具体硬件设备的驱动程序
只有设备驱动程序了解所指定的具体设备特性。
在第2章中我们讨论了高效的I/O子系统结构是如何应用中断处理程序和设备驱动程序的。在13章,我们将讨论I/O子系统怎样与其它的系统模块相连、怎样管理设备、怎样传输数据和怎样探测I/O操作结束。
3.1.5 辅助存储器管理
操作系统的主要目的是执行程序。这些程序在运行时(以及它们要访问的数据)都必须在主存储器中。因为主存储器的容量太小不能存储所有的程序和数据,而且掉电后会丢失所有的存储信息,所以计算机系统必须要提供辅助存储器作为主存储器的后备。大多数现代计算机系统使用磁盘作为存储程序和数据的主要联机存储体。大多数程序(包括编译程序、汇编程序、排列程序、编辑程序和格式化程序)在载入内存之前存储在磁盘上,并且在运行时利用磁盘存储它们所处理的源文件和目标文件。因此,合理的磁盘管理对一个计算机系统来说是至关重要的。
操作系统要负责下列与辅助存储器管理相关的工作:
·空闲空间管理
·空间分配
·磁盘调度
因为频繁的使用辅助存储器,所以必须要能够高效运行。计算机的整体运行速度取决于磁盘子系统的速度和该子系统的实现算法的效率。将在第14章讨论辅助存储器管理。
3.1.6 网络管理
分布式系统是一个处理机的集合,这些处理机既不共享内存和外围设备,也不共享时钟。而是每个处理机拥有自己的本地内存和时钟,并且这些处理器可以通过各种通信线路(如高速总线或网络)进行通信。一个分布式系统中的处理机在规模和功能上有所不同。其中可能包括小型微处理器、工作站、小型机和大型通用计算机。
在(分布式)系统中,处理机通过通讯网络相连接,有多种不同的方法可以配置该网络。这种网络可以完全或部分的连接。通信网络的设计必须要考虑到报文路由选择和连接策略,以及争用和安全的问题。
分布式系统将物理上相互独立的可能不同种类的系统集合成为一个独立相连的系统,向用户提供了访问由系统维护的各种资源的能力。对共享资源的访问加快了计算速度、增强了系统功能、提高了数据的可用性并加强了可靠性。操作系统把网络细节包含在了网络接口设备驱动程序中,于是将网络访问泛化为一种文件访问的形式。分布式系统所使用的协议在很大程度上影响到系统的效用和普及。环球网的创新在于为信息共享提供了新的途径。它改进了现有的文件传输协议(FTP)和网络文件系统(NFS),去掉了用户需要登陆才能访问远程资源的限制。环球网定义了一个新的协议——超文本传输协议(http),它用于在web服务器和web浏览器之间进行通信。一个web浏览器只需要向远程机器的web服务器发送一个信息请求,然后获得返回信息(文本、图片、指向其它信息的链结)。这种在易用性上的提高促进了http和Web应用的快速成长。
我们将在第15章到第17章中讨论网络和分布式系统。
3.1.7 系统保护
如果一个计算机系统有多个用户并允许并行执行多个进程,那么必须要保护各个进程免受其它进程行为的干扰。为此,需要提供一种机制来保证只有那些从操作系统获取了合适权限的进程能够操作文件、存储段、CPU和其它资源。
例如,内存寻址硬件确保了一个进程只能在自己的地址空间内执行。计时器确保进程最终能够放弃对CPU的控制。用户不能够访问设备控制寄存器,这样就保护了各种外围设备的完整性。
保护是由操作系统定义的控制程序、进程或用户访问的机制。这个机制必须要提供一种方法来描述要施加的控制,以及强制执行的方法。
通过检测子系统接口中潜伏的错误,保护能够增强系统的可靠性。对接口错误的早期检测常常能够阻止一个正常的子系统被另外一个子系统故障所侵扰。一个未受保护的资源难以防止未授权或不适当的用户的使用(或误用)。一个面向保护的系统提供了一种区分经授权的和未授权的使用的方法,这将在第18章中讨论。
3.1.8 命令解释程序
命令解释程序是操作系统中最重要的系统程序之一,它是用户和操作系统间的接口。有些操作系统在内核中包含了命令解释程序。其它的操作系统(像DOS和UNIX)把命令行解释器当作一个特殊的程序,(在分时系统中)当一个用户登陆到系统或初始化一个任务时,它就已经在运行了。
通过控制语句向操作系统提供了许多命令。当批处理系统中的一个新作业开始时,或当一个用户登录到分时系统中时,一个读取并解释控制语句的程序会自动运行。这个程序有时被称为控制卡片解释程序或命令行解释程序,而且经常被称为shell。它的功能很简单:获取下一条命令语句并执行。
通常操作系统在命令解释程序方面的差别很大,一个用户界面友好的命令解释程序会使操作系统更容易被一些用户接受(注意这句话指明了“一些用户”,与本段的后面部分对比)。用户界面友好的一个风格是用在Macintosh和Microsoft Windows中的基于鼠标的窗口菜单系统(mouse-based window-and-menu system)。可以移动鼠标的位置以指向图像、图标,或屏幕(屏幕用于显示程序、文件和系统功能)上。根据鼠标指针的定位,单击鼠标上的按钮可以执行一个程序、选择文件或目录(被称为文件夹)或弹出一个包含命令的菜单。有些用户喜欢功能更强大更复杂也更难掌握的命令解释程序。在这些命令解释程序中,通过键盘键入命令并在屏幕上显示或在终端上打印出来,然后通过“enter”(或“return”)键向命令解释程序发出信号,告知一条命令输入完成并等待运行。MS-DOS或UNIX命令解释程序就是以这种方式执行。
命令语句本身负责进程的创建和管理、I/O管理、辅助存储器管理、主存储器管理、文件系统访问、保护和网络。