第一章

操作系统课程

思考题

第 (3) 题

什么是操作系统?操作系统在计算机系统中的主要作用是什么?

解:「操作系统」是管理系统资源、控制程序运行、改善人机界面、提供各种服务,并合理组织计算机工作流程和为用户方便有效地使用计算机提供良好运行环境的一种系统软件。

操作系统的作用主要有,服务用户,进程交互,系统实现,资源管理

第 (6) 题

什么是多道程序设计?多道程序设计有哪些特点?

解:

允许多个程序同时进入一个计算机系统的主存储器并启动进行计算的方法称为「多道程序设计」 

  • 多道:内存中同时存放几个作业;
  • 宏观上并行运行:都处于运行状态,但都未运行完;
  • 微观上串行运行:各作业交替使用CPU;

第 (13) 题

什么是操作系统内核?解释单内核操作系统与微内核操作系统的区别及其优缺点

解:

内核」是作为核心软件来提供支持进程并发执行的基本功能和基本操作的一组程序模块。

单内核将内核从整体上作为一个大进程实现,并同时运行在一个单独的地址空间。优点是效率高。缺点是稳定性差,开发过程中的 bug 经常会导致整个系统挂掉。

微内核」中只有最基本的调度、内存管理。驱动、文件系统等都是用户态的守护进程去实现的。
功能被划分为独立的进程,进程间通过 ipc 进行通信。模块化程度高,一个服务失效不会影响另外一个服务。但编程较为困难

第 (14) 题

试述操作系统资源管理的主要技术:资源复用、资源虚拟和资源抽象。

解:

资源复用」用于解决物理资源数量不足。主要有空分复用共享时分复用共享两种方式。「空分复用共享」指资源分割成多个更小的分配单元,供进程使用。「时分复用共享」指资源以整体为分配单元,在一个时段内供一个进程独占使用。

资源虚拟」用于解决物理资源数量不足,提高服务的能力和水平。可将物理上的一个资源变成逻辑上的多个对应物,或物理上多个变成逻辑上一个。

资源抽象」用于处理系统的复杂性,重点解决资源的易用性。资源抽象指通过创建软件来屏蔽硬件资源的物理特性和借口细节,简化对硬件资源的操作、控制和使用的一类技术。资源抽象包括了单级资源抽象与多级资源抽象

应用题

第 (2) 题

某计算机系统有一台输入机一台打印机,现有两道程序投入运行,且程序 A 开始运行,程序 B 后开始运行。程序 A 的运行轨迹为计算 50 ms,打印 100ms,再计算 50 ms,打印 100ms,结束。程序 B 的运行轨迹为计算 50 ms,输入 80 ms,再计算 100 ms,结束。试说明:

  1. 两道程序运行时,CPU 是否空闲等待?若是,在哪段时间等待?为什么等待?
  2. A,B 是否有等待 CPU 的情况?若有,指出发生等待的时刻。

解:

第一题:存在等待。若以程序 A 开始时刻为 0 时刻,则 100 ms 时刻时,程序 A 已经结束了计算,并且正在打印,而程序 B 也结束了计算,正在输入,此时 A 和 B 都没有使用 CPU,因此出现空闲等待,持续时间为 100ms~150 ms

第二题:程序 B 存在等待。

  • 0 ms 时,程序 A 先开始执行,程序 B 需要等待,等待时间为 0 ms ~ 50 ms
  • 180 ms 时,程序 A 正在计算,但是程序 B 结束了输入,也需要进行计算,但此时 CPU 被占用,需要等到程序 A 结束运算才能开始计算。等待时间为 180ms~200ms

第 (3) 题

某计算机拥有单 CPU 和两台 I/O 设备 ,支持多道程序设计,同时投入三个程序运行,其运行轨迹如下

  • (30 ms),CPU(10 ms),(30 ms), CPU(10 ms),(20 ms)
  • (20 ms),CPU(10 ms),(40 ms)
  • :CPU(30 ms),(20 ms), CPU(10 ms),(10 ms)

如果 CPU, 并行工作,优先级从高到低依次为 ,CPU 可根据优先级抢占,但设备 不可抢占,试求:

  1. 每个程序从投入到完成分别所需要的时间
  2. CPU 的利用率
  3. I/O 设备的利用率

解:

做出时序图可得

img-2024-03-10 10-46-40.png

第一题:由图可得 用时 100 ms, 用时 70 ms, 用时 110 ms

第二题:由图可得 CPU 利用率为

第三题,

第二章

思考题

第 (2)题

为什么将机器指令分成特权指令和非特权指令

解:主要有以下几个理由

  • 通过限制对特权指令的访问,可以防止恶意程序或用户对系统资源的滥用,并确保系统的安全性和稳定性。
  • 特权指令的限制可以减少由于用户程序或应用程序错误导致的系统崩溃或损坏的可能性,因为这些指令只能由系统内核执行,从而减少了发生故障的可能性。
  • 通过特权指令,操作系统可以有效地管理系统资源,包括内存、硬件设备等,从而提高系统的效率和性能。

第(3)题

为什么说操作系统是由中断驱动的?试述中断在操作系统中的作用

解:

操作系统的行为和执行是通过中断事件的发生来驱动和响应的,主要作用有:

  • 中断可用于处理来自外部设备或其他程序的异步事件,如硬件中断(如键盘输入、鼠标移动、网络数据包到达等)或软件中断(如系统调用请求)。
  • 操作系统使用中断来实现多任务处理。当一个任务需要等待外部事件的完成或发生某些条件时,它可以被挂起,同时允许 CPU 执行其他任务。当条件满足或事件发生时,相应的中断将触发操作系统将 CPU 重新分配给等待的任务。
  • 分时操作系统中,中断可用于实现时间片轮转调度。操作系统使用定时器中断来切换执行的任务,以确保每个任务都有公平的 CPU 时间片。
  • 中断还用于处理异常情况,如内存访问错误、非法指令等。当这些异常发生时,操作系统将执行相应的中断服务程序来处理并恢复系统的正常状态。

第 (8)题

进程最基本的状态有哪些?哪些进程可能引起不同状态间的转换?

解:基本状态有三种:运行,就绪,等待。状态转换包括

  • 当操作系统选择一个就绪进程,并将 CPU 分配给它时,进程从就绪状态转移到运行状态。
  • 当进程执行了一个需要等待某种事件发生的操作(比如 I/O 操作),它将从运行状态转移到等待状态,直到事件发生。
  • 当一个进程等待的事件发生后,它将从等待状态转移到就绪状态,等待操作系统将其重新调度到运行状态。
  • 当操作系统将 CPU 从当前运行的进程中抢占,或者进程完成了它的时间片,它将从运行状态转移到就绪状态,等待下一次调度。

第 (15)题

什么是内核级线程?什么是用户级线程?什么是混合式线程?试对它们进行比较

解:

  • 内核级线程是由操作系统内核直接管理和调度的线程。
  • 用户级线程是由用户空间的线程库管理和调度的线程,而不涉及操作系统内核的直接支持。
  • 混合式线程结合了内核级线程和用户级线程的优点,既能够利用内核的并发性能和多核处理器支持,又能够降低线程切换的开销。

对比

  • 开销:内核级线程的切换开销较高,而用户级线程和混合式线程的切换开销相对较低。
  • 并发性能:内核级线程具有较好的并发性能,能够利用多核处理器的能力;用户级线程受限于线程库的实现,无法利用多核处理器的并发能力;混合式线程在一定程度上可以利用多核处理器的并发能力。
  • 管理和调度:内核级线程由操作系统内核直接管理和调度,而用户级线程和混合式线程则由用户空间的线程库管理和调度。

应用题

第 (1)题

在下列指令中,哪些只能在内核态运行?

  • 读时钟日期
  • 陷入指令
  • 设置时钟日期
  • 加载 PSW
  • 置特殊寄存器
  • 启动 I/O 指令

解:陷入指令、设置时钟日期、加载 PSW、置特殊寄存器、启动 I/O 指令

第 (17)题

现有 5 个批处理作业 均已到达一台按单道方式执行的处理器,其运行时间分别为 2 min, 4 min, 6 min, 8 min 和 10 min,各自的优先级分别为 1,2,3,4 和 5,其中 5 是最高级。对于时间片轮转调度算法,优先数调度算法、最短作业优先调度优先算法、先来先服务调度算法(按作业到达次序 C、D、B、E、A),在忽略进程切换时间的前提下,计算出平均作业周转时间

解:

时间片轮转调度算法,没给出具体时间片长度,假设为 2min,则 A,B,C,D,E 的等待时间分别为 0,8,14,18,20,周转时间分别为 2,12,20,26,30

优先数调度算法,则执行顺序为 EDCBA,此时 A,B,C,D,E 的等待时间分别为 28,24,18,10,0,周转时间分别为 30,28,24,18,10

最短作业优先调度优先算法,则执行顺序为 ABCDE,此时 A,B,C,D,E 的等待时间分别为 0,2,6,12,20,周转时间分别为 2,6,12,20,30

先来先服务算法,则执行顺序为 CDBEA,此时 A,B,C,D,E 的等待时间分别为 28,14,0,6,18,周转时间分别为 30,18,6,14,28

第 (18)题

在一个只支持三道程序同时运行的多道程序系统中,作业调度采用最短作业优先调度算法,进程调度采用以优先数为基础的抢占式调度算法。在下表所示的作业序列中,优先数即为进程优先数,优先数越小则优先级越高

作业名 到达时间 估计运行时间(min) 优先数
A 10:00 40 5
B 10:20 30 3
C 10:30 60 4
D 10:50 20 6
E 11:00 20 4
F 11:10 10 4

试填写下表

解:

思路:作业调度表述的是进入就绪队列时的次序,而进程调度是处理器在“并行”执行任务时的偏好

  • 10:00 时作业 A 到达。由于就绪队列为空,A 进入就绪。由于处理器为空,A 进入处理器。
  • 10:20 时作业 B 到达。由于就绪队列还有两个空,B 就绪。由于处理器为 A,优先级低,根据抢占调度算法,B 进入处理器,A 就绪。
  • 10:30 时作业 C 到达。由于就绪队列还有一个空,C 就绪。由于处理器为 B,优先级高,因此 C 保持等待
  • 10:50 时作业 B 运行结束,而任务 D 恰好到达。由于就绪队列还有一个空,D 就绪。此时 ACD 中 C 优先级最高,因此开始执行 C
  • 11:00 时作业 E 到达,就绪队列已满,E 进入后备作业队列
  • 11:10 时作业 F 到达,就绪队列已满,F 进入后备作业队列
  • 11:50 时作业 C 运行结束,就绪队列多出来一个空,对于 EF,F 为最短作业,进入就绪队列。就绪队列中为 ADF,F 优先级最高,进入处理器。
  • 12:00 时作业 F 运行结束,就绪队列多出来一个空,E 进入就绪队列。就绪队列中为 ADE,E 优先级最高,进入处理器。
  • 12:20 时作业 E 运行结束。就绪队列中为 AD,A 优先级最高,进入处理器。
  • 12:40 时作业 A 运行结束。D 进入处理器。
  • 13:00 时作业 D 运行结束。
作业名 进入内存时间 运行结束时间 作业周转时间
A 10:00 12:40 160
B 10:20 10:50 30
C 10:30 11:50 80
D 10:50 13:00 130
E 12:00 12:20 80
F 11:50 12:00 50

平均作业周转时间为

第三章

思考题

第(2)题

什么是逻辑地址,什么是物理地址?

解:

「逻辑地址」是用户编程序时所用的地址,物理地址是操作系统为了对物理内存进行管理,把内存分成若干个大小相等的存储单元,对应的编号。

第(4)题

什么是虚拟存储器?列举采用虚拟存储技术的必要性和可行性

解:

虚拟存储器是指在具有层次结构存储器的计算机系统中,采用自动实现部分装入和部分对换功能,为用户提供一个比物理内存容量大得多的,可寻址的一种“内存储器”。

  1. 内存扩展: 虚拟存储器使得系统能够运行比物理内存更大的程序。当物理内存不足以容纳整个程序时,虚拟存储器可以将不常用的数据存储在磁盘上,并在需要时将其调入内存。
  2. 多任务处理: 在多任务环境下,虚拟存储器允许多个程序同时运行,并且它们不会相互干扰。每个程序都认为它们拥有整个内存空间,而实际上它们共享物理内存和磁盘空间。
  3. 内存管理: 虚拟存储器简化了内存管理的任务。它可以将内存分成固定大小的块,并根据需要将数据从磁盘加载到内存中。这种分页或分段技术使得内存管理更加灵活和高效。
  4. 内存保护: 虚拟存储器提供了内存保护的机制,防止一个程序意外地访问另一个程序的内存空间。每个程序都有自己的虚拟地址空间,操作系统负责将其映射到物理地址空间。
  5. 交换空间: 虚拟存储器可以用作交换空间,允许操作系统在系统内存不足时将部分内存中的数据交换到磁盘上,以便为当前运行的程序提供足够的内存空间。

第(14)题

试述页式虚拟存储管理的实现原理

解:

页式虚拟存储管理是一种常见的虚拟存储管理技术,其实现原理基于将物理内存和磁盘空间划分为固定大小的页(page),通常大小为 4KB 或者更大。每个进程都有自己的页表(page table),用于将虚拟地址映射到物理地址。下面是页式虚拟存储管理的实现原理:

  1. 虚拟地址空间划分: 每个进程都有自己的虚拟地址空间,通常是一个连续的地址空间,从0开始,直到最大地址。这个地址空间被划分成固定大小的页面,与物理内存和磁盘存储中的页面大小相同。
  2. 页表: 每个进程都有一个页表,用于将虚拟地址映射到物理地址。页表通常是一个数据结构,其条目存储了虚拟地址和对应的物理地址之间的映射关系。当进程访问一个虚拟地址时,操作系统通过页表查找对应的物理地址,并将其加载到物理内存中。
  3. 页面调度: 当一个进程访问一个虚拟地址,但对应的物理页面不在内存中时,发生了缺页(page fault)。操作系统会将缺失的页面从磁盘加载到内存中,然后更新页表以反映新的映射关系。如果内存中没有足够的空闲页面,操作系统可能需要选择一个页面进行替换。通常使用页面置换算法(例如最近最少使用算法LRU)来选择最适合替换的页面。

应用题

第( 4)题

在可变分区存储管理下,按地址排序的内存空闲区大小依次为 10 KB,4 KB,20 KB,18 KB,7 KB,9 KB,12 KB,15 KB。依次考虑一下两个连续存储区的请求序列

  • 12 KB, 10 KB, 9 KB
  • 12 KB, 10 KB, 15 KB, 18 KB

问分别使用最先适配算法、最优适配算法、最坏适配算法如下次适配算法,哪些空闲区将被使用

解:

第一种情况

  • 采用最先适配算法,将依次使用第三个,第一个和第四个分区
  • 采用最优适配算法,将依次使用第七个,第一个和第六个分区
  • 采用最坏适配算法,将依次使用第三个,第四个和第八个分区

第二种情况

  • 采用最先适配算法,将依次使用第三个,第一个,第四个,发现没有足够的分区,需要等待
  • 采用最优适配算法,将依次使用第七个,第一个,第八个和第四个
  • 采用最坏适配算法,将依次使用第三个,第四个,第八个,发现没有足够的分区,需要等待

第(16)题

一个页式虚拟存储管理系统中的用户空间为 1024KB,页面大小为 4KB,内存空间为 512KB。已知用户的 10、11、12、13 号虚页分得的内存页框号为 62,78,25,36,试将逻辑地址 0BEBCH 转换为对应的物理地址(以十六进制表示)

解:

首先逻辑地址为 0000 1011 1110 1011 1100,由于页面大小为 4KB,因此低 12 位为页内偏移,高 8 位为页标号。页标号为 1011 即 11,因此分配到 78 页,得到的物理地址为0100 1110 1110 1011 1100

第(20)题

在一个页式虚拟存储管理系统中,一个程序运行的页面走向是 1-2-3-4-2-1-5-6-2-1-2-3-7-6-3-2-1-2-3-6,分别使用 FIFO,OPT,和 LRU 页面调度算法,对于分配给程序 3 个,4 个,5 个和 6 个页框的情况,求出访问过程中所发生的缺页中断次数和缺页中断率

解:

使用 FIFO,3 个页框

1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
1 1 1 4 4 4 4 6 6 6 6 3 3 3 3 2 2 2 2 6
2 2 2 2 1 1 1 2 2 2 2 7 7 7 7 1 1 1 1
3 3 3 3 5 5 5 1 1 1 1 6 6 6 6 6 3 3

缺页中断发生 15 次,缺页中断率为

使用 FIFO,4 个页框

1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
1 1 1 1 1 1 5 5 5 5 5 3 3 3 3 3 3 2 2 2
2 2 2 2 2 2 6 6 6 6 6 7 7 7 7 7 7 3 3
3 3 3 3 3 3 2 1 1 1 1 6 6 6 6 6 6 6
4 4 4 4 4 4 4 2 2 2 2 2 2 1 1 1 1

缺页中断发生 13 次,缺页中断率为

使用 FIFO,5 个页框

1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
1 1 1 1 1 1 1 6 6 6 6 6 6 6 6 6 6 6 6 6
2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1
3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2
4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3
5 5 5 5 5 5 7 7 7 7 7 7 7 7

缺页中断发生 10 次,缺页中断率为

使用 FIFO,6 个页框

1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 7 7 7
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 1 1
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3
5 5 5 5 5 5 5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6 6 6 6 6

缺页中断发生 10 次,缺页中断率为

使用 OPT,3 个页框

1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 6
2 2 2 2 2 2 2 2 2 2 2 7 7 7 2 2 2 2 2
3 4 4 4 5 6 6 6 6 6 6 6 6 6 1 1 1 1

缺页中断发生 10 次,缺页中断率为

使用 OPT,4 个页框

1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
4 4 4 5 6 6 6 6 6 6 6 6 6 6 6 6 6

缺页中断发生 8 次,缺页中断率为

使用 OPT,5 个页框

1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 7 7 7 7 7 7 7 7
5 6 6 6 6 6 6 6 6 6 6 6 6 6

缺页中断发生 7 次,缺页中断率为

使用 OPT,6 个页框

1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 7 7 7 7 7 7 7 7
6 6 6 6 6 6 6 6 6 6 6 6 6

缺页中断发生 7 次,缺页中断率为

使用 LRU,3 个页框

1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
1 1 1 4 4 4 5 5 5 1 1 1 7 7 7 2 2 2 2 2
2 2 2 2 2 2 6 6 6 6 3 3 3 3 3 3 3 3 3
3 3 3 1 1 1 2 2 2 2 2 6 6 6 1 1 1 6

缺页中断发生 15 次,缺页中断率为

使用 LRU,4 个页框

1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
1 1 1 1 1 1 1 1 1 1 1 1 1 6 6 6 6 6 6 6
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 5 5 5 5 5 3 3 3 3 3 3 3 3 3
4 4 4 4 6 6 6 6 6 7 7 7 7 1 1 1 1

缺页中断发生 10 次,缺页中断率为

使用 LRU,5 个页框

1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 6 6 6 6 6 6 6 6 6 6 6 6 6
4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3
5 5 5 5 5 5 7 7 7 7 7 7 7 7

缺页中断发生 8 次,缺页中断率为

使用 LRU,6 个页框

1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 7 7 7 7 7 7 7 7
5 5 5 5 5 5 5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6 6 6 6 6

缺页中断发生 7 次,缺页中断率为

第(24)题

在一个页式虚拟存储管理系统中,进程访问地址的序列为 10-11-104-170-72-305-180-240-244-445-467-366,问:

  1. 如果页面大小为 100B,给出页面访问序列
  2. 若进程分得 3 个页框,采用 FIFO 和 LRU 页面调度算法,计算缺页中断率

解:直接对 100 取模,得到页面序列为

0-0-1-1-0-3-1-2-2-4-4-3

若使用 FIFO,则

0 0 1 1 0 3 1 2 2 4 4 3
0 0 0 0 0 0 0 2 2 2 2 2
1 1 1 1 1 1 1 4 4 4
3 3 3 3 3 3 3

缺页次数为 5,中断率为

若使用 LRU,则

0 0 1 1 0 3 1 2 2 4 4 3
0 0 0 0 0 0 0 2 2 2 2 2
1 1 1 1 1 1 1 1 1 3
3 3 3 3 4 4 4

缺页次数为 6,中断率为

第四章

思考题

第 (9)题

为什么要引入缓冲技术,其基本思想是什么

解:

引入缓冲技术是为了提高系统性能和资源利用率,解决由于设备速度差异和数据传输异步性引起的效率低下和资源浪费问题。

缓冲技术的基本思想是在数据传输的过程中,使用一个临时存储区域(缓冲区)来调节数据生产者和消费者之间的速度差异,实现数据的异步传输,提高系统的吞吐量和响应速度。

第(13)题

为什么要引入设备独立性?如何实现设备独立性。

设备分配时的灵活性。当进程以逻辑设备名请求某类设备时,如果一台设备已经分配给其它进程或正在检修,此时系统可以将其它几台相同的空闲设备中的任一台分配给该进程,只有当此类设备全部被分配完时,进程才会被阻塞。

易于实现 I/O 重定向。用于 I/O 操作的设备可以更换,重定向即而不必改变应用程序。

为了实现设备的独立性,必须在驱动程序之上设置一层软件,称为设备独立性软件,其主要功能有以下两个方面:

为了实现逻辑设备名到物理设备名的映射,系统必须设置一张设备逻辑表 LUT(Logical Unit Table),能够将应用程序中所使用的逻辑设备名映射为物理设备名,并提供该设备驱动程序的入口地址。

第(18)题

什么是虚拟设备?实现虚拟设备的主要条件是什么?

虚拟设备是指通过高速的共享设备,把一台慢速的以独占方式工作的物理设备改造成若干台虚拟的同类逻辑设备,可以通过 SPOOLing 技术实现。

实现条件:

  • 硬件方面:有大容量磁盘,中断机构和通道装置支撑,使CPU与外设设备可以并行工作的能力;
  • 软件方面:多道程序设计技术,合理分配处理器,实现联机的外围设备同时操作 。

第(20)题

SPOOLing 系统是如何将独占性设备改造成共享型设备的?

解:

SPOOLing 系统通过引入缓冲区和后台处理机制,将独占性设备改造成共享型设备。

当用户或进程需要使用独占性设备时,其操作请求被操作系统截获,并写入 SPOOLing 缓冲区,操作系统将这些请求按照预定的调度策略排队,确保请求的有序处理。一个专门的后台进程不断监控 SPOOLing 缓冲区,从中提取排队的操作请求,并将请求发送到独占性设备进行实际处理。独占性设备逐个处理从 SPOOLing 缓冲区提取的操作请求,完成后后台进程更新请求状态,并继续处理下一个请求。

应用题

第(15)题

若磁头当前位于第 100 号柱面,且正向柱面号增加的方向移动。现有磁盘读写请求队列,柱面号依次为 23,376,205,132,19,61,190,398,29,4,18,40,若采用先来先服务算法,最短查找时间优先算法和双向扫描算法,试计算出各种算法中移动臂所经过的柱面数。

解:

先来先服务,则为柱面号做差分后的绝对值求和。

若为最短查找时间优先算法,顺序为 132, 190, 205, 61, 40, 29, 23, 19, 18, 4, 376, 398

双向扫描算法,顺序为 132, 190, 205, 376, 398, 61, 40, 29, 23, 19, 18, 4

第六章

思考题

第 (2)题

试述并发程序设计的特点以及采用并发程序设计的优缺点

解:

特点:

  1. 任务分解:并发程序通常需要将大任务分解为多个小任务,这些小任务可以独立或部分独立地执行。
  2. 共享资源:多个并发执行的任务可能需要访问共享的资源(如内存、数据结构等),需要合理管理以避免冲突和错误。
  3. 任务同步:涉及到任务之间的依赖和交互,需要同步机制来协调任务执行顺序,保证数据一致性和状态正确性。
  4. 任务通信:并发任务之间可能需要交换信息,通信机制(如消息传递、信号量、共享内存)是必不可少的。
  5. 动态性:并发程序的执行顺序可能不是静态确定的,同一程序的多次执行可能呈现不同的运行路径,导致调试和测试复杂。

优点:

  • 对于单处理器系统,可让处理器和各 I/O 设备同时工作,发挥硬部件的并行能力。
  • 对于多处理器系统,可让各进程在不同处理器上物理地并行,加快计算速度。
  • 简化程序设计任务。

缺点

  1. 设计和调试复杂性:并发程序的设计、测试与调试远比串行程序复杂,因为需要考虑线程或进程间的同步、通信以及死锁、竞态条件等问题。
  2. 开销问题:并发程序需要额外的资源和运行开销,如创建线程的开销、上下文切换的开销、同步机制的开销等。
  3. 安全性问题:并发访问共享资源需要精心设计来避免竞态条件,否则可能导致数据损坏或不一致。
  4. 可预测性和可重复性差:由于并发程序的非确定性特性,同一段代码在不同时间或不同环境下的执行可能得到不同的结果。
  5. 硬件依赖性:并发程序的性能提升可能依赖于执行它的硬件特性,如处理器核数,这可能导致程序在核数较少的系统上表现不佳。

第(17)题

试述产生死锁的必要条件

  • 互斥条件:一个资源一次只能被一个进程所使用。
  • 不剥夺条件:一个资源仅能被占有它的进程所释放,而不能被其他的进程强行抢占。
  • 部分分配:一个进程已占有分给它的资源 ,但仍然要求其他资源。
  • 环路条件:在系统中存在一个由若干个进程形成的环形请求链,其中的每一个进程均占有若干种资源中的某一种,同时还要求下一个进程所占有的资源。

第(18)题

列举死锁的各种防止策略

解:预防死锁,只需要破坏 4 个条件之一

  • 破坏第一个条件(互斥条件):使资源可同时访问而不是互斥使用,
  • 破坏第二个条件(部分分配条件):采用预先静态分配法
  • 破坏第三个条件(不剥夺条件):采用剥夺式调度方法
  • 破坏第四个条件(循环等待条件):采用层次分配策略

应用题

第(8)题

设有 个进程共享一个互斥段,如果

  1. 每次只允许一个进程进入互斥段
  2. 每次最多允许 个进程 同时进入互斥段

试问:以上两种情况下所采取的信号量和值是否相同?试给出信号量值的变化范围

解:

显然不同。

  1. 第一种情况,信号量初始值为 1,当有进程进入互斥段时,信号量减 1 变为零,进程离开互斥段时,信号量加 1 变成 1
  2. 第二种情况,信号量初始值为 m,信号量的加减变化规律是类似的

因此第一种情况信号量取值为 ,第二种情况为

第(17)题

有一个阅览室,读者进入时必须先在一张登记表上登记,此表为每个座位列出一个条目,包括座位号、姓名、读者离开时要注销登记信息,假如共有 100 个座位,试用:

  1. 信号量和 PV 操作
  2. 管程

来实现用户进程的同步算法

解:设计信号量法

semaphore empty = 100;// 记录空座位
semaphore mutex = 1;// 作为互斥的访问登记和注销操作
void reader()
{
    while(true)
    {
        P(empty);
        P(mutex); 
        // 登记
        V(mutex);
        // 阅读
        P(mutex);
        // 注销
        V(mutex);
        V(empty);
    }
}

若用管程来实现

管程 ReadingRoom {
    int availableSeats = 100;  // 可用座位数
    条件变量 seatsAvailable;  // 条件变量,用于控制座位的可用性

    进入阅览室() {
        if (availableSeats == 0) wait(seatsAvailable);
        availableSeats -= 1;
        登记姓名和座位号到登记表;
    }

    离开阅览室() {
        availableSeats += 1;
        从登记表中注销姓名和座位号;
        signal(seatsAvailable);  // 通知其他正在等待的读者
    }
}

使用管程时

ReadingRoom room;  // 实例化管程

room.进入阅览室();  // 读者进入阅览室并登记
...(读者在阅览室停留)
room.离开阅览室();  // 读者离开阅览室并注销登记

第(18)题

桌上有一只盒子,最多可以容纳两个水果,每次只能放入或取出一个水果,爸爸向盘子中放苹果,妈妈向盘子中放橘子,两个儿子专等吃盘子里的橘子,两个女儿专等吃盘子里的苹果。试用:

  1. 信号量和 PV 操作
  2. 管程

实现爸爸、妈妈、女儿、儿子之间的同步与互斥关系

解:

用信号量和 PV 操作实现

semaphore appleFull = 0;
semaphore orangeFull = 0; 
semaphore fruitEmpty = 2;

semaphore mutex=1;  // 防止同时访问盒子

process father(){
	while(true) {
		P(fruitEmpty);
		P(mutex);
		// 放苹果
		V(mutex);
		V(appleFull);
	}
}

process mother(){
	while(true) {
		P(fruitEmpty);
		P(mutex);
		// 放苹果
		V(mutex);
		V(orangeFull);
	}
}

process son(){
	while(true) {
		P(orangeFull);
		P(mutex);
		// 放苹果
		V(mutex);
		V(fruitEmpty);
	}
}

process daugther(){
	while(true) {
		P(appleFull);
		P(mutex);
		// 放苹果
		V(mutex);
		V(fruitEmpty);
	}
}

若使用管程实现

class FruitBowl {
    static final int MAX_FRUITS = 2;
    int apples = 0;   // 盘子中苹果的数量
    int oranges = 0;  // 盘子中橘子的数量

    // 条件变量
    Condition notFull = new Condition();
    Condition notEmptyApple = new Condition();
    Condition notEmptyOrange = new Condition();

    // 爸爸放苹果
    public synchronized void putApple() {
        while (apples + oranges == MAX_FRUITS) {  // 如果盘子已满
            notFull.wait();  // 等待盘子不满
        }
        apples++;  // 放入一个苹果
        notEmptyApple.signal();  // 唤醒可能在等待苹果的女儿
    }

    // 妈妈放橘子
    public synchronized void putOrange() {
        while (apples + oranges == MAX_FRUITS) {  // 如果盘子已满
            notFull.wait();  // 等待盘子不满
        }
        oranges++;  // 放入一个橘子
        notEmptyOrange.signal();  // 唤醒可能在等待橘子的儿子
    }

    // 女儿吃苹果
    public synchronized void takeApple() {
        while (apples == 0) {  // 如果没有苹果
            notEmptyApple.wait();  // 等待有苹果
        }
        apples--;  // 吃掉一个苹果
        notFull.signal();  // 唤醒可能在等待放水果的爸爸或妈妈
    }

    // 儿子吃橘子
    public synchronized void takeOrange() {
        while (oranges == 0) {  // 如果没有橘子
            notEmptyOrange.wait();  // 等待有橘子
        }
        oranges--;  // 吃掉一个橘子
        notFull.signal();  // 唤醒可能在等待放水果的爸爸或妈妈
    }
}

第(25)题

系统有同类资源 个,被 个进程共享,当 时,问每个进程最多可以请求多少个这类资源,使得系统一定不会发生死锁?

解:根据死锁必要条件,可得约束

第(30)题

某系统有 设备 3 台, 设备 4 台,它们被 进程共享。已知这 4 个进程按照如下顺序使用设备

系统运行过程中可能产生死锁吗?若有可能,列举一种情况。

解:可能产生死锁。根据安全状态的定义,如果四个进程同时启动:

  • 时间点 1: 启动,申请到了对应的 ,但是 没能申请到 ,进入等待
  • 时间点 2: 申请到了对应的
  • 时间点 2: 尝试申请 ,但是此时 已经耗尽,陷入等待。

这构成了一个典型的循环等待,满足死锁的所有四个必要条件。因此,系统在这种情况下会发生死锁。