1. 操作系统

1.1. 操作系统的定义

操作系统(Operating System,OS)是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是现代计算机系统中最基本和最重要的系统软件,而其它的诸如编译程序、数据库管理系统等系统软件,以及大量的应用软件,都直接依赖于操作系统的支持,取得它所提供的服务。

在操作系统的研究中,可以通过不同的观点来更具体地解释操作系统:

观点 说明
用户观点 根据用户所使用的计算机的不同设计不同类型的操作系统,例如个人 PC、服务器和移动端等
系统观点 操作系统是计算机系统的资源管理程序,操作系统中有处理器、存储器、外设、程序和数据这 4 大类资源
进程观点 操作系统可以看做若干个可以独立运行的程序和一个对这些程序进行协调的核心组成
虚拟机观点 用户不是直接使用裸机进行工作,而是使用操作系统为用户提供的服务来对计算机进行控制和使用

1.2. 操作系统的作用

1.2.1. 用户与硬件之间的接口

OS 的第一个作用是作为用户与计算机硬件系统之间的接口,从层次上看 OS 处于用户与计算机硬件系统之间,用户在OS帮助下能够方便、快捷、可靠地操纵计算机硬件和运行自己的程序。用户可以通过命令方式、系统调用方式和图标一窗口方式来实现与 OS 的通信,由于应用程序也是基于 OS 运行的,因此用户使用软件也离不开 OS。
image.png

1.2.2. 资源的管理者

OS 第二个作用是作为计算机系统资源的管理者,因为在一个计算机系统中通常都含有多种硬件和软件资源。归纳起来可将这些资源分为四类:处理机、存储器、I/O设备以及文件(数据和程序),OS 的主要功能也正是对这四类资源进行有效的管理。

1.2.3. 对资源的抽象

一台完全无软件的计算机系统(即裸机)向用户提供的仅是硬件接口(物理接口),用户想要使用该系统就必须对物理接口的实现细节有充分的了解,这就致使该物理机器难于广泛使用。
image.png
为了方便用户使用 I/O设备,人们在裸机上覆盖上一层 I/O 设备管理软件,这样的软件隐藏了 I/O 设备的具体细节,向上提供了一组抽象的 I/O 设备。通常把覆盖了上述软件的机器称为扩充机器虚机器,它向用户提供了一个对硬件操作的抽象模型。
image.png

1.3. 操作系统的目标

  1. 方便性:用户采用高级语言书写的程序可以通过 OS 编译成机器代码,也可以使用 OS 所提供的各种命令操纵计算机系统;
  2. 有效性:OS 提高系统资源的利用率和吞吐量;
  3. 可扩充性:OS 能适应计算机硬件、体系结构以及计算机应用发展的要求;
  4. 开放性:系统能遵循世界标准规范,特别是遵循开放系统互连 OSI 国际标准。

    2. OS 的基本特征

    操作系统具有并发、共享、虚拟和异步四个基本特征。

    2.1. 并发

    并发执行这一特征使得 OS 能有效地提高系统中的资源利用率,增加系统的吞吐量。并行性是指两个或多个事件在同一时刻发生,而并发性是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理机,这些可以并发执行的程序便可被分配到多个处理机上,从而实现并行执行。
    实现并发的关键在于引入了进程,进程是指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。若对内存中的多个程序都分别建立一个进程,它们就可以并发执行。

    2.2. 共享

    OS 环境下的资源共享(资源复用)是指:系统中的资源可供内存中多个并发执行的进程共同使用,这里在宏观上既限定了时间(进程在内存期间),也限定了地点(内存)。因为系统中的资源远少于多道程序需求的总和,会形成它们对共享资源的争夺,系统必须对资源共享进行妥善管理。由于资源属性的不同,进程对资源复用的方式也不同,目前主要实现资源共享的方式有如下两种:
资源共享的方式 说明
互斥共享方式 某些资源(如打印机、磁带机)等,虽然可以提供给多个进程(线程)使用,但应规定在一段时间内只允许一个进程访问该资源
同时访问方式 例如磁盘等设备允许在一段时间内由多个进程“同时”对它们进行访问,在微观上这些进程对该资源的访问是交替进行的(单处理机)

并发和共享是多用户(多任务)OS 的两个最基本的特征,它们又是互为存在的条件。若系统不允许并发执行也就不存在资源共享问题,若系统不能对资源共享实施有效管理也必然会影响到诸进程间并发执行的程度。

2.3. 虚拟

在 OS 中把通过某种技术将一个物理实体变为若干个逻辑上的对应物的功能称为虚拟,这是通过时分复用和空分复用实现的。时分复用技术能实现虚拟处理机、虚拟设备等,使资源的利用率得以提高。这是因为它利用某设备为一用户服务的空闲时间,又转去为其他用户服务,使设备得到最充分的利用。主要包括:

虚拟技术 说明
虚拟处理机技术 通过分时复用的方法,能实现同时(宏观上)为多个用户服务
虚拟设备技术 通过分时复用的方法,将一台物理 I/O 设备虚拟为多台逻辑上的 I/O 设备

空分复用技术则是利用存储器的空闲空间分区域存放和运行其它的多道程序,以此来提高内存的利用率。单纯的空分复用存储器只能提高内存的利用率,并不能实现在逻辑上扩大存储器容量的功能,还必须引入虚拟存储技术才能达到此目的。

2.4. 异步

在单处理机环境下,一台处理机每次只允许一个进程执行,其余进程只能等待。由于资源等因素的限制,使进程的执行通常都不可能“一气呵成”,而是以“停停走走”的方式运行。只有系统具有并发性,才有可能导致异步性

3. OS 的管理功能

3.1. 处理机管理功能

在传统的多道程序系统中,处理机的分配和运行都是以进程为基本单位的,因而对处理机的管理可归结为对进程的管理。处理机管理的主要任务是对处理机的分配和运行进行管理,它的主要功能有:

功能 说明
进程控制 为作业创建进程、撤消(终止)已结束的进程,以及控制进程在运行过程中的状态转换
进程同步 为多个进程(含线程)的运行进行协调,常用的协调方式有进程互斥方式和进程同步方式
进程通信 实现相互合作进程之间的信息交换
调度 按照一定的算法分配处理机,包括作业调度和进程调度

3.2. 存储器管理功能

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

功能 说明
内存分配和回收 为每道程序分配内存空间,尽量减少不可用的内存空间(碎片),允许正在运行的程序申请附加的内存空间
内存保护 确保每道用户程序都仅在自己的内存空间内运行,绝不允许用户程序访问操作系统的程序和数据
地址映射 将地址空间中的逻辑地址转换为内存空间中与之对应的物理地址
内存扩充 借助于虚拟存储技术,从逻辑上扩充内存容量

实现内存分配主要有两种方式,它们分别是:

内存分配方式 说明
静态分配方式 在作业装入内存后的整个运行期间不允许该作业再申请新的内存空间,也不允许作业在内存中“移动”
动态分配方式 允许作业在运行过程中继续申请新的附加内存空间或移动

对于扩充内存来说,系统具体需要实现:

  1. 请求调入功能:若发现要继续运行时所需的程序和数据尚未装入内存,OS 可以从磁盘中将所需部分调入内存;
  2. 置换功能:若发现在内存中已无足够的空间来装入需要调入的程序和数据时,系统应能将内存中的一部分暂时不用的程序和数据调至硬盘上。

    3.3. 设备管理功能

    设备管理需要完成用户进程提出的 I/O 请求,为用户进程分配所需的 I/O 设备,同时要提高 CPU 和 I/O 设备的利用率。
功能 说明
缓冲管理 在 I/O 设备和 CPU 之间引入缓冲来缓和 CPU 和 I/O 设备速度不匹配的矛盾
设备分配 根据用户进程的 I/O 请求、系统现有资源情况以及按照某种设备分配策略来分配所需的设备
设备处理 又称设备驱动程序,用于 CPU 向设备控制器发出 I/O 命令完成指定的 I/O 操作

3.4. 文件管理

文件管理的主要任务是对用户文件和系统文件进行管理以方便用户使用,并保证文件的安全性。

功能 说明
文件存储空间的管理 为每个文件分配必要的外存空间,提高外存的利用率,进而提高文件系统的存、取速度
目录管理 为每个文件建立一个目录项,并对众多的目录项加以有效的组织,以实现方便的按名存取
文件的读/写管理 根据用户的请求从外存中读取数据,或将数据写入外存
文件保护 防止系统中的文件被非法窃取和破坏

其中文件保护需要实现以下 3 个目标:

  1. 防止未经核准的用户存取文件;
  2. 防止冒名顶替存取文件;
  3. 防止以不正确的方式使用文件。

    4. OS 与用户的接口

    为了方便用户对操作系统的使用,操作系统向用户提供了“用户与操作系统的接口”。

    4.1. 用户接口

    用户接口可以被用户直接调用,用户可通过用户接口向作业发出命令以控制作业的运行。该接口可以分为以下三种:
用户接口 说明
联机用户接口 也称交互式命令接口,当用户在终端或控制台上键入一条命令后,系统立即对该命令加以解释执行,在完成后返回到终端或控制台上
脱机用户接口 也称批处理用户接口,需要用户先把命令事先写在作业说明书上,系统调度到该作业运行时,对作业说明书上的命令逐条解释执行
图形用户接口 提供 GUI 让用户通过输入设备简易地完成操作

4.2. 程序接口

程序接口是为用户程序在执行中访问系统资源而设置的,允许用户通过程序间接调用,是用户程序取得操作系统服务的唯一途径。程序接口是由一组系统调用组成的,每一个系统调用都是一个能完成特定功能的子程序,也可以成系统调用为广义指令。系统中的各种共享资源都由操作系统统一管理,应用程序设计资源有关的操作都需要通过系统调用来请求服务,由操作系统代为执行可以保证安全性。
在高级语言例如 C 语言中,往往提供了与各系统调用一一对应的库函数,应用程序便可通过调用对应的库函数来使用系统调用。

5. OS 内核

操作系统内核往往具有以下这些功能:
内核是一个操作系统的核心,负责提供操作系统的最基本的功能,是操作系统工作的基础。内核就是将一些与硬件紧密相关的(如中断处理程序、设备驱动程序等)、基本的、公共的、运行频率较高的模块(如时钟管理、进程调度等)以及关键性数据结构独立开来,使之常驻内存并进行保护的部分。

5.1. 系统态和用户态

为了防止 OS 本身及关键数据(如 PCB 等)遭受到应用程序有意或无意的破坏,通常也将处理机的执行状态分为两种:

  1. 系统态:又称为管态或内核态,具有较高的特权,能执行一切指令,访问所有寄存器和存储区;
  2. 用户态:又称为目态,具有较低特权的执行状态,仅能执行规定的指令,访问指定的寄存器和存储区。

通常 OS 运行于系统态,而各种应用程序运行于用户态。

5.2. 内核的功能

内核会提供一些支撑功能和资源管理功能,资源管理功能包括进程管理、存储器管理、设备管理。支撑功能是提供给 OS 其它众多模块所需要的一些基本功能,以便支撑这些模块工作。包括:

内核的功能 说明
时钟管理 实现计时功能,提供标准的系统时间,支持进程切换等功能
中断处理 负责实现中断机制,保护和恢复中断现场信息,转移控制权给处理程序
原语 由若干条指令组成的,用于完成一定功能的一个过程,特点是原语的执行具有原子性

6. 微内核 OS

6.1. 单内核

单内核是个很大的进程,它将操作系统的主要功能模块全部包括进来,因此在运行的时候单内核是个单独的二进制大映象。其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息传递。由于不需要调用其他的程序,单内核在运行效率上具有一定的优势。
单内核代码需要包括大量的功能模块,这就导致单内核难以编写正确。因为所有的模块都在同一个内核空间上运行,因此一个很小的 bug 都会使整个系统崩溃。

6.2. 微内核

微内核(MicroKernel)操作系统结构是 20 世纪 80 年代后期发展起来的,由于它能有效地支持多处理机运行,故非常适用于分布式系统环境。和单内核的不同之处在于微内核操作系统中,微内核并非是一个完整的 OS,而只是将操作系统中最基本的部分放入微内核,通常包含有:

  1. 与硬件处理紧密相关的部分;
  2. 一些较基本的功能;
  3. 客户和服务器之间的通信。

微内核使用客户机-服务器模式工作,它将操作系统中最基本的部分放入内核,把其他的大部分功能放在内核外的一系列进程(服务器)中实现。当用户进程需要使用某些功能时,它将向内核发送请求,内核调用相应的进程(服务器)后向客户进程进行响应。
image.png

6.3. 微内核的基本功能

微内核是利用“机制与策略分离”的原理来构造的,机制是指实现某一功能的具体执行机构,策略则是在机制的基础上借助于某些参数和算法来实现该功能的优化。在传统的 OS 中将机制放在 OS 的内核的较低层,把策略放在内核的较高层次中。而在微内核操作系统中,通常将机制和与硬件相关的部分放在 OS 的微内核中。微内核通常具有如下几方面的功能:

  1. 进程(线程)管理:包括进程(线程)之间通信、进程的切换、线程的调度,以及多处理机之间的同步等基本功能;
  2. 低级存储器管理:通常在微内核中,只配置最基本的低级存储器管理机制,如用于实现将用户空间的逻
  3. 中断和陷入处理:发生中断意味着需要操作系统接入展开管理工作,微内核需要能够捕获中断和陷入并进行一定的处理。

对于用户进程如何分类和用户优先级、内存分配和内存回收以及具体的中断处理程序,这些都可以归纳为策略部分,可以把这些功能交给具体的进程(服务器)实现。

6.4. 微内核的优缺点

优点

由于微内核 OS 结构是建立在模块化、层次化结构的基础上的,并采用了客户/服务器模式和面向对象的程序设计技术,因此微内核结构的操作系统拥有很多优点。

  1. 提高了系统的可扩展性:微内核 OS 的许多功能是由相对独立的服务器软件来实现的,通过服务器软件来添加功能非常方便;
  2. 增强了系统的可靠性:微内核 OS 提供了规范而精简的 API,当某个服务器出现错误时不会影响内核和其他服务器;
  3. 可移植性强:微内核 OS 能较容易地运行在不同的计算机硬件平台上;
  4. 提供了对分布式系统的支持:微内核 OS 能很好地支持分布式系统和网络系统;
  5. 使用了面向对象技术。

    缺点

    单内核 OS 下用户进程在请求取得 OS 服务时一般只需进行两次上下文的切换。一次是在执行系统调用后由用户态转向系统态时,另一次是在系统完成用户请求的服务后由系统态返回用户态时。
    image.png
    在微内核 OS 中由于客户和服务器、服务器和服务器之间的通信都需通过微内核,致使同样的服务请求至少需要进行四次上下文切换,这就带来了效率问题。

    7. OS 的发展

    7.1. 人工操作方式

    早期的操作方式是由程序员将事先已穿孔的纸带(或卡片),装入纸带输入机(或卡片输入机),再启动它们将纸带(或卡片)上的程序和数据输入计算机,然后启动计算机运行。这种人工操作方式有以下两方面的缺点,首先当用户操作计算机时这个用户占有这台计算机的全部资源,第二是在用户操作纸带时 CPU 是不工作的。
    image.png

    7.2. 脱机输入/输出(Off-Line I/O)方式

    人工操作方式严重降低了计算机资源的利用率,带来了人机矛盾,直至后来引入了脱机输入/输出技术才有所改善。脱机输入/输出(Off-Line I/O)方式是事先将装有用户程序和数据的纸带装入纸带输入机,在一台外围机的控制下,把纸带(卡片)上的数据(程序)输入到磁带上。当 CPU 需要这些程序和数据时,再从磁带上高速地调入内存。
    image.png

    7.3. 单批处理系统

    单批处理系统需要先把一批作业以脱机方式输入到磁带上,并在系统中配上监督程序(Monitor),使这批作业能一个接一个地连续处理。
    image.png
    单道批处理系统最主要的缺点是,系统中的资源得不到充分的利用。这是因为在内存中仅有一道程序,每逢该程序在运行中发出 I/O 请求后,CPU 必须在其 I/O 完成后才继续运行。

    7.4. 多道批处理系统

    在该系统中用户所提交的作业先存放在外存上,并排成一个“后备队列”。然后由作业调度程序按一定的算法,从后备队列中选择若干个作业调入内存,使它们共享 CPU 和系统中的各种资源。
    image.png
    多道批处理系统的优点是资源利用率高,因为引入多道批处理能使多道程序交替运行,同时系统吞吐量大。但是由于作业要排队依次进行处理,因而平均周转时间长。同时多道批处理系统无交互能力,因为用户一旦把作业提交给系统后,用户都不能与作业进行交互。

    7.5. 分时系统

    多道批处理系统提高了资源利用率和系统吞吐量,但是用户对人一机交互的需求也需要满足,用户的需求具体表现在以下几个方面:

  6. 人一机交互:程序员能独占全机并对它进行直接控制,以便能方便地对程序进行调试;

  7. 共享主机:一台计算机要同时供很多用户共享使用,但共享是每人都希望能像独占时一样。

分时系统 是指在一台主机上连接了多个配有显示器和键盘的终端并由此所组成的系统,它允许多个用户同时通过自己的终端,以交互方式共享主机中的资源。系统首先必须能提供多个终端,同时给多个用户使用。其次当用户在自己的终端上键入命令时,系统应能及时接收,并及时处理该命令,再将结果返回给用户。要做到及时接收多个用户键入的命令或数据,只需在系统中配置一个多路卡即可。要实现用户的命令及时处理,需要通过下面 2 个方式:

  1. 作业直接进入内存:作业在磁盘上不能运行,所以作业应直接进入内存;
  2. 采用轮转运行方式:为避免一个作业长期独占处理机,系统规定每个作业每次只能运行一个时间片,然后就暂停该作业的运行,并立即调度下一个作业运行。

分时系统的优点是用户的请求可以被及时响应,解决了人机交互问题。缺点是不能够优先处理一些紧急任务,因为 OS 对各用户和作业完全公平。

7.6. 实时系统

实时计算”可以定义为这样一类计算:系统的正确性,不仅由计算的逻辑结果来确定,而且还取决于产生结果的时间。实时系统是指系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。
实时系统的任务分为硬实时任务和软实时任务:

实时任务 说明
硬实时任务(Hard Real-time Task,HRT) 指系统必须满足任务对截止时间的要求,否则可能出现难以预测的后果
软实时任务(Soft Real-time Task,SRT) 对截止时间的检查并不严格,若偶尔错过了任务的截止时间,对系统产生的影响也不会太大