第一章 操作系统引论
1.1 操作系统的目标和作用
1.1.1 操作系统的目标
-
方便性
可以使用编译命令将用户采用高级语言书写的程序翻译成机器代码,或者直接通过 OS 所提供的各种命令操纵计算机系统。
-
有效性
(1)提高系统资源的利用率
(2)提高系统的吞吐量
-
可扩充性
无结构
-->
模块化结构-->
层次化结构-->
微内核结构 -
开放性
系统能遵循世界标准规范。
1.1.2 操作系统的作用
-
作为用户与计算机硬件系统之间的接口
-
作为计算机系统资源的管理者
裸机:完全无软件的计算机系统。
-
实现了对计算机资源的抽象
1.1.3 用户使用计算机的三种方式
-
命令方式
通过键盘输入有关命令,直接操纵计算机系统。
-
图标、窗口方式
通过屏幕上的图标和窗口来操纵。
-
系统调用方式
OS 提供的一组系统调用。
1.1.4 操作系统的非形式化定义
计算机系统中的一个系统软件,它是这样一些程序模块的集合——它们管理和控制计算机系统中的软硬件资源,合理地组织计算机的工作流程,以便有效地利用这些资源为用户提供一个功能强大、使用方便和可扩展的工作环境,从而在计算机与其用户之间起到接口的作用。
1.2 操作系统的发展过程
1.2.1 推动操作系统发展的主要动力
- 不断提高计算机资源利用率
- 方便用户
- 器件的不断更新迭代
- 计算机体系结构的不断发展
- 不断提出新的应用需求
1.2.2 操作系统的发展过程
-
无操作系统的计算机系统
操作方式:程序员装入穿孔的纸带(卡片),得到输出。
缺点:(1)用户独占全机。(资源利用率低)
(2)CPU 等待用户操作。(人机矛盾)
脱机输入 / 输出方式:通过外围机控制自动输入输出。
脱机的优点:(1)减少了 CPU 的空闲时间
(2)提高了 I/O 速度

-
单道批处理系统
处理完一个作业后,系统能够紧接着处理下一个作业。
特征:自动性、顺序性、单道性
缺点:(1)I/O 设备和 CPU 不能同时工作,导致低效性
(2)不能充分利用系统资源
-
多道批处理系统
用户所提交的作业都先存放在外存上并排成一个队列,称为“后备队列”;然后,由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享 CPU 和系统中的各种资源。
为了使系统中的多道程序协调运行,配置了一组软件来解决多道程序对系统资源的共享和争用问题,以及对作业进行合理的组织和调度。这就形成了现代意义上的 OS。
特征:多道性、无序性、调度性
优点:(1)资源利用率高
(2)系统吞吐量大
缺点:(1)作业平均周转时间长
(2)用户交互性差
-
分时系统
在一台主机上连接多个带显示器和键盘的终端,同时允许多个用户通过自己的终端以交互的方式使用计算机,共享硬件和软件资源。并让每一个用户都觉得自己独占主机。
关键问题:(1)及时接收。
(2)及时处理。
解决方案:分时技术(时间片)。把处理机的时间分成很短的时间片(如几百毫秒),轮流地分配给各个终端作业使用。如果在分配给它的时间片内,作业仍然没有执行完,它也必须将 CPU 交给下一个作业使用,并等下一轮得到 CPU 时再继续执行。
特征:多路性、独立性、及时性、交互性
-
实时系统
“实时”表示“及时”。实时系统是指系统能及时(或即时)响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。
类型:(1)工业(武器)控制系统
(2)信息查询系统
(3)多媒体系统
(4)嵌入式系统
实时任务的类型:
-
周期性实时任务 和 非周期性实时任务
开始截止时间:某任务在某时间以前必须开始执行
完成截止时间:某任务在某时间以前必须完成
-
硬实时任务:必须满足截止时间的要求
软实时任务:不必须,影响不大
特征:多路性、独立性、及时性、交互性、可靠性
-
-
微机操作系统
- 单用户单任务操作系统
- 单用户多任务操作系统
- 多用户多任务操作系统
-
通用操作系统
目前的操作系统,通常具有分时、实时和批处理功能,又称作通用操作系统。可适用于计算、事务处理等多种领域,能运行在多种硬件平台上,如 UNIX 系统、Windows、Linux 等。--通用化
1.3 操作系统的基本特性
批处理系统:高资源利用率和系统吞吐量
分时系统:能够获得及时响应
实时系统:具有实时特征
1.3.1 并发
- 并行:两个或多个事件在同一时刻发生
- 并发:两个或多个事件在同一时间间隔内发生
引入进程和线程来实现并发。
- 单处理器:在多道程序处理时,宏观上并发,微观上交替执行
- 多处理器:可以并发执行的程序被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序,这样,多个程序便可同时执行
1.3.2 共享
系统中的资源远少于多道程序需求的总和,会形成它们对共享资源的争夺。
两类共享方式:
- 互斥共享: 资源分配后到释放前,不能被其他进程所使用。而把在一段时间内只允许一个进程访问的资源称为临界资源或独占资源。(一直用)
- 同时访问: 允许一段时间内由多个进程“同时”访问,但在微观意义上,这些进程对资源的访问是交替的。(交替用)
1.3.3 虚拟
虚拟:将一个物理实体变为若干个逻辑上的对应物。
两种虚拟技术:
-
时分复用技术(利用空闲时间)
(1)多道程序设计技术
为每道程序建立至少一个进程,让多道程序并发执行。每个程序交替进行,让每个程序的用户感受到处理器专门为他自己服务。
(2)虚拟设备技术(假脱机技术)
将一台物理 I/O 设备虚拟为多台 I/O 设备,允许每个用户占用一台逻辑上的 I/O 设备。通过轮流分配资源,可以实现用户设备之间的“共享”。例如,多台打印机进行同时打印。
-
空分复用技术(利用空闲空间)
(1)虚拟存储技术(虚拟存储器)
每次只把用户程序的一部分从外存调入内存运行,运行完成后将该部分换出,再换入另一部分到内存运行。通过这样的置换功能实现逻辑上的“扩容”。
注意:若一台物理设备虚拟为 N 台逻辑设备,则每台逻辑设备的平均速度 ≤ \le ≤ 物理设备速度的 1 / N,每台逻辑设备的平均占用空间 ≤ \le ≤ 物理设备空间的 1 / N。
(2)虚拟磁盘技术(*)
1.3.4 异步
由于资源等因素的限制,使进程的执行通常不可能“一气呵成”,而是“走走停停”,这样就导致了进程运行的不确定性。
异步性也称不确定性,指进程的执行顺序和执行时间的不确定性。主要包括以下两点:
-
进程的运行速度不可预知。
分时系统中,多个进程并发执行,时走时停,不可预知每个进程的运行推进快慢
-
难以重现系统在某个时刻的状态。
但是,只要其他条件完全相同(运行环境、OS 进程同步机制等),即便同一作业在不同的机器上经过多次运行,也都会获得相同的结果。
1.3.5 四大基本特征之间的关系
- 并发是操作系统最重要,最基本的特征
- 并发和共享互为存在的条件
- 虚拟以并发和资源共享为前提
- 异步性是并发和共享的必然结果
1.4 操作系统的主要功能

1.4.1 处理机管理功能
传统的多道程序系统中,处理机的分配和运行都是以进程为基本单位的,因此也可以归纳为对进程的管理。
目标:完成处理机资源的分配调度等功能。处理机调度的单位可为进程或线程。
-
进程控制
- 创建、撤销、回收进程。
- 为一个进程创建若干个线程。
- 进程、线程的资源分配。
-
进程同步
- 进程互斥方式:进程在对临界资源进行访问时,采用互斥方式
- 进程同步方式:协调进程的执行次序
-
进程通信
实现进程之间的信息交换。(进程空间)
-
进程调度
- 作业调度:按照一定的算法,选取若干个作业,分配资源,调入内存,创建进程,进入处理机的就绪队列中
- 进程调度:按照一定的算法,从就绪队列中选出一个进程分配处理机,设置运行现场,开始执行
1.4.2 存储器管理功能
目标:提高利用率、方便用户使用、提供足够的存储空间、方便进程并发运行
-
内存分配
- 为每道程序分配内存空间
- 提高存储器的利用率
- 允许正在进行的程序申请附加的内存空间
-
内存保护
- 确保每道用户程序都仅在自己的内存空间内运行,彼此互不干扰。(方法:设置程序访问的上下界)
- 不允许用户程序访问操作系统的程序的数据,也不允许用户程序转移到非共享的其他用户程序中去。
-
地址映射
将地址空间中的逻辑地址转换为内存空间中对应的物理地址。
-
内存扩充
借助于虚拟存储技术,从逻辑上扩充内存容量。实现的功能有:
- 请求调入功能:允许在仅装入部分用户程序和数据的情况下,便能启动该程序
- 置换功能:能将内存中的一部分暂时不用的程序和数据调至硬盘上
1.4.3 设备管理功能
目标:方便用户使用设备、提高 CPU 与 I/O 设备利用率
-
缓冲管理
在内存中设置缓冲区,缓和 CPU 和 I/O 设备速度不匹配的矛盾,提高 CPU 的利用率。
-
设备分配
根据用户进程的 I/O 请求和系统现有资源,按照某种分配策略为其分配所需的设备。需要的配置:
- 设备控制表、控制器控制表等数据结构
- 记录设备及控制器等的标识符和状态
-
虚拟设备
设备由多个进程共享,每个进程如同独占。
-
设备处理(驱动程序)
完成的任务:实现 CPU 和 设备控制器之间的通信。
- 由 CPU 向设备控制器发出 I/O 命令,要求它完成指定的 I/O 操作
- 由 CPU 接受从控制器发来的中断请求,并给予迅速的相应和处理
1.4.4 文件管理功能
目标:解决软件资源的存储、共享、保密和保护
-
文件存储空间的管理
设置相应的数据结构,记录文件储存空间的使用情况。
为每个文件分配必要的外存空间,提高外存的利用率,进而提高文件系统的存取速度。
-
目录管理
为每个文件建立一个目录项并加以有效的组织。实现:
- 按文件名存取
- 文件共享(外存上保留一份副本)
- 快速查询
-
文件的读 / 写管理和保护
检索文件目录,用文件读写指针进行读写(同一个指针,因为读写不会同时进行)。
文件的保护:
- 防止未经核准的用户读取文件
- 防止冒名顶替存取文件
- 防止以不正确的形式使用文件
1.4.5 操作系统与用户之间的接口
-
命令接口
这是指由 OS 提供了一组联机命令,供用户用于组织和控制自己的作业运行。
-
图形接口
用户通过屏幕上的图标和窗口来操纵计算机系统和运行自己的程序。
-
编程接口
提供一组系统调用,供用户程序和系统程序调用操作系统功能。
1.5 OS 结构设计
1.5.1 操作系统的设计原则
-
可维护性:容易修改与否称为可维护性。包括:
改错性维护:改正已发现的错误
适应性维护:修改软件,使之适应新的运行环境(硬件环境和软件环境)。如,操作系统的移植
完善性维护:增加新功能
-
可靠性。包括:
正确性:正确实现所要求的功能和性能
稳健性:对意外(故障和误操作)作出适当的处理
-
可理解性:易于理解,以方便测试、维护和交流
-
性能:有效地使用系统资源;尽可能快地响应用户请求
1.5.2 无结构操作系统
多由一个人设计,内部结构复杂且混乱。
优点:(1)一定的灵活性
(2)高效率
缺点:(1)不利于调试
(2)可读性差,难以维护
1.5.3 模块化结构操作系统
将整个系统按功能划分成若干个具有一定独立性和大小的模块,并规定好各模块之间的接口,使得它们之间能够交互。其中较大的模块还可以进一步的细化为若干个子模块。(竖着分块)

优点:(1)提高了 OS 的正确性、可理解性、可维护性
(2)增强了OS的可适应性
(3)加速了OS的开发过程
缺点:(1)功能划分和模块接口难保正确和合理
(2)模块之间的调用关系复杂,降低了模块之间的相对独立性,不利于修改
1.5.4 分层结构操作系统
根据功能调用次序以及其他一些原则将 OS 划分为若干个层次,每一层代码只能调用较低层代码所提供的功能和服务,使模块间的复杂依赖关系变为单项依赖关系,并消除了某些循环依赖关系。系统每加一层,就构成一个比原来功能更强的虚拟机。有利于系统的维护性和可靠性。(横着分块)

优点:(1)功能明确,调用关系清晰,有利于保证设计和实现的正确性
(2)低层和高层可分别实现,高层错误不会影响到低层,易于扩充和维护
缺点:从高层到低层需要穿过多个层次,使得运行效率低
1.5.5 微内核结构操作系统
将操作系统划分为两个大部分:微内核、多个服务器。
-
微内核
能实现最基本功能的操作系统的一部分。
-
服务器
其余扩展功能放在服务器模块里,采用了“机制与策略分离”的原理,实现“基础——扩展”的划分。
- 机制:实现某一功能的具体执行机构。处于系统的基层
- 策略:在机制的基础上借助于参数和算法来进行功能优化。处于系统的高层
采用的技术包括:
-
客户 / 服务器技术
客户与服务器之间通过消息传递来进行通信。
消息:一定格式的数据结构
消息传递过程:
① 发起调用,送出请求消息
② 请求消息到达并进行处理
③ 送出回答消息
④ 整理回答消息,返回结果
-
面向对象技术(*)
优点:(1)良好的灵活性和可扩展性。 OS的大部分功能都是由相对独立的服务器来实现的,用户可根据需要来选配其中的部分或全部服务器,也可以更新若干服务器或增加一些新的服务器
(2)可靠性好,移植性强。 微内核设计严格,服务器之间互不影响。
(3)适合分布式系统。 以同样的调用形式,在下层可通过核心中的网络传送到远方服务器上(远地过程调用 RPC,Remote Procedure Call)。而对用户而言,他只需发送一个请求,然后等待服务器发来的响应,无需知道这条消息是本地处理还是远程处理
(4)融入了面向对象技术。
缺点:效率降低。
早期的 OS 中,用户请求服务时,一般只需要 2 次上下文的切换:用户态 -->
系统态;系统态 -->
用户态。而在微内核 OS 中,至少需要进行 4 次切换(多了服务器的介入)。更糟糕的是,当某个服务器无法完成任务时,会请求转移给其他服务器运作,这时切换的次数会成倍增加。
为了改善效率,可以适当扩展微内核的功能,以减少上下文切换次数的期望值。但是也会造成微内核的容量明显增大,设计困难,接口适应性下降等问题。