一、简介
操作系统的主要任务,是为多道程序的运行提供良好的运行环境,以保证多道程序能 有条不紊地、高效地运行,并能最大程度地提高系统中各种资源的利用率和方便用户的使 用。为实现上述任务,操作系统应具有这样几方面的功能:处理机管理,存储器管理,设 备管理和文件管理。为了方便用户使用操作系统,还须向用户提供方便的用户接口。此外, 由于当今的网络已相当普及,已有愈来愈多的计算机接入网络中,为了方便计算机联网, 又在 OS 中增加了面向网络的服务功能。
二、处理机管理功能
在传统的多道程序系统中,处理机的分配和运行都是以进程为基本单位,因而对处理 机的管理可归结为对进程的管理;在引入了线程的 OS 中,也包含对线程的管理。处理机管 理的主要功能是创建和撤消进程(线程),对诸进程(线程)的运行进行协调,实现进程(线程) 之间的信息交换,以及按照一定的算法把处理机分配给进程(线程)。
1.进程控制
在传统的多道程序环境下,要使作业运行,必须先为它创建一个或几个进程,并为之 分配必要的资源。当进程运行结束时,立即撤消该进程,以便能及时回收该进程所占用的 各类资源。
2、进程同步
进程同步的主要任务是为多个进 程(含线程)的运行进行协调。有两种协调方式:
- (1) 进程互斥方式。这是指诸进程(线程)在对临界资源进行访问时,应采用互斥方式;
- (2) 进程同步方式。这是指在相互合作去完成共同任务的诸进程(线程)间,由同步机构 对它们的执行次序加以协调。
3.进程通信
在多道程序环境下,为了加速应用程序的运行,应在系统中建立多个进程,并且再为 一个进程建立若干个线程,由这些进程(线程)相互合作去完成一个共同的任务。而在这些进 程(线程)之间,又往往需要交换信息。例如,有三个相互合作的进程,它们是输入进程、计 算进程和打印进程。输入进程负责将所输入的数据传送给计算进程;计算进程利用输入数 据进行计算,并把计算结果传送给打印进程;最后,由打印进程把计算结果打印出来。进 程通信的任务就是用来实现在相互合作的进程之间的信息交换。 当相互合作的进程(线程)处于同一计算机系统时,通常在它们之间是采用直接通信方 式,即由源进程利用发送命令直接将消息(Message)挂到目标进程的消息队列上,以后由目 标进程利用接收命令从其消息队列中取出消息。
4.调度
在后备队列上等待的每个作业都需经过调度才能执行。在传统的操作系统中,包括作 业调度和进程调度两步。
(1) 作业调度。作业调度的基本任务是从后备队列中按照一定的算法,选择出若干个 作业,为它们分配运行所需的资源(首先是分配内存)。在将它们调入内存后,便分别为它 们建立进程,使它们都成为可能获得处理机的就绪进程,并按照一定的算法将它们插入就 绪队列。
(2) 进程调度。进程调度的任务是从进程的就绪队列中,按照一定的算法选出一个进程, 把处理机分配给它,并为它设置运行现场,使进程投入执行。值得提出的是,在多线程 OS 中,通常是把线程作为独立运行和分配处理机的基本单位,为此,须把就绪线程排成一个 队列,每次调度时,是从就绪线程队列中选出一个线程,把处理机分配给它。
三、存储器管理功能
存储器管理的主要任务是为多道程序的运行提供良好的环境,方便用户使用存储器, 提高存储器的利用率以及能从逻辑上扩充内存。为此,存储器管理应具有内存分配、内存 保护、地址映射和内存扩充等功能。
1.内存分配
内存分配的主要任务是为每道程序分配内存空间,使它们“各得其所”;提高存储器的 利用率,以减少不可用的内存空间;允许正在运行的程序申请附加的内存空间,以适应程 序和数据动态增长的需要。 OS 在实现内存分配时,可采取静态和动态两种方式。在静态分配方式中,每个作业的 内存空间是在作业装入时确定的;在作业装入后的整个运行期间,不允许该作业再申请新的 内存空间,也不允许作业在内存中“移动”。在动态分配方式中,每个作业所要求的基本 内存空间也是在装入时确定的,但允许作业在运行过程中继续申请新的附加内存空间,以 适应程序和数据的动态增长,也允许作业在内存中“移动”。
为了实现内存分配,在内存分配的机制中应具有这样的结构和功能:
- 内存分配数据结构。该结构用于记录内存空间的使用情况,作为内存分配的依据;
- 内存分配功能。系统按照一定的内存分配算法为用户程序分配内存空间; (3) 内存回收功能。系统对于用户不再需要的内存,通过用户的释放请求去完成系统的 回收功能。
2.内存保护
内存保护的主要任务是确保每道用户程序都只在自己的内存空间内运行,彼此互不干 扰;绝不允许用户程序访问操作系统的程序和数据;也不允许用户程序转移到非共享的其 它用户程序中去执行。 为了确保每道程序都只在自己的内存区中运行,必须设置内存保护机制。一种比较简 单的内存保护机制是设置两个界限寄存器,分别用于存放正在执行程序的上界和下界。系 统须对每条指令所要访问的地址进行检查,如果发生越界,便发出越界中断请求,以停止 该程序的执行。如果这种检查完全用软件实现,则每执行一条指令,便须增加若干条指令 去进行越界检查,这将显著降低程序的运行速度。因此,越界检查都由硬件实现。当然, 对发生越界后的处理,还须与软件配合来完成。
3.地址映射
一个应用程序(源程序)经编译后,通常会形成若干个目标程序;这些目标程序再经过链 接便形成了可装入程序。这些程序的地址都是从“0”开始的,程序中的其它地址都是相对 于起始地址计算的。由这些地址所形成的地址范围称为“地址空间”,其中的地址称为“逻 辑地址”或“相对地址”。此外 ,由 内存中的一系列单元所限定的地址范围称为“内存空间”, 其中的地址称为“物理地址”。 在多道程序环境下,每道程序不可能都从“0”地址开始装入(内存),这就致使地址空 间内的逻辑地址和内存空间中的物理地址不相一致。为使程序能正确运行,存储器管理必 须提供地址映射功能,以将地址空间中的逻辑地址转换为内存空间中与之对应的物理地址。 该功能应在硬件的支持下完成。
4.内存扩充
存储器管理中的内存扩充任务并非是去扩大物理内存的容量,而是借助于虚拟存储技 术,从逻辑上去扩充内存容量,使用户所感觉到的内存容量比实际内存容量大得多,以便 让更多的用户程序并发运行。这样,既满足了用户的需要,又改善了系统的性能。为此, 只需增加少量的硬件。
为了能在逻辑上扩充内存,系统必须具有内存扩充机制,用于实现 下述各功能:
- 请求调入功能。允许在装入一部分用户程序和数据的情况下,便能启动该程序运行。 在程序运行过程中,若发现要继续运行时所需的程序和数据尚未装入内存,可向 OS 发出请 求,由 OS 从磁盘中将所需部分调入内存,以便继续运行。
- 置换功能。若发现在内存中已无足够的空间来装入需要调入的程序和数据时,系统应能将内存中的一部分暂时不用的程序和数据调至盘上,以腾出内存空间,然后再将所需 调入的部分装入内存。
四、设备管理功能
设备管理用于管理计算机系统中所有的外围设备,而设备管理的主要任务是:完成用 户进程提出的 I/O 请求;为用户进程分配其所需的 I/O 设备;提高 CPU 和 I/O 设备的利用 率;提高 I/O 速度;方便用户使用 I/O 设备。为实现上述任务,设备管理应具有缓冲管理、 设备分配和设备处理以及虚拟设备等功能。
1.缓冲管理
CPU 运行的高速性和 I/O 低速性间的矛盾自计算机诞生时起便已存在了。而随着 CPU 速度迅速提高,使得此矛盾更为突出,严重降低了 CPU 的利用率。如果在 I/O 设备和 CPU 之间引入缓冲,则可有效地缓和 CPU 与 I/O 设备速度不匹配的矛盾,提高 CPU 的利用率, 进而提高系统吞吐量。因此,在现代计算机系统中,都无一例外地在内存中设置了缓冲区, 而且还可通过增加缓冲区容量的方法来改善系统的性能。 对于不同的系统,可以采用不同的缓冲区机制。最常见的缓冲区机制有单缓冲机制、 能实现双向同时传送数据的双缓冲机制,以及能供多个设备同时使用的公用缓冲池机制。 上述这些缓冲区都将由 OS 中的缓冲管理机制将它们管理起来。
2.设备分配
设备分配的基本任务是根据用户进程的 I/O 请求、系统的现有资源情况以及按照某种设 备的分配策略,为之分配其所需的设备。如果在 I/O 设备和 CPU 之间还存在着设备控制器 和 I/O 通道时,还须为分配出去的设备分配相应的控制器和通道。 为了实现设备分配,系统中应设置设备控制表、控制器控制表等数据结构,用于记录 设备及控制器的标识符和状态。根据这些表格可以了解指定设备当前是否可用,是否忙碌, 以供进行设备分配时参考。在进行设备分配时,应针对不同的设备类型而采用不同的设备 分配方式。对于独占设备(临界资源)的分配,还应考虑到该设备被分配出去后系统是否安全。 在设备使用完后,应立即由系统回收。
3.设备处理
设备处理程序又称为设备驱动程序。其基本任务是用于实现 CPU 和设备控制器之间的 通信,即由 CPU 向设备控制器发出 I/O 命令,要求它完成指定的 I/O 操作;反之,由 CPU 接收从控制器发来的中断请求,并给予迅速的响应和相应的处理。 处理过程是:设备处理程序首先检查 I/O 请求的合法性,了解设备状态是否是空闲的, 了解有关的传递参数及设置设备的工作方式。然后,便 向 设备控制器发出 I/O 命令,启动 I/O 设备去完成指定的 I/O 操作。设备驱动程序还应能及时响应由控制器发来的中断请求,并根 据该中断请求的类型,调用相应的中断处理程序进行处理。对于设置了通道的计算机系统, 设备处理程序还应能根据用户的 I/O 请求,自动地构成通道程序。
五、 文件管理功能
在现代计算机管理中,总是把程序和数据以文件的形式存储在磁盘和磁带上,供所有的 或 指 定 的用户使用。为此,在操作系统中必须配置文件管理机构。文件管理的主要任务 是对用户文件和系统文件进行管理,以方便用户使用,并保证文件的安全性。为此,文件 管理应具有对文件存储空间的管理、目录管理、文件的读/写管理,以及文件的共享与保护 等功能。
1.文件存储空间的管理
为了方便用户的使用,对于一些当前需要使用的系统文件和用户文件,都必须放在可 随机存取的磁盘上。在多用户环境下,若由用户自己对文件的存储进行管理,不仅非常困 难,而且也必然是十分低效的。因而,需要由文件系统对诸多文件及文件的存储空间实施 统一的管理。其主要任务是为每个文件分配必要的外存空间,提高外存的利用率,并能有 助于提高文件系统的存、取速度。 为此,系统应设置相应的数据结构,用于记录文件存储空间的使用情况,以供分配存 储空间时参考;系统还应具有对存储空间进行分配和回收的功能。为了提高存储空间的利 用率,对存储空间的分配,通常是采用离散分配方式,以减少外存零头,并以盘块为基本 分配单位。盘块的大小通常为 1~8 KB。
2.目录管理
为了使用户能方便地在外存上找到自己所需的文件,通常由系统为每个文件建立一个 目录项。目录项包括文件名、文件属性、文件在磁盘上的物理位置等。由若干个目录项又 可构成一个目录文件。目录管理的主要任务是为每个文件建立其目录项,并对众多的目录 项加以有效的组织,以实现方便的按名存取,即用户只须提供文件名便可对该文件进行存 取。其次,目录管理还应能实现文件共享,这样,只须在外存上保留一份该共享文件的副 本。此外,还应能提供快速的目录查询手段,以提高对文件的检索速度。 3.文件的读/写管理和保护
(1) 文件的读/写管理。该功能是根据用户的请求,从外存中读取数据,或将数据写入 外存。在进行文件读(写)时,系统先根据用户给出的文件名去检索文件目录,从中获得文件 在外存中的位置。然后,利用文件读(写)指针,对文件进行读(写)。一旦读(写)完成,便修 改读(写)指针,为下一次读(写)做好准备。由于读和写操作不会同时进行,故可合用一个 读/写指针。
(2) 文件保护。为了防止系统中的文件被非法窃取和破坏,在文件系统中必须提供有效 的存取控制功能,以实现下述目标:
① 防止未经核准的用户存取文件;
② 防止冒名顶替存取文件;
③ 防止以不正确的方式使用文件。
六、操作系统与用户之间的接口
为了方便用户使用操作系统,OS 又向用户提供了“用户与操作系统的接口”。该接口 通常可分为两大类:
(1) 用户接口。它是提供给用户使用的接口,用户可通过该接口取得操作系统的服务;
(2) 程序接口。它是提供给程序员在编程时使用的接口,是用户程序取得操作系统服务的惟一途径。
1.用户接口
为了便于用户直接或间接地控制自己的作业,操作系统向用户提供了命令接口。用户 可通过该接口向作业发出命令以控制作业的运行。该接口又进一步分为联机用户接口和脱 机用户接口。
(1) 联机用户接口。这是为联机用户提供的,它由一组键盘操作命令及命令解释程序所 组成。当用户在终端或控制台上每键入一条命令后,系统便立即转入命令解释程序,对该 命令加以解释并执行该命令。在完成指定功能后,控制又返回到终端或控制台上,等待用 户键入下一条命令。这样,用户可通过先后键入不同命令的方式,来实现对作业的控制, 直至作业完成。
(2) 脱机用户接口。该接口是为批处理作业的用户提供的,故也称为批处理用户接口。 该接口由一组作业控制语言(JCL)组成。批处理作业的用户不能直接与自己的作业交互作用, 只能委托系统代替用户对作业进行控制和干预。这里的作业控制语言(JCL)便是提供给批处 理作业用户的、为实现所需功能而委托系统代为控制的一种语言。用户用 JCL 把需要对作 业进行的控制和干预事先写在作业说明书上,然后将作业连同作业说明书一起提供给系统。 当系统调度到该作业运行时,又调用命令解释程序,对作业说明书上的命令逐条地解释执 行。如果作业在执行过程中出现异常现象,系统也将根据作业说明书上的指示进行干预。 这样,作业一直在作业说明书的控制下运行,直至遇到作业结束语句时,系统才停止该作 业的运行。
(3) 图形用户接口。用户虽然可以通过联机用户接口来取得 OS 的服务,但这时要求用 户能熟记各种命令的名字和格式,并严格按照规定的格式输入命令。这既不方便又花时间, 于是,另一种形式的联机用户接口——图形用户接口便应运而生。图形用户接口采用了图 形化的操作界面,用非常容易识别的各种图标(Icon)来将系统的各项功能、各种应用程序和 文件,直观、逼真地表示出来。用户可用鼠标或通过菜单和对话框来完成对应用程序和文 件的操作。此时用户已完全不必像使用命令接口那样去记住命令名及格式,从而把用户从 繁琐且单调的操作中解脱出来。 图形用户接口可以方便地将文字、图形和图像集成在一个文件中。可以在文字型文件 中加入一幅或多幅彩色图画,也可以在图画中写入必要的文字,而且还可进一步将图画、 文字和声音集成在一起。20 世纪 90 年代以后推出的主流 OS 都提供了图形用户接口。
2.程序接口
该接口是为用户程序在执行中访问系统资源而设置的,是用户程序取得操作系统服务 的惟一途径。它是由一组系统调用组成,每一个系统调用都是一个能完成特定功能的子程 序,每当应用程序要求 OS 提供某种服务(功能)时,便调用具有相应功能的系统调用。早期 的系统调用都是用汇编语言提供的,只有在用汇编语言书写的程序中才能直接使用系统调 用;但在高级语言以及 C 语言中,往往提供了与各系统调用一一对应的库函数,这样,应 用程序便可通过调用对应的库函数来使用系统调用。但在近几年所推出的操作系统中,如 UNIX、OS/2 版本中,其系统调用本身已经采用 C 语言编写,并以函数形式提供,故在用 C 语言编制的程序中,可直接使用系统调用。