自学内容网 自学内容网

计算机操作系统-第一章 操作系统引论-下

计算机操作系统-第一章 操作系统引论-上

1.5 操作系统的主要功能

  • 引入OS的主要目的是:为多道程序的运行提供良好的运行环境,以保证多道程序能有条不紊地、高效地运行,并能最大限度地提高系统中各种资源的利用率方便用户的使用
  • 传统OS中应具有处理机管理、存储器管理、设备管理和文件管理等基本功能。此外,为了方便用户使用OS,还须向用户提供方便的用户接口

1.5.1 处理机管理功能

在传统的多道程序系统中,处理机的分配和运行都以进程为基本单位,因而对处理机的管理可归结为对进程的管理。

  1. 进程控制
    在多道程序环境下,为使作业能并发执行,必须为每道作业创建一个或几个进程,并为之分配必要的资源。当进程运行结束时,应立即撤销该进程,以便能及时回收该进程所占用的各类资源,供其他进程使用。在设置有线程的OS中,进程控制还应包括为一个进程创建若干个线程,以提高系统的并发性。因此,进程控制的主要功能是:为作业创建进程撤销(终止)已结束的进程,以及控制进程在运行过程中的状态转换
  2. 进程同步
    为使多个进程能有条不紊地运行,系统中必须设置相应的进程同步机制。该机制的主要任务是对多个进程(含线程)的运行进行协调。有两种协调方式:①进程互斥方式,这是指各进程在对临界资源进行访问时,应采用互斥方式;②进程同步方式,这是指在相互合作以完成共同任务的各进程间,由同步机构对它们的执行次序加以协调。最简单的用于实现进程互斥的机制是,为每个临界资源配置一把锁,当锁打开时,进程可以对该临界资源进行访问;而当锁关上时,禁止进程访问该临界资源。在实现进程同步时,最常用的机制是信号量机制。
  3. 进程通信
    当有一组相互合作的进程在完成一个共同的任务时,在它们之间往往需要交换信息。例如,有3个相互合作的进程,即输入进程、计算进程和打印进程;其中,输入进程负责将所输入的数据传送给计算进程;计算进程利用输入的数据进行计算,并把计算结果传送给打印进程;最后由打印进程把计算结果打印出来。进程通信的任务是实现相互合作进程之间的信息交换。
    当相互合作的进程处于同一计算机系统时,在它们之间通常会采用直接通信方式,即由源进程利用发送命令,直接将消息(message)挂到目标进程的消息队列上,以后由目标进程利用接收命令从其消息队列中取出消息。
  4. 调度
    在传统OS中,调度包括作业调度和进程调度两步。①作业调度:作业调度的基本任务是按照一定的算法,从后备队列中选出若干个作业,并为它们分配运行所需的资源;在将这些作业调入内存后,分别为它们建立进程,以使它们都成为可能会获得处理机的就绪进程,并将这些进程插入就绪队列。②进程调度:进程调度的任务是按照一定的算法,从进程的就绪队列中选出一个进程,将处理机分配给它,并为它设置运行线程,使其投入执行。

1.5.2 存储器管理功能

存储器管理的主要任务是,为多道程序的运行提供良好的环境、提高存储器的利用率、方便用户使用,并能从逻辑上扩大内存。

  1. 内存分配和回收
    • 内存分配的主要任务是:①为每道程序分配内存空间,使它们“各得其所”;②提高存储器的利用率,尽量减少不可用的内存空间(内部碎片);③允许正在运行的程序申请附加的内存空间,以适应程序和数据动态增长的需要。
    • OS在实现内存分配时,可采取静态和动态两种分配方式。①静态分配方式:每个作业的内存空间是在作业装入时确定的,在作业装入后的整个运行期间,不允许该作业再申请新的内存空间,也不允许该作业在内存中“移动”。②动态分配方式:每个作业所要求的基本内存空间虽然也是在装入时确定的,但允许作业在运行过程中继续申请新的附加内存空间,以适应程序和数据的动态增长,也允许作业在内存中“移动”。
    • 内存属于有限资源。随着系统的运行,内存会被逐渐消耗。因此,当程序执行完毕后,需要将其所占用的内存及时回收再分配,以提高系统内存资源的利用率。内存回收的任务就是回收程序所占用的内存,并根据当前的内存管理算法将回收的内存经过处理放入对应的管理数据结构中,供下次分配时使用。
  2. 内存保护
    • 内存保护的主要任务是:①确保每道用户程序都仅在自己的内存空间中运行,彼此互不干扰;②绝不允许用户程序访问OS的程序和数据,也不允许其转移到非共享的其他用户程序中去执行。
    • 为了确保每道程序都只在自己的内存空间中运行,必须设置内存保护机制。一种比较简单的内存保护机制是:设置两个界限寄存器,分别用于存放正在执行程序的上界和下界。在程序运行时,系统须对每条指令所要访问的地址进行检查,如果发生越界,则发出越界中断请求,以停止该程序的执行。
  3. 地址映射
    • 在多道程序环境下,由于每道程序经编译和链接后所形成的可装入程序,其地址都是从0开始的,而又不可能将它们从内存的“0”地址(物理)开始装入,因此(各程序段的)地址空间内的逻辑地址与其在内存空间中的物理地址并不一致。为保证程序能正确运行,存储器管理必须提供地址映射功能,即能够将地址空间中的逻辑地址变换为内存空间中与之对应的物理地址。该功能应在硬件的支持下实现。
  4. 内存扩充
    • 内存扩充并非是指从物理上去扩大内存容量,而是借助虚拟存储技术,从逻辑上去扩大内存容量,使用户感觉到的内存容量比实际内存容量大得多,以便让更多的用户程序能并发运行。这样既满足了用户的需要,又改善了系统的性能。
    • 为了能在逻辑上扩大内存,系统必须设置内存扩充机制(包含少量的硬件),用于实现下述功能。①请求调入功能:系统允许在仅装入部分用户程序和数据的情况下,便能启动该程序运行;在程序运行过程中,若发现继续运行所需的程序和数据尚未装入内存,则可向OS发出请求,由OS从磁盘中将所需部分调入内存,以使程序能够继续运行。②置换功能:若发现在内存中已无足够的空间来装入需要调入的程序和数据时,则系统应能将内存中的一部分暂时不用的程序和数据调至盘上,以腾出内存空间,然后再将所须调入的部分装入内存。

1.5.3 设备管理功能

设备管理的主要任务是:①完成用户进程提出的I/O请求,为用户进程分配所需的I/O设备,并完成指定的I/O操作;②提高CPU和I/O设备的利用率,提高I/O速度,方便用户使用I/O设备。为完成上述任务,设备管理应实现缓冲管理、设备分配和设备处理等功能。

  1. 缓冲管理
    如果在I/O设备和CPU之间引入缓冲,则可有效地缓和CPU与I/O设备速度不匹配的矛盾,提高CPU的利用率,进而提高系统吞吐量。因此在现代OS中,无一例外地在内存中设置了缓冲区,而且还可通过增加缓冲区容量的方法来改善系统的性能。不同的系统可采用不同的缓冲区机制。最常见的缓冲区机制有:①单缓冲区机制;②能实现双向同时传送数据的双缓冲区机制;③能供多个设备同时使用的公用缓冲池机制。上述这些缓冲区机制所对应的缓冲区都会由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.5.4 文件管理功能

  1. 文件存储空间管理
    在多用户环境下,由用户自己对文件的存储进行管理,这不仅非常困难,而且十分低效。因而需要由文件系统对诸多文件及文件的存储空间实施统一的管理。其主要任务是:为每个文件分配必要的外存空间、提高外存的利用率,这也有助于提高文件系统的存取速度。为此,系统中应设置相应的数据结构,用于记录文件存储空间的使用情况,以供分配存储空间时参考;系统还应具有对存储空间进行分配和回收的功能。
  2. 目录管理
    目录管理的主要任务是为每个文件建立一个目录项,目录项包括文件名、文件属性、文件在磁盘上的物理位置等,并对众多的目录项加以有效的组织,以实现方便的按名存取(用户只须提供文件名,即可对该文件进行存取)。目录管理还应能实现文件共享,且在实现时,只须在外存上保留一份该共享文件的副本即可。此外,目录管理还应能提供快速的目录查询手段,以提高对文件的检索速度。
  3. 文件的读 / 写管理和保护
    (1)文件的读/写管理。该功能是根据用户的请求从外存中读取数据,或将数据写入外存。在进行文件读(写)时,系统先根据用户给出的文件名去检索文件目录,从中获得文件在外存中的位置;然后,利用文件读(写)指针对文件进行读(写)操作,一旦读(写)完成,便修改读(写)指针,为下一次读(写)做好准备。读操作和写操作由于不会同时进行,故可合用一个读/写指针。
    (2)文件保护。为了防止系统中的文件被非法窃取和破坏,在文件系统中必须提供有效的存取控制功能,以实现下述目标:①防止未经核准的用户存取文件;②防止冒名顶替存取文件;③防止以不正确的方式使用文件。

1.5.5 接口管理功能

为了方便用户对OS的使用,OS向用户提供了“用户与OS之间的接口”。该接口通常可分为以下两类。

  1. 用户接口
    为了便于用户直接或间接地控制自己的作业,OS向用户提供了用户接口。用户可通过该接口向作业发出命令以控制作业的运行。该接口又可进一步分为以下3种
    • (1)联机用户接口。该接口通常也被称为命令行方式(command-line interface,CLI),是为联机用户提供的,它由一组键盘操作命令命令解释程序组成。当用户在终端或控制台上键入一条命令后,系统便会立即转入命令解释程序,对该命令加以解释并执行。在完成指定操作后,“控制”又会返回到终端或控制台上,等待用户键入下一条命令。这样,用户就可以通过先后键入不同命令的方式来实现对作业的控制,直至作业完成。
    • (2)脱机用户接口。该接口即批命令方式,是为批处理作业的用户提供的。用户使用作业控制语言(job control language,JCL) 把需要对作业进行的控制和干预的命令,事先写在作业说明书上,然后将它与作业连在一起提供给系统。当系统调度到该作业运行时,是通过调用命令解释程序去对作业说明书上的命令逐条进行解释执行的,直至遇到作业结束语句时,系统才会停止该作业的运行。
    • (3)图形用户接口(graphics user interface,GUI)。通过联机用户接口来取得OS的服务,既不方便、又花时间,用户须熟记所有命令及其格式和参数,并须逐个字符地键入命令,在此背景下,图形用户接口应运而生。图形用户接口采用了图形化的操作界面,采用非常容易识别的各种图标来将系统的各项功能、各种应用程序和文件直观、逼真地表示出来。用户可以通过菜单(和对话框),用移动鼠标选择菜单项的方式取代命令的键入,这样可以方便、快捷地完成对应用程序和文件的操作,从而把用户从烦琐且单调的操作中解脱出来。
  2. 程序接口
    该接口是为用户程序在执行中访问系统资源而设置的,是用户程序取得OS服务的唯一途径。它是由一组系统调用组成的,每个系统调用都是一个能完成特定功能的子程序。每当应用程序要求OS提供某种服务(功能)时,便调用具有相应功能的系统调用。早期的系统调用都是用汇编语言编写的,只有在用汇编语言编写的程序中,才能直接使用系统调用。但在高级语言以及C语言中,往往提供了与各系统调用一一对应的库函数,这样,应用程序便可通过调用对应的库函数来使用系统调用。但在近几年所推出的OS(如OS/2等)中,系统调用本身已经采用C语言编写,并以函数形式提供,故在用C语言编写的程序中可直接使用系统调用。

1.5.6 现代操作系统的新功能

现代OS是在传统OS的基础上发展起来的,它除了具有传统OS的功能外,还增加了保障系统安全、支持用户通过联网获取服务和可处理多媒体信息等功能。

  1. 保障系统安全
    通常,政府机关和企事业单位有大量重要的信息,它们必须被高度集中地存储在计算机系统中。因此,如何确保在计算机系统中存储和传输数据的保密性、完整性和系统安全性,便成了计算机系统亟待解决的重要问题;而保障系统安全的任务,也责无旁贷地落到了现代OS的身上。
    虽然在传统OS中也采取了一些保障系统安全的措施,但随着计算机技术的进步和网络的普及,传统的安全措施已远不能满足要求。为此,在现代OS中采取了多种有效措施来确保系统的安全。这里仅介绍保障系统安全的几个技术问题。①认证技术,是一个用来确认被认证的对象是否名副其实的过程,即用来确定对象的真实性,以防止入侵者进行假冒与篡改等。例如,身份认证,即通过验证被认证对象的一个或多个参数的真实性和有效性来确定被认证对象是否名副其实的。因此,在被认证对象与要验证的那些参数之间,应存在严格的对应关系。②密码技术,对系统中所须存储和传输的数据进行加密,使之成为密文;这样,攻击者即使截获了数据,也无法了解数据的内容。只有指定的用户才能对该数据加以解密,进而了解其内容。因此,该技术有效地保护了系统中信息资源的安全性。近年来,国内外广泛应用数据加密技术,以保障计算机系统的安全性。③访问控制技术,可通过两种途径来保障系统中资源的安全:一是通过对用户存取权限的设置,可以限定用户只能访问被允许访问的资源,这样也就限定了用户对系统资源的访问范围;二是通过对文件属性的设置,可以保障指定文件的安全性,例如,设置文件属性为“只读”后,该文件就只能被读而不能被修改。
    反病毒技术,对于病毒(特指计算机病毒)的威胁,最好的解决方法是预防,即不让病毒侵入系统,但要完全做到这一点是十分困难的,因此还需要非常有效的反病毒软件来检测病毒。在反病毒软件被安装到计算机上后,其便可对硬盘上所有的可执行文件进行扫描,以检查硬盘上的所有可执行文件,若发现有病毒,则立即将其清除。
  2. 支持用户通过联网获取服务
    在现代OS中,为支持用户联网以取得网络所提供的各类服务,如电子邮件服务、Web服务等,应在OS中增加面向网络的功能,用于实现网络通信和资源管理,以及提供用户取得网络服务的手段。作为一个网络OS,其应当具备多方面的功能,包括:①网络通信,用于在源主机和目标主机之间实现无差错的数据传输,如通信链路建立与拆除、传输控制、差错控制和流量控制等;②资源管理,对网络中的共享资源(硬件和软件)实施有效的管理,以协调各用户对共享资源的使用,保证数据的安全性和一致性,典型的共享硬件资源有硬盘、打印机等,共享软件资源有文件、数据等;③应用互操作,在一个由若干个不同网络互联所构成的互联网络中,必须提供应用互操作功能,以实现信息的互通性和信息的互用性。信息的互通性,是指在处于不同网络中的用户之间能实现信息的互通。信息的互用性,是指用户可以访问不同网络中的文件系统和数据库系统中的信息。
  3. 可处理多媒体信息
    一个支持多媒体的OS,必须能像一般OS处理文字、图形信息那样去处理音频和视频信息等多媒体信息。为此,OS还增加了处理多媒体信息的功能:①接纳控制功能,在多媒体系统中,为了保证同时运行多个实时进程的截止时间,需要对系统中运行的SRT任务数目、驻留在内存中的SRT任务数目加以限制,为此设置了相应的接纳控制功能,如媒体服务器的接纳控制、存储器接纳控制和进程接纳控制等;②实时调度,多媒体系统中的SRT任务往往都是一些要求较严格的、周期性的SRT任务,例如为了保证动态图像的连续性,图像的更新周期必须在40ms之内,因此在进行SRT任务调度时,不仅需要考虑进程调度的策略,还需要考虑进程调度的接纳度等,相比传统OS要复杂得多;③存储多媒体文件,为了实现该功能,对OS所提出的最重要的要求是,能把硬盘上的数据快速地传送到输出设备上,因此,对传统文件系统中数据的离散存放方式和磁盘寻道方式都要加以改进。

1.6 操作系统的结构

1.6.1 简单结构

早期OS是为数众多的一组过程的集合,每个过程均可任意地调用其他过程,这致使OS内部既复杂、又混乱。因此,这种OS是无结构的,也有人把它称为整体系统结构或简单结构。
简单结构OS的一个典型例子是MS-DOS系统

1.6.2 模块化结构

  1. 模块化程序设计技术的基本概念
    OS按其功能精细地划分为若干个具有一定独立性和大小的模块。每个模块具有某方面的管理功能,如进程管理、存储器管理、文件管理等,并仔细地规定好各模块间的接口,使各模块之间能通过该接口实现交互。然后进一步将各模块细分为若干个具有一定功能的子模块,如把进程管理模块分为进程控制、进程调度等子模块,各子模块之间的接口同样也要规定好。若子模块较大,则可将其再进一步细分。我们把这种设计方法称为模块-接口法,由此构成的OS就是具有模块化结构的OS
    在这里插入图片描述
  2. 模块独立性
    在采用模块-接口法设计OS结构时,关键问题是模块的划分和规定好模块之间的接口。如果在划分模块时将模块划分得太小,则虽然可以降低模块本身的复杂性,但也会导致模块之间的联系过多,进而导致系统比较混乱;如果将模块划分得过大,则又会增加模块内部的复杂性。因此在划分模块时,应在“两者”之间进行权衡。
    另外,在划分模块时,必须充分注意模块的独立性问题,因为模块独立性越高,各模块间的交互就越少,系统的结构也就越清晰。衡量模块的独立性有以下两个标准:①内聚性,指模块内部各部分间联系的紧密程度,内聚性越高,模块独立性越强;②耦合度,指模块间相互联系和相互影响的程度,显然,耦合度越低,模块独立性越强。
  3. 模块 - 接口法的优缺点
    利用模块-接口法开发的OS,较无结构OS具有以下显著优点:①提高了OS设计的正确性、可理解性和易维护性;②增强了OS的可适应性(支持动态加载新的内核模块(如:安装设备驱动程序、安装新的文件系统模块到内核),增强OS适应性);③加速了OS的开发过程(模块间逻辑清晰易于维护,确定模块间接口后即可多模块同时升发)。(任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高)
    模块化结构设计仍存在下述问题:①在设计OS时,对各模块间接口的规定,很难满足划分完成后模块对接口的实际需求;②在OS设计阶段,设计者必须做出一系列的决定(决策),每个决定必须建立在上一个决定的基础上,但在模块化结构设计中,各模块的设计齐头并进,无法寻找一个可靠的决定顺序,进而造成了各种决定的“无序性”,这将使程序员很难做到“设计中的每一步决定”都是建立在可靠的基础上的,因此模块-接口法又被称为 “无序模块法”
    目前,设计OS的常用方法是采用可加载的内核模块(loadable kernel module)。这里,内核有一组核心组件,无论在启动时还是在运行时,内核都可以通过模块链入额外服务。这种类型的设计常见于现代UNIX系统(如Solaris、Linux或Mac OS X等)以及Windows系统的实现过程中。这种设计的思想是:内核提供核心服务,而其他服务可在内核运行时动态实现。动态链接服务优于直接添加新功能到内核,这是因为对于每次更改,后者都需要重新编译内核。

1.6.3 分层式结构

  1. 分层式结构的基本概念
    为了将模块-接口法中“决定顺序”的无序性变为有序性,引入了有序分层法。有序分层法的设计任务是,在目标系统An和裸机系统(又称宿主系统)A0之间,铺设若干个层次的软件A1, A2, …, An-1,使An通过An-1, An-2, …, A2,A1层软件,最终能在A0上运行。在OS中,常采用自底向上分层设计法来铺设这些中间层软件。
    自底向上分层设计法的基本原则是:每一步设计都是建立在可靠的基础上的。为此规定,每一层仅能使用其低层所提供的功能和服务,这样可使系统的调试和验证都变得更容易。一层一层地自底向上增添软件层,每层都实现若干功能,最后总能构成一个可以满足用户需要的OS。在用这种方法构成OS时,已将一个OS分为若干个层次,每层又由若干个模块组成,各层之间只存在单向的依赖关系,即高层仅依赖于紧邻它的低层。
  2. 分层式结构的优缺点
    分层式结构的主要优点有:①易保证系统的正确性,自下而上的设计方式,使所有设计中的决定都是有序的,或者说是建立在较为可靠基础上的,这样比较容易保证整个系统的正确性;②可保证系统的易维护性和可扩充性,若想在系统中增加、修改或替换一个层次中的模块或整个层次,则只要不改变相应层次间的接口,就不会影响其他层次,这必将使系统维护和扩充变得更加容易。
    分层式结构的主要缺点是系统效率较低。由于分层式结构是分层单向依赖的,必须在各层之间都建立层间的通信机制,OS每执行一个功能,通常要自上而下地穿越多个层次,这无疑会增加系统的通信开销,从而导致系统效率降低。、难以合理定义各层的边界(功能会相互调用)

1.6.4 微内核结构

OS的微内核(microkernel)结构,是20世纪80年代后期发展起来的。由于它能有效地支持多处理机运行,故非常适用于分布式系统环境。当前比较流行的、能支持多处理机运行的OS,几乎全部都采用了微内核结构,例如卡内基梅隆大学研制的Mach OS,便属于微内核结构的OS;再如Windows 2000/XP系统,也采用了微内核结构。
内核是操作系统最基本、最核心的部分。
实现操作系统内核功能的那些程序就是内核程序。

  1. 微内核 OS 的基本概念
    为了提高OS的“正确性”“灵活性”“易维护性”和”可扩充性”,在进行现代OS结构设计时,即使在单处理机环境下,也大都会采用基于客户/服务器模式的微内核结构,将OS划分为两大部分:微内核和多个服务器。至于什么是微内核结构,现在尚无公认的定义,但可以从以下4个方面对微内核结构的OS进行描述。

    • (1)足够小的内核
      在微内核结构的OS中,内核是指精心设计的、能实现现代OS最基本核心功能的小型内核,微内核并不是一个完整的OS,而只是OS中最基本的部分,它通常包含:①用于处理与硬件紧密相关的部分;②一些最基本的功能;③客户和服务器之间的通信。它们只是为构建通用OS提供了一个重要基础。这样就可以确保把OS内核做得很小。
    • (2)基于客户/服务器模式
      由于客户/服务器模式具有非常多的优点,故在单处理机微内核结构的OS中几乎无一例外地都采用了客户/服务器模式,将OS中最基本的部分放入内核中,而把OS的绝大部分功能都放在微内核外面的一组服务器(进程)中实现,例如,用于提供进程(线程)管理功能的进程(线程)服务器、提供虚拟存储器管理功能的虚拟存储器服务器、提供I/O设备管理功能的I/O设备服务器等,都是被作为进程来实现的,它们运行在用户态。客户与服务器之间是借助微内核提供的消息传递机制来实现信息交互的。图1-10所示为单处理机环境下的客户/服务器模式。
      在这里插入图片描述
    • (3)采用策略与机制分离原则
      • 在现代OS的结构设计中,经常会采用策略与机制分离原则来构造OS结构。
      • 所谓机制,是指实现某一功能的具体执行机构;而策略,则是指在机制的基础上,借助于某些参数和算法来实现该功能的优化或达到不同的功能目标。
      • 通常,机制处于系统的基层,而策略则处于系统的高层。在传统OS中,将机制放在OS内核的较低层,将策略放在OS内核的较高层。而在微内核OS中,通常将机制放在OS的微内核中。正因为如此,才有可能将内核做得很小。
    • (4)采用面向对象技术
      OS是一个极其复杂的大型软件系统,我们不仅可以通过结构设计来降低OS的复杂度,还可以基于面向对象技术中的“抽象”和“隐蔽”原则控制系统的复杂性,再进一步利用“对象”“封装”“继承”等概念来确保OS的“正确性”“可靠性”“易修改性”“易扩展性”等,并提高OS的设计速度。正因面向对象技术能带来如此多的好处,所以面向对象技术被广泛应用于现代OS的设计中。
  2. 微内核的基本功能
    微内核应具有哪些功能,或者说哪些功能应放在微内核中,哪些功能应放在微内核外,目前尚无明确的规定。现在通常采用策略与机制分离原则,将机制部分以及与硬件紧密相关的部分放入微内核中。由此可知,微内核通常具有以下几个方面的功能。

    • (1)进程(线程)管理
      大多数的微内核OS,对于进程管理功能的实现,都采用策略与机制分离原则。例如,为实现进程(线程)调度功能,须在进程管理中设置一个或多个进程(线程)优先级队列,以将指定优先级进程(线程)从所在队列中取出,并将其投入执行。由于这一部分属于调度功能的机制部分,故应将它放入微内核中。如何确定各类用户(进程)的优先级,又应如何确定每类用户中各用户的优先级等问题,都属于策略问题,可将它们放入微内核外的进程(线程)管理服务器中,以完成上述“确定”任务。
      由于进程(线程)之间的通信功能是微内核OS最基本的功能,会被频繁使用,因此几乎所有的微内核OS都将进程(线程)之间的通信功能放入微内核中。此外,还将进程的切换、线程的调度以及多处理机之间的同步等功能也放入微内核中。
    • (2)低级存储器管理
      通常在微内核中,只配置最基本的低级存储器管理机制,例如,用于实现将用户空间的逻辑地址变换为内存空间的物理地址的页表机制和地址变换机制,这一部分是依赖于机器的,因此放入微内核中。而实现虚拟存储器管理的策略,包含应采用何种页面置换算法、采用何种内存分配与回收策略等,则应放在微内核外的存储器管理服务器中。
    • (3)中断和陷入处理
      大多数微内核OS都将与硬件紧密相关的一小部分放入微内核中进行处理,此时微内核的主要功能是捕获所发生的中断和陷入事件,并进行相应的前期处理,如进行中断现场保护、识别中断或陷入事件的类型等,然后将有关事件的信息转换成消息,并把它发送给相关的服务器;由服务器根据中断或陷入事件的类型,调用相应的处理程序来进行后期处理。

    在微内核OS中,将进程管理、存储器管理、I/O管理等功能一分为二,并将其中属于机制的、很小的一部分放入微内核中,另外的绝大部分放在微内核外的各种服务器中。事实上,微内核外的大多数服务器都要比微内核大。这进一步说明了为什么能在采用客户/服务器模式后,还能把微内核做得很小的原因。
    在这里插入图片描述
    在这里插入图片描述

  3. 微内核 OS 的优点
    由于微内核结构是建立在模块化、层次化结构的基础上的,并采用了客户/服务器模式面向对象的程序设计技术,因此,微内核结构的OS是集各种技术优点之大成。现将其优点细述如下。

    • (1)提高了系统可扩展性
      由于微内核OS的许多功能是由相对独立的服务器软件来实现的,当开发了新的硬件和软件时,微内核OS只须在相应的服务器中增加新的功能,或再增加一个专门的服务器即可。与此同时,微内核结构也必然会改善系统的灵活性,因为不仅可在OS中增加新的功能,还可修改原有功能,以及删除已过时的老功能,进而形成一个更为精干的、有效的OS。
    • (2)增强了系统的可靠性
      一方面,微内核是经过精心设计和严格测试的,这容易保证其正确性;另一方面,微内核提供了规范而精简的应用程序接口(application programming interface,API),这为在微内核外部编写高质量的程序创造了条件。此外,由于所有服务器都运行在用户态,服务器与服务器之间采用的是消息传递通信机制,因此,某个服务器出现错误不会影响微内核,也不会影响其他服务器。
    • (3)增强了系统的可移植性
      随着硬件的快速发展,出现了各种各样的硬件平台,作为一个好的OS,必须具备可移植性,以使自身能够较容易地运行在不同的计算机硬件平台上。在微内核结构的OS中,所有与特定CPU和I/O设备有关的代码,均放在微内核和微内核下面的硬件隐藏层中,而OS的其他绝大部分组件(各种服务器)均与硬件平台无关,因而,把OS从一个计算机硬件平台移植到另一个计算机硬件平台上所须做的修改是比较小的。
    • (4)提供了对分布式系统的支持
      在微内核OS中,由于客户和服务器之间、服务器和服务器之间的通信,均采用消息传递通信机制实现,微内核OS能很好地支持分布式系统和网络系统。事实上,只要在分布式系统中赋予所有进程和服务器唯一的标识符,在微内核中再配置一张系统映射表(即进程和服务器的标识符与它们所驻留的机器之间的对应表),在进行客户与服务器通信时,只须在所发送的消息中标上发送进程和接收进程的标识符,微内核便可利用系统映射表将消息发往“目标”,而无论“目标”驻留在哪台机器上。
    • (5)融入了面向对象技术
      在设计微内核OS时,采用了面向对象技术,其中的“封装”“继承”“对象类”和“多态性”,以及在对象之间采用消息传递机制等,都十分有利于提高系统的“正确性”“可靠性”“易修改性”“易扩展性”等,而且还能显著减少开发系统的开销。
  4. 微内核 OS 存在的问题

    • 应当指出,在微内核OS中,由于采用了非常小的内核,客户/服务器模式消息传递机制,虽给微内核OS带来了许多优点,但也使微内核OS存在着缺点,其中最主要的缺点是相比于早期的OS,微内核OS的运行效率有所降低
      • 效率降低最主要的原因是,在完成一次客户对OS提出的服务请求时,需要利用消息实现多次交互,以及进行用户/内核模式和上下文的多次切换。然而,在早期的OS中,用户进程在请求取得OS服务时,一般只须进行两次上下文的切换:一次是在执行系统调用后,由用户态转向内核态时;另一次是在系统完成用户请求的服务后,由内核态返回用户态时。
      • 在微内核OS中,客户和服务器、服务器和服务器之间的通信都须通过微内核,这使得同样的服务请求至少需要进行4次上下文切换。第1次发生在客户发送请求消息给微内核,以请求取得某服务器特定的服务时;第2次发生在由微内核把客户的请求消息发往服务器时;第3次发生在服务器完成客户的请求后,把响应消息发送到微内核时;第4次发生在微内核将响应消息发送给客户时。
      • 实际情况往往还会引起更多的上下文切换。例如,当某个服务器自身尚无能力完成客户请求而需要其他服务器帮助时,如图1-11所示,其中的文件服务器需要磁盘设备服务器的帮助,这时就需要进行8次上下文的切换。
        在这里插入图片描述
        在这里插入图片描述
      • 为了改善运行效率,可以重新把OS的一些常用基本功能,由服务器移入微内核中。这样可使客户对OS常用基本功能的请求所引发的用户/内核模式和上下文的切换次数,由4次或8次降为2次。但这又会使微内核的容量明显增大,使其在小型接口定义和适应性方面的优势有所下降,同时会提高微内核的设计代价。
        在这里插入图片描述

1.6.5 外核结构

在传统OS中,只有内核可以管理硬件资源,应用程序通过内核提供的抽象接口间接地与硬件进行交互。随着计算机产业的逐步发展,应用程序的需求多样性开始增加,内核提供的接口因具有固定性而成为应用程序提升性能、增强灵活性和拓展功能的瓶颈。但是,应用程序的需求一直在发生变化,这使得OS为每个应用程序的每种需求都提供一个接口并不现实。因此,传统OS难以适应应用程序的个性化需求。
外核(exokernel)或外内核OS的基本思想是:内核不提供传统OS中的进程、虚拟存储器等抽象事物,而是专注于物理资源的隔离(保护)与复用。具体来说,在基于外核结构的OS中,一个非常小的内核负责保护系统资源,而硬件资源的管理职责则委托给应用程序。这样,OS就可以做到在保证资源安全的前提下,减少对应用程序的限制,充分满足应用程序对硬件资源的不同需求。图1-12所示为美国麻省理工学院实现的具有外核结构的Aegis系统,这个系统由一个轻量级内核和库OS组成。外核只提供比较低层的硬件操作,在外核接口上层工作的库OS则提供更高级别的映射。这里的库OS的实现思想是:基于应用程序的需求来定制OS内核,将原本属于OS内核的功能以库的形式提供给用户
内核负责进程调度、进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源(如:不用页表映射的连续物理空间),且由外核负责保证资源使用安全
在这里插入图片描述
在这里插入图片描述

1.7 系统调用

  • 程序接口是用户程序取得OS服务的唯一途径。程序接口由一组系统调用(system call)组成。系统调用不仅可供所有的应用程序使用,还可供OS自身使用。
  • “系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,
  • 在OS中提供系统调用的目的是,应用程序可以通过系统调用来请求获得操作系统内核的服务
    在这里插入图片描述
    两个进程并发运行,打印机设备交替地收到WPs和Wod两个进程发来的打印请求,结果两篇论文的内容混杂在一起了…
    解决方法:由操作系统内核对共享资源进行统一的管理,并向上提供“系统调用”,用户进程想要使用打印机这种共享资源,只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理。

1.7.1 系统调用的基本概念

  • 系统调用在本质上是应用程序请求OS内核完成某功能时的一种过程调用,是用户与内核的接口。

  • 但它是一种特殊的过程调用,它与一般的过程调用在下述几方面有着显著差别。

    • (1)运行在不同的系统状态。一般的过程调用,其调用程序和被调用程序运行在相同的状态——内核态或用户态;而系统调用与一般的过程调用的最大区别就在于,系统调用的调用程序运行在用户态,而被调用程序运行在内核态。
    • (2)状态的转换。由于一般的过程调用并不涉及系统状态的转换,因此可直接由调用过程转向被调用过程。但在运行系统调用时,由于调用过程和被调用过程工作处于不同的系统状态,因而不允许由调用过程直接转向被调用过程,需要通过软中断机制先由用户态转换为内核态,经内核分析后才能转向相应的系统调用处理子程序。
    • (3)返回问题。在采用了抢占式(剥夺)调度方式的系统中,在被调用过程执行完成后,要对系统中所有要求运行的进程做优先级分析。当调用进程仍具有最高优先级时,才返回到调用进程继续执行;否则,将重新调度,以便让优先级最高的进程优先执行。此时,将把调用进程放入就绪队列。
    • (4)嵌套调用。像一般的过程调用一样,系统调用也可以嵌套进行,即在一个被调用过程执行期间,还可以利用系统调用命令去调用另一个系统调用。当然,每个系统调用对嵌套调用的深度都有一定的限制,如最大深度为6。但一般的过程调用对嵌套调用的深度则没有限制。
  • 系统调用是通过中断机制实现的,并且一个OS的所有系统调用都通过同一个中断入口来实现。

  • 对于拥有保护机制的OS来说,中断机制本身也是受保护的。但只有授权给应用程序保护等级的中断号,才是可以被应用程序调用的。对于未被授权的中断号,如果应用程序对其进行调用,则会引发保护异常,进而导致自己被OS停止。
    在这里插入图片描述
    注意:1.陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使CPU进入核心态
    2.发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行
    注意别名:
    陷入指令=trap指令=访管指令

1.7.2 系统调用的类型

  1. 进程控制类系统调用
    创建和终止进程的系统调用。利用创建进程的系统调用为想要参加并发执行的程序创建一个进程,当进程执行结束后,再利用终止进程的系统调用来终止该进程。
    获得和设置进程属性的系统调用。进程的属性包括进程标识符、进程优先级、最大允许执行时间等。利用获得进程属性的系统调用可了解某进程的属性,利用设置进程属性的系统调用可确定和重新设置进程的属性。
    等待某事件出现的系统调用。进程在执行过程中,假设需要等待某事件(条件)出现后方可继续执行。此时,进程可利用等待某事件出现的系统调用来使自己处于等待状态,一旦等待的事件出现,便可将自己唤醒。
  2. 文件操纵类系统调用
    创建和删除文件的系统调用。利用创建文件的系统调用,请求系统创建一个新文件;利用删除文件的系统调用,将指定文件删除。
    打开和关闭文件的系统调用。用户在第一次访问某个文件之前,应先利用打开文件的系统调用将指定文件打开;在访问结束后,应利用关闭文件的系统调用将指定文件关闭。
    读和写文件的系统调用。用户可利用读文件的系统调用,从已打开的文件中读出给定数目的字符,并将它们送至指定的缓冲区中;也可利用写文件的系统调用,从指定的缓冲区中将给定数目的字符写入文件
    中。读和写文件的系统调用是文件操纵类中使用最频繁的系统调用。
  3. 进程通信类系统调用
    ①当采用信息传递方式时,在通信前须先打开一个连接。为此,应由源进程发出一条打开连接的系统调用,而目标进程则应利用接受连接的系统调用表示同意进行通信;然后,在源进程和目标进程之间便可开始通信。可以利用发送信息的系统调用和接收信息的系统调用来交换信息。通信结束后,还须利用关闭连接的系统调用来结束通信。
    ②当采用共享存储区方式时,在通信前须先利用建立共享存储区的系统调用来建立一个共享存储区,再利用建立连接的系统调用将该共享存储区连接到进程自身的虚地址空间上,然后便可利用读和写共享存储区的系统调用来实现相互通信。

除了上述的3大类系统调用外,常用的系统调用还包括设备管理类系统调用和信息维护类系统调用,前者主要用于实现申请设备、释放设备、设备I/O重定向、获得和设置设备属性等功能,后者主要用于获得包括有关系统和文件的时间信息、OS版本、当前用户以及有关空闲内存和磁盘空间大小等多方面的信息。
应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
在这里插入图片描述

操作系统引导

在这里插入图片描述

虚拟机

在这里插入图片描述
在这里插入图片描述

1.8 本章小结

  • 本章主要介绍了OS的目标、作用、发展过程、基本特征、运行环境、主要功能、结构以及系统调用等内容。
    • 一个完整的计算机系统由硬件和软件组成。硬件是软件得以建立和开展活动的基础,而软件则是对硬件功能的扩充。OS是裸机之上的第一层系统软件,它向下管理系统中各类资源,向上为用户和程序提供服务。
    • OS的发展过程很长,从OS开始替代操作人员到发展出现代多道程序系统,这一过程中依次发展出了多种类型的OS,具体而言,有早期的批处理系统、分时系统、实时系统,还有现代的微机OS、嵌入式OS、网络OS和分布式OS等。
    • OS具有并发、共享、虚拟和异步等特征,其运行需要硬件支持。为了保护系统不被破坏,处理机的运行模式可分为两种,即用户态和内核态,可能引起系统危险的特权指令只能运行在内核态中。OS是中断驱动的,因此中断和异常是计算机系统中的一个重要机制,它保证了OS的正常运行。
    • 传统OS具备的功能包括:进程管理、内存管理、设备管理、文件管理和接口管理。现代OS除了具备传统OS所具备的功能外,还具备保障系统安全、支持用户通过联网获取服务、可处理多媒体信息等功能。
    • OS是一个大型的系统软件,采用结构化的设计很重要。早期的OS基本无结构,现代流行的OS则多采用模块化结构、分层式结构、微内核结构等设计而成,最新的OS有的还是采用外核结构设计而成的。
    • 系统调用是OS内核与用户程序之间的接口,每个OS都提供了大量的系统调用给程序员使用。

原文地址:https://blog.csdn.net/rc4gyyc/article/details/140882585

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!