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