二. 操作系统
1. 操作系统概念
(1)操作系统的作用
操作系统是计算机硬件之上的第一层软件系统。
操作系统通常用来:
- 管理系统的硬件、软件、数据资源。
- 控制程序运行。
- 人机之间的接口。
- 应用软件与硬件之间的接口。
可概括为:
- 进程管理
- 存储管理
- 文件管理
- 作业管理
- 设备管理
例题:
计算机系统的层次结构如下图所示,基于硬件之上的软件可分为 a、b、c 三个层次,图中 a、b、c 分别表示()。
A.操作系统、系统软件和应用软件
B.操作系统、应用软件和系统软件
C.应用软件、系统软件和操作系统
D.应用软件、操作系统和系统软件
解析:
由操作系统的定义可知,它是计算机硬件之上的第一层软件系统,并且用户使用的通常是有具体功能的应用软件,所以选项 C 正确。
(2)特殊的操作系统
分类 | 特点 |
批处理操作系统 | 单道批:一次一个作业入内存,作业由程序、数据、作业说明书组成。 多道批:一次多个作业入内存,多道、宏观上并行、微观上串行。 |
分时操作系统 | 采用时间片轮转的方式为多个用户提供服务,每个用户感觉独占系统。 特点:多路性、独立性、交互性和及时性。 |
实时操作系统 | 实时控制系统和实时信息系统,交互能力要求不高,可靠性要求高(规定时间内响应并处理) |
网络操作系统 | 方便有效共享网络资源,提供服务软件和有关协议的集合。 主要有:Unix、Linux 和 Windows Server |
分布式操作系统 | 任意两台计算机可以通过通信交换信息,是网络操作系统的更高级形式,具有透明性、可靠性和高性能等特性。 |
微机操作系统 | Windows:Microsoft 开发的图形用户界面、多任务、多线程操作系统。 Linux:免费使用和自由传播的类 Unix 操作系统,多任务、多用户、多线程和多 CPU 的操作系统。 |
嵌入式操作系统 | 运行在智能芯片环境中。 特点:微型化、可定制(针对硬件变化配置)、实时性、可靠性、易移植性(HAL 和 BSP 支持) |
例题:
从减少成本和缩短研发周期考虑,要求嵌入式操作系统能运行在不同的微处理器平台上,能针对硬件变化进行结构与功能上的配置。该要求体现了嵌入式操作系统的()。
A.可定制性 B.实时性 C.可靠性 D.易移植性
解析:
根据嵌入式操作系统的特点可知,这是可定制性,针对硬件变化配置,选项 A 正确。容易与易移植性混淆,易移植性是由 HAL(硬件抽象层)和 BSP(板级支持包)支持。
2. 进程的概念
(1)进程与线程
进程:进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。由程序块、数据库、进程控制块(PCB)三部分组成。
PCB:PCB 是进程存在的唯一标志。包含进程标识符、状态、位置信息、控制信息、队列指针(链接同一状态的进程)、优先级、现场保护区等。
进程的 2 个基本属性:可拥有资源的独立单位;可独立调度和分配资源的基本单位。
进程与程序的区别:进程是程序的一次执行过程,没有程序就没有进程。
程序是一个静态的概念,进程是一个动态的概念。进程由创建而产生,完成任务后因撤销而消亡;进程是系统进行资源分配和调度的独立单位,而程序不是。
可参考文章:Java 知识点整理 2 — 多线程 ;Java 知识点整理 9 — JVM
例题:
在支持多线程的操作系统中,假设进程 P 创建了若干个线程,那么()是不能被这些线程共享的。
A.该进程中打开的文件
B.该进程的代码段
C.该进程中某些线程的栈指针
D.该进程的全局变量
解析:
根据上图可得,栈指针不能共享,选 C。
(2)进程的状态
进程的状态变化主要有三态模型和五态模型两种。
三态模型
运行:当一个进程在 CPU 上运行时候。(单处理机处于运行态的进程只有一个)
就绪:一个进程获得了除 CPU 外的一切所需资源,一旦得到处理机即可运行。
阻塞:阻塞也称等待或睡眠状态,一个进程正在等待某一事件发生(如请求 I/O、等待 I/O 完成)而暂时停止运行,此时即使把 CPU 分配给进程也无法运行,故称进程处于阻塞状态。
五态模型
相比于三态模型,五态模型多了对就绪和阻塞状态的静止状态,即静止就绪和静止阻塞。
导致挂起的原因:
- 进程过多,主存资源不足,此时必须将某些进程挂起,放到磁盘,暂时不参与调度,以平衡系统负载。
- 系统出现故障,或者是用户调试程序,也可能需要将进程挂起检查问题。
例题:
在单处理机系统中,采用先来先服务调度算法。系统中有 4 个进程 P1、P2、P3、P4(假设按此顺序到达),其中 P1 为运行态,P2 为就绪态,P3、P4 为等待态,且 P3 等待打印机,P4 等待扫描仪。若 P1(),则 P1、P2、P3、P4 的状态分别是()。
A.时间片到 B.释放了扫描仪 C.释放了打印机 D.已完成
A.等待、就绪、等待和等待
B.运行、就绪、运行和等待
C.就绪、运行、等待和等待
D.就绪、就绪、等待和运行
解析:
第一个空不好直接得出,先看第二个空。由于是单处理机系统,所以系统中最多只能存在一个运行状态的进程,并且该题目中进程只有三种状态,即三态模型,三态模型中等待状态无法直接变成运行状态,所以排除 BD。选项 A 中没有运行态,当 P1 变成等待态后,CPU 空闲,此时 P2 应该进入运行态,所以 A 错误。选项 C 正确,P1 进入就绪态,空出了 CPU,P2 获得 CPU 进入运行态。由此可得,P1 进入就绪态只能是时间片用完,所以第一个空选 A。
3. 进程调度
(1)PV 操作的概念
同步与互斥:
同步存在直接制约关系,速度不一致,在一定情况停下等待。例如两人同时出发,一人步行一人开车,开车先到的人等待步行的人抵达,然后再进行后续操作。
互斥存在间接制约关系,如千军万马过独木桥。
而独木桥可以看作是各进程之间互斥访问的资源,称为临界资源。进程中访问临界资源的那段代码称为临界区。
进程之间存在并发的特点,通过 PV 操作来实现资源的同步与互斥访问。
PV,即 P(S) 和 V(S)。P 也叫加锁,S 也叫解锁。
S 指信号量,是一种特殊的变量,是全局变量。
- 信号量可以表示资源数量;
- 信号量为负数时表示排队进程数(欠的资源数)。
S 代表资源数,有进程申请资源,那么 S 的数量会相应减少,然后判断资源是否足够,例如本来资源有 1 个,申请后还剩 0 个,资源是充足的,够进程用,所以执行后续操作,但如果此时又来了个进程申请资源,此时 S = -1,资源不够了,进程就会进入阻塞队列等待,S = -1 也表示有一个进程在排队,或者说欠了一个资源。等上一个进程用完后,释放了资源,S 的数量会相应增加,然后检查是否有进程正在排队,注意,此时 S = 0,也代表有进程正在排队,然后通知排队的进程有资源可用了(此时排队的进程进入就绪态)。
例题1:
PV 操作是操作系统提供的具有特定功能的原语。利用 PV 操作可用()。
A.保证系统不发生死锁。
B.实现资源的互斥使用。
C.提供资源利用率。
D.推迟进程使用共享资源的时间。
解析1:
PV 操作就是加锁和解锁,所以可能会发生死锁,A 选项错误。PV 操作能够实现资源的互斥访问,所以 B 选择正确。加锁和解锁会降低资源的利用率,C 选项错误。PV 操作是对临界资源的访问进行控制访问,所以不会影响共享资源,D 选项错误。
例题2:
假设系统中有 n 个进程共享 3 台扫描仪,并采用 PV 操作实现进程同步与互斥。若系统信号量 S 的当前值为 -1,进程 P1、P2 又分别执行了一次 P(S) 操作,那么信号量 S 的值应为()。
A.3 B.-3 C.1 D.-1
解析2:
信号量 S 代表资源数,一开始应为 3,现在的值为 -1,说明有一个进程在排队,之后 P1、P2 又分别进行了一个 P(S),即申请资源,并且信号量为全局变量,所以 S = -1 - 1 -1 = -3,选 B。
(2)信号量与 PV 操作
PV 操作与互斥模型
如,多个进程共享一台打印机问题:
在使用打印机前先去申请资源,检查资源是否足够,加锁使用,使用后释放资源,并通知其它排队者。
在互斥模型中,PV 操作成对存在于一个进程中。互斥信号量 S 的初始值为 1,因为打印机资源一次只能一个进程使用。
PV 操作与同步模型
如,单缓冲区生产者、消费者问题:
在同步模型中,同一对 PV 操作不在一个进程中,而存在于两个进程中。
由分析可知,一个产品被放到缓冲区前,需要先检查缓冲区资源是否足够,即 P(S1),而释放缓冲区资源,是在消费者取出产品后才释放,即 V(S1),所以信号量 S1 代表缓冲区资源,初始值应该为 1。一个产品被放到缓冲区后,产品资源数量应该相应增加,即 V(S2),而产品资源被消耗,是在消费者取出前,去申请使用并检查是否有产品资源,所以信号量 S2 代表产品资源,初始值应该为 0。
PV 操作与混合模型
如,在单缓冲区生产者、消费者问题的基础上,增加了互斥模型的概念:
在同步模型中已经提到,S1、S2 分别代表缓冲区资源和产品资源,在这个基础上再增加互斥模型的概念,即信号量 S 代表对缓冲区的访问权,初始值为 1。生产者将产品送到缓冲区前,需要先申请访问权并检查是否有资源,送完后,释放访问权,消费者同样如此,从缓冲区取产品时需要先申请访问权,取到后再释放。P(S) 和 V(S) 存在于同一个进程中,是互斥模型,这样就形成了一个同步模型与互斥模型同时存在的混合模型。
例题:
假设铁路自动售票系统有 n 个售票终端,该系统为每个售票终端创建一个进程 Pi(i = 1,2,…,n)管理车票销售过程。假设 Tj(i = 1,2,…,m)单元存放某日某趟车的车票剩余票数,Temp 为 Pi 进程的临时工作单元,x 为某用户的购票张数。Pi 进程的工作流程如下图所示,用 PV 操作实现进程间的同步与互斥。初始化时系统应将信号量 S 赋值为()。图中(a)、(b)、(c)处应分别填入()。
A.n-1 B.0 C.1 D.2
A.V(S)、P(S) 和 P(S)
B.P(S)、P(S) 和 V(S)
C.V(S)、V(S) 和 P(S)
D.P(S)、V(S) 和 V(S)
解析:
由图可知,进程首先按用户需求找到单元 Tj,然后将 Tj 的值赋值给临时工作单元 Temp,即剩余车票数,接下来是对 Temp 的判断,看 Temp 的值(剩余车票数)是否大于用户购票数。如果大于,则购票并减少剩余车票数,输出 x 张票;如果小于,则提示无票。因此整个购票过程相当于是依靠 Temp 来进行暂存,因为不可能让多个用户同时去操作剩余票数,假设 Tj = 2,即还剩两张票,如果来了两个用户都去购买两张票,肯定只有一个用户能成功买上,另一个会提示无票。因此 Temp 就相当于缓冲区资源,每次仅允许一个进程使用,所以初始信号量 S 的值为 1,代表缓冲区资源,即 Temp 的数量。那么用户在购票前,就需要先加锁,即 P(S),Temp 的值要么大于等于 x,可以购票,要么小于 x,无法购票,两条路只能走一条,所以每条路都会进行解锁释放缓冲区资源,即 V(S)。典型的互斥模型,同一对 PV 操作同时存在于一个进程中。所以选择 CD。
(3)前趋图与 PV 操作
前趋图
图中每个节点代表一个进程;每个节点所指向的下一个节点,为它的后继,自己为下一个节点的前趋,如 D 是 A 的后继节点,A 是 D 的前趋节点;每个节点的间线流出代表 V,即释放资源,流入代表 P,申请资源。
举例:上述前趋图代表包饺子的过程,A 是绞肉,B 是切葱末,C 是切姜末,D 是搅拌,E 是包饺子。
整个流程有严格的先后顺序,肯定不能先搅拌再绞肉切葱姜末。信号量 Sa、Sb、Sc、Sd 的初始值都是 0。进程 A、B、C 完成后,都进行 V 操作,即先释放资源,资源数增加,然后进程 D 在搅拌前,需要先申请资源并判断是否充足,即进行 3 次 P 操作,然后搅拌,搅拌完成后,再 V(Sd),释放资源,最后进程 E 在进行包饺子前先申请资源并判断,然后包饺子。
先根据前趋图标注每个节点的 PV,然后顺着做就可以了。记住,流出代表 V,流入代表 P。
例题:
进程 P1、P2、P3、P4、P5 的前趋图如下所示:
若用 PV 操作控制进程 P1、P2、P3、P4、P5 并发执行的过程,则需要设置 5 个信号 S1、S2、S3、S4、S5,且信号量 S1 ~ S5 的初值都等于零。下图中 a 和 b 处应分别填();c 和 d 处应分别填();e 和 f 处应分别填()。
1. A.V(S1) P(S2) V(S3) B.P(S1) V(S2) V(S3) C.V(S1) V(S2) V(S3) D.P(S1) P(S2) V(S3)
2. A.P(S2) P(S4) B.P(S2) V(S4) C.V(S2) P(S4) D.V(S2) V(S4)
3. A.P(S4) V(S4) V(S5) B.V(S5) P(S4) P(S5) C.V(S3) V(S4) V(S5) D.P(S3) P(S4) V(S5)
解析:
先根据前趋图标出每个节点的 PV:
根据图示,首先看 a 和 b。P1 有两个流出,所以应该有两个 V 操作,分别流向 P2 和 P3,所以 a 应该填两个 V 操作,即 V(S1) 和 V(S2),P2 进程得到 S1 资源后先进行 P 操作,即 P(S1),已给出,然后进行 V 操作,即 V(S3)。所以第一个空选 C;然后看 c 和 d,P3 进程得到 S2 资源后应该先进行 P 操作,即 P(S2),然后进行 V 操作,即 V(S4),因此第二个空选 B;最后看 e 和 f,P4 进程得到 S3 资源后先进行 P 操作,即 P(S3),已给出,然后进行 V 操作,V(S5),然后 P5 进程有两个 P 操作,分别申请 S4、S5,所以有 P(S4) 和 P(S5),第三个空选 B。注意每个进程释放后的资源标识。
后续会不断更新整理。