1、操作系统教程(第三版) 作者:孙钟秀 部分课后习题答案 第一章 操作系统概论 二、应用题 1、有一台计算机,具有 1MB 内存,操作系统占用 200KB,每个用户占用 200KB。如果用户进程等待 I/O 的时间为 80%, 若增加 1MB 内存, 则 CPU 的利用率提高多少? 解:每个进程等待的百分比率为 p,则 n 个进程同时等待的概率为 pn,当 n 个进程同时等待 I/O 期间 CPU 是空闲的,故 CPU 的利用率是 1-pn除去操作系统占用的内存,剩余内存能容纳 4 个用户进程,由于每个用户进程等待 I/O的时间为 80,故 CPU 的利用率为 1-(80%)4=59% 若再增加
2、 1M 内存,内存就能容纳 9 个用户进程了, CPU 的利用率为 1-(80%)9=87% 利用率提高为 (87%)/(59%)=147% 147 100 47 增加 1M 内存 CPU 利用率 47。 2、设一计算机系统有输入机一台、打印机两台,现有二道程序同时投入运行,且程序 A 先开始运行,程序 B 后运行。 程序 A 的运行轨迹为:计算 50ms,打印信息 100ms,再计算 50ms ,打印信息 100ms ,结束。程序 B 运行的轨迹为:计算 50ms,输入数据 80ms,再计算 100ms,结束。 要求: (1) 用图画出这二道程序并发执行时的工作情况。 (2) 说明在二道程序
3、运行时, CPU 有无空闲等待?若有,在哪段时间内等待?为什么会空闲等待? (3) 程序 A、 B 运行时有无等待现象?在什么时候会发生等待现象? 答: (1)工作情况如图。 (2) CPU有空闲等待,它发生在100ms 150ms时间段内,此时间段内程序A与程序B都在进行I/O操作。 (3) 程序 A 无等待现象,程序 B 在 0ms50ms 时间段与 180ms200ms 时间段内有等待现象。 100 ms50 ms计算100 ms打印50 ms计算打印50 ms 80 ms计算 输入100 ms计算50 ms 等待20 ms等待0 50 100150 180200300ms 程序 A 程
4、序 B 时间 如果将上题的轨迹更改为如下,情况又如何呢?即 一个计算机系统,有一台输入机和一台打印机,现有两道程序投入运行,且程序 A 先开始运行,程序B后开始运行。 程序A的轨迹为:计算50ms、输入80ms、再计算100ms,结束; 程序B的运行轨迹为:计算50ms、打印100ms、再计算50ms、打印100ms,结束。 问题: (1) 画出两道程序运行的时间关系图; (2) 两道程序运行时,CPU有无空闲等待?若有,在哪段时间等待? (3) 程序A、B有无等待CPU的情况?若有,在哪段时间等待? 解答: (1) 两道程序运行的时间关系图: (2) CPU 有空闲等待,它发生在 100ms
5、130ms 时间段内,此时间段内程序 A 与程序 B工作情况的另一种描述形式如下: 程序 A程序 B 输入程序 A 打印计算程序 A 程序 B 打印机 输入设备 50 100150 180200 300 ms 时间 计算 计算 打印输入 计算程序 A 程序 B 程序 BCPU 250 50 计算程序 A 程序 B 打印机 输入设备 100 130 200 230 380 ms 时间 计算 计算 输入 打印计算程序 A程序 B程序 BCPU 280 输入 程序 A打印程序 B 打印 打印都在进行 I/O 操作。 (3) 程序 A 无等待现象,程序 B 在 0ms50ms 时间段与 200ms23
6、0ms 时间段内有等待现象。 3、设三道程序,按照 A、 B、 C 优先次序运行,其内部计算和 I/O 操作时间由图给出。 A B C C11=30ms C21=60ms C31=20ms| | | I12=40ms I22=30ms I32=40ms| | | C13=10ms C23=10ms C33=20ms试画出按多道运行的时间关系图 (忽略调度执行时间 )。完成三道程序共花多少时间?比单道程序节省了多少时间?若处理器调度程序每次运行程序的转换时间花 1ms,试画出各程序状态转换的时间关系图。 解答:完成三道程序抢占式花费时间是 190 ms,非抢占花费时间是 180 ms,单道花费时
7、间是 260 ms,抢占式比单道节省时间为 70 ms。 单道程序运行时间: 260ms A: 30+40+10=80 ms B: 60+30+10=100 ms C: 20+40+20=80 ms 4、在单 CPU 和两台 I/O(I1 和 I2)设备的多道程序设计环境下,同时投入三个作业运行。它们的执行轨迹如下: Job1: I2(30ms)、 CPU(10ms)、 I1(30ms)、 CPU(10ms)、 I2(20ms) Job2: I1(20ms)、 CPU(20ms)、 I2(40ms) Job3: CPU(30ms)、 I1(20ms) 、 CPU(10ms)、 I1(10ms)
8、 如果 CPU、 I1 和 I2 都能并行工作,优先级从高到低为 Job1、 Job2 和 Job3,优先级高的作业可以抢占优先级低的作业的 CPU,但是不抢占 I1 和 I2。试求: (1)每个作业从投入到完成分别需要多少时间。 (2)从投入到完成 CPU 的利用率。 (3) I/O 设备的利用率。 答: (1)JOB1,JOB2,JOB3 从投入到完成分别所需时间为 110, 90, 110。 (2)每个作业从投入到完成 CPU 的利用率是 72.7。 (3)I1 的利用率是 72.7, I2 的利用率是 81.8。 5、在单 CPU 和两台 I/O(I1 和 I2)设备的多道程序设计环境
9、下,同时投入三个作业运行。它们的执行轨迹如下: Job1: I2(30ms)、 CPU(10ms)、 I1(30ms)、 CPU(10ms) Job2: I1(20ms)、 CPU(20ms)、 I2(40ms) Job3: CPU(30ms)、 I1(20ms) 如果 CPU、 I1 和 I2 都能并行工作,优先级从高到低为 Job1、 Job2 和 Job3,优先级高的作业可以抢占优先级低的作业的 CPU,但是不抢占 I1 和 I2。试求: (1)每个作业从投入到完成分别需要多少时间。 (2)从投入到完成 CPU 的利用率。 (3) I/O 设备的利用率。 答: (1)JOB1,JOB2,
10、JOB3 从投入到完成分别所需时间为 80, 90, 90ms。 (2)每个作业从投入到完成 CPU 的利用率是 77.8。 (3)I1 的利用率是 77.8, I2 的利用率是 77.8。 6、若内存中存在 3 道程序 A、 B、 C,它们按照 A、 B、 C 的优先次序运行。各程序的计算轨迹为: A:计算 (20ms)、 I/O(30ms)、计算 (10ms) B:计算 (40ms) 、 I/O(20ms)、计算 (10ms) C:计算 (10ms)、 I/O(30ms)、计算 (20ms) 如果三道程序都使用相同的设备进行 I/O(即程序用串行方式使用设备,调度开销忽略不计 )。试分别画
11、出单道和多道运行的时间关系图。两种情况下, CPU 的平均利用率各为多少? 答:单道:总运行时间是 190ms, CPU 的利用率是 110/190 61.3。 多道:多道的总运行时间 140ms, CPU 的利用率是 110/140 78.6。 7、若内存中存在 3 道程序 A、 B、 C,它们按照 A、 B、 C 的优先次序运行。它们单独运行时的 CPU 和 I/O 占用时间为: 程序 A: 60 20 30 10 40 20 20 (ms) I/O2 CPU I/O1 CPU I/O1 CPU I/O1 程序 B: 30 40 70 30 30 (ms) I/O1 CPU I/O2 CP
12、U I/O2 程序 C: 40 60 30 70(ms) CPU I/O1 CPU I/O2 如果三道程序同时并发执行,调度开销忽 略不计,但是优先级高的程序可以中断优先级低的程序,优先级与 I/O 设备无关。试画出多道运行的时间关系图,并问最早与最迟结束的程序是哪个?每道程序执行到结束分别使用了多少时间?计算三个程序全部运算结束时的 CPU 平均率? 答:最早结束的是 B,最晚的是 C, A 的运行时间是 250ms, B 的运行时间是 220ms, C 的运行时间是 310ms, CPU 的利用率是 190/310 61.3。 8、若两个程序, A 程序按顺序使用: (CPU)10s, (
13、设备甲 )5s, (CPU)10s, (设备乙 )10s,(CPU)10s。 B 程序按顺序使用: (设备甲 )10s, (CPU)10s, (设备乙 )5s, (CPU)5s, (设备乙 )10s。在顺序环境下先执行 A,在执行 B,求出总的 CPU 利用率为多少? 答:程序 A 的执行了 40 秒,其中 CPU 使用了 25 秒, B 程序执行 40 秒,其中 CPU 使用了 15 秒,而程序共使用了 80 秒, CPU 花 40 秒, CPU 的利用率是 40/80=50%。 9、在某计算机系统中,时钟中断处理程序每次执行时间为 2ms(包括进程切换开销 )。若中断频率为 60Hz,试问
14、 CPU 用于时钟中断处理的时间比率为多少? 答:因为时钟中断频率是 60HZ,时钟周期是 1000ms/60 50/3(ms) 在每一个时钟周期里, CPU 花 2ms 处理执行任务,所以 CPU 用于时钟中断的时间比例是 2/(50/3)=6/50=12%。 第二章 处理机管理 二、应用题 1、下列指令中,哪些只能在核心态运行? (1)读时钟日期; (2)访管指令; (3)设时钟日期; (4)加载 PSW; (5)置特殊寄存器; (6)改变存储器映象图; (7)启动 I/O 指令。 答:可以在核心态下运行的是: (3)设时钟日期; (4)加载 PSW; (5)置特殊寄存器; (6)改变存储
15、器映象图; (7)启动 I/O 指令。 2、假设有一种低级调度算法 是让“最近使用处理器较少 的进程”运行,试解释这种算法对“ I/O 繁重”型作业有利,但并不是永远不受理“处理器繁重”型作业。 答:因为 I/O 繁忙作业忙于 I/O,所以使用 CPU 较少,按照调度策略算法优先执行。一个进程等待 CPU 时间够长,是最近最少使用 CPU 进程,被优先调度。 3、并发进程之间有什么样的相互制约关系?下 列日常生活中的活动属于哪种制约关系? (1)踢足球; (2)吃自助餐; (3)图书馆借书; (4)电视机生产流水线工序 答:并发进程之间的相互制约关系有:互斥和同步。 属于互斥关系的有: (1)
16、踢足球; (3)图书馆借书; 属于同步关系的有: (2)吃自助餐; (4)电视机生产流水线工序 5、若后备作业队列中等待运行的同时有三个作业 J1、 J2 和 J3,已知它们各自的运行为a、 b、 c,且满足 a0 可见,采用短作业优先算法调度能获得最小平均周转时间时间。 7、假定执行表中作业队列,作业号为到达顺序,依次在时刻 0 按次序 1、 2、 3、 4、 5进入单处理器系统。 (1) 分别用先来先服务调度算法、时间片轮转调度算法、短作业优先调度算法以及非抢占优先权调 度算法算出各作业的执行先后次序 (注意优先权高的数值小 ); (2) 计算各种情况下作业的平均作业周转时间和平均作业带权
17、周转时间。 作业号 执行时间 优先权 1 10 3 2 1 1 3 2 3 4 1 4 5 5 2 解答: FCFS 作业 执行时间 等待时间 开始时间 完成时间 周转时间 带权周转时间1 10 0 0 10 10 1 2 1 10 10 11 11 11 3 2 11 11 13 13 6.5 4 1 13 13 14 14 14 5 5 14 14 19 19 3.8 T=13.4 W=7.26 时间片轮转,时长为 q=1 作业 执行时间 提交时间 完成时间 周转时间 带权周转时间 1 10 0 19 19 1.9 2 1 0 2 2 2 3 2 0 7 7 3.5 4 1 0 4 4 4
18、 5 5 0 14 14 2.8 T=9.2 W=2.84 SJF 次序 执行时间 等待时间 开始时间 完成时间 周转时间 带权周转时间2 1 0 0 1 1 1 4 1 1 1 2 2 2 3 2 2 2 4 4 2 5 5 4 4 9 9 1.8 1 10 9 9 19 19 1.9 T=7 W=1.74 非强占优先权调度 次序 执行时间 等待时间 开始时间 完成时间 周转时间 带权周转时间2 1 0 0 1 1 1 5 5 1 1 6 6 1.2 3 2 6 6 8 8 4 1 10 8 8 18 18 1.8 4 1 18 18 19 19 19 T=10.4 W=5.4 10、有 5
19、 个批处理作业 A 到 E 均已到达计算中心,其运行时间分别为: 2、 4、 6、 8 和10 分钟;各自的优先级分别被 规定为 1、 2、 3、 4 和 5,这里 5 为最高级。对于 1)时间片轮转算法、 2)优先数算法、 3)短作业优先算法、 4)先来先服务调度算法 (按到达次序 C、 D、 B、 E、 A),在忽略进程切换时间的前提 下,计算出平均作业周转时间。 (对 1)每个作业获得相同的 2 分钟的时间片; 对 2)到 4)采用单道运行, 直到结束。 ) 解答: FCFS 作业 执行时间 等待时间 周转时间 带权周转时间 C 6 0 6 1 D 8 6 14 1.75 B 4 14
20、18 4.5 E 10 18 28 2.8 A 2 28 30 15 T=19.2 W=5.01 时间片轮转,时长为 q=2 作业 执行时间 等待时间 周转时间 带权周转时间A 2 0 2 1 B 4 8 12 3 C 6 14 20 3.33 D 8 18 26 3.25 E 10 20 30 3 T=14 W=2 SJF 次序 执行时间 等待时间 周转时间 带权周转时间 A 2 0 2 1 B 4 2 6 1.5 C 6 6 12 2 D 8 12 20 2.5 E 10 20 30 3 T=14 W=2 优先权调度 次序 执行时间 等待时间 周转时间 带权周转时间 E 10 0 10 1
21、 D 8 10 18 2.25 C 6 18 24 4 B 4 24 28 7 A 2 28 30 15 T=22 W=5.85 11、有 5 个批处理作业 A 到 E 均已到达计算中心,其运行时间分别为: 10、 6、 2、 4、和 8 分钟;各自的优先级分别被 规定为 3、 5、 2、 1 和 4,这里 5 为最高级。若不考虑系统切换开销,计算出平均作业周转时间。 (1)FCFS(按 A、 B、 C、 D、 E); (2)优先级调度算法; (3)时间片轮转算法。 解答: FCFS 作业 执行时间 等待时间 周转时间 带权周转时间 A 10 0 10 1 B 6 10 16 2.66 C 2
22、 16 18 9 D 4 18 22 5.5 E 8 22 30 3.75 T=19.2 W=4.38 时间片轮转,时长为 q=2 作业 执行时间 等待时间 周转时间 带权周转时间A 10 20 30 3 B 6 16 22 3.66 C 2 4 6 3 D 4 12 16 4 E 8 20 28 3.5 T=20.4 W=3.43 优先权调度 次序 执行时间 等待时间 周转时间 带权周转时间 B 6 0 6 1 E 8 6 14 1.75 A 10 14 24 2.4 C 2 24 26 13 D 4 26 30 7.5 T=20 W=5.13 15、单道批处理系统中,下列三个作业采用先来先
23、服务调度算法和最高响应比算法进行调度,哪一种算法性能较好?请完成下表: 作业 提交时间 运行时间 开始时间 完成时间 周转时间 带权周转时间1 10:00 2:00 2 10:10 1:00 3 10:25 0:25 平均作业周转时间 T= 平均作业带权周转时间 W= 解答:比较可得 HRRF 优于 FCFS 算法。 FCFS 作业 提交时间 运行时间 开始时间 完成时间 周转时间 带权周转时间1 10:00 2:00 10:00 12:00 2 120/120 2 10:10 1:00 12:00 13:00 2:50 170/60 3 10:25 0:25 13:00 13:25 3 18
24、0/25 T=2.61 W=3.68 HRRF 作业 提交时间 运行时间 开始时间 完成时间 周转时间 带权周转时间1 10:00 2:00 10:00 12:00 2 120/120 2 10:10 1:00 12:25 13:25 3:15 195/60 3 10:25 0:25 12:00 12:25 2 120/25 T=2.41 W=3.02 16、若有如表所示四个作业进入系统,分别计算在 FCFS、 SJF 和 HRRF 算法下的平均周转时间与带权平均周转时间。 (时间以十进制表示 ) 作业 提交时间 估计运行时间 (小时 ) 1 8.00 2.00 2 8.50 0.50 3 9
25、.00 0.10 4 9 .50 0.20 解答: FCFS 作业 提交时间 运行时间 开始时间 完成时间 周转时间 带权周转时间1 8.00 2.00 8.00 10.00 2.00 1 2 8.50 0.50 10.00 10.50 2.00 4 3 9.00 0.10 10.50 10.60 1.60 16 4 9 .50 0.20 10.60 10.80 1.30 6.5 T=1.725 W=6.875 SJF 作业 提交时间 运行时间 开始时间 完成时间 周转时间 带权周转时间1 8.00 2.00 8.00 10.00 2 1 2 8.50 0.50 10.30 10.80 2.3
26、0 4.6 3 9.00 0.10 10.00 10.10 1.10 11 4 9 .50 0.20 10.10 10.30 0.80 4 T=1.55 W=5.15 HRRF 作业 提交时间 运行时间 开始时间 完成时间 周转时间 带权周转时间1 8.00 2.00 8.00 10.00 2 1 2 8.50 0.50 10.10 10.60 2.10 4.2 3 9.00 0.10 10.00 10.10 1.10 11 4 9 .50 0.20 10.60 10.80 1.30 6.5 T=1.625 W=5.675 18、若有一个四道作业系统,如果在一段时间内先后有 6 个作业,它们提
27、交和运行时间由下表给出 (时间单位为分钟 )。系统采用短作业优先 (SJF)调度算法,作业被调度进入系统后中途不会退出,但是作业会被更短的作业抢占。问题: (1) 画图给出 6 个作业的执行时间序列; (2) 完成各个作业的开始时间、完成时间、周转时间和带权周转时间。 (3) 计算平均作业周转时间和平均作业带权周转时间。 作业序号 提交时间 运行时间 开始时间 完成时间 周转时间 带权周转时间1 8:00 60 2 8:20 35 3 8:25 20 4 8:30 25 5 8:35 5 6 8:40 10 解答: 由下表可知 作业序号 提交时间 运行时间 开始时间 完成时间 周转时间 带权周
28、转时间 1 8:00 60 8:00 10:35 155 155/60=2.58 2 8:20 35 8:20 9:55 95 95/25=3.8 3 8:25 20 8:25 8:45 20 20/20=1 4 8:30 25 9:00 9:25 55 55/25=2.2 5 8:35 5 8:45 8:50 15 15/5=3 6 8:40 10 8:50 9:00 20 20/10=2 1 作业开始于 8:00,结束于 10:35,周转 155 分钟。 2 作业开始于 8:20,结束于 9:55,周转 95 分钟。 3 作业开始于 8:25,结束于 8:45,周转 20 分钟。 4 作业
29、开始于 9:00,结束于 9:25,周转 55 分钟。 5 作业开始于 8:45,结束于 8:55,周转 15 分钟。 6 作业开始于 8:50,结束于 9:00,周转 20 分钟。 所以平均作业周转时间是 (155+20+95+55+15+20)/6 60 平均作业带权周转时间是 (2.58+3.8+1+2.2+3+2)/6=2.43 19、有一个具有两道作业的批处理系统,作业调度采用短作业优先的调度算法,进程调度采用以优先数为基础的抢占式调度算法,在下表所示的作业序列,作业优先数即为进程优先数,优先数越小优先级越高。 作业名 提交时间 估计运行时间 优先数 A 10:00 40 分 5 B
30、 10:20 30 分 3 C 10:30 50 分 4 D 10:50 20 分 6 (1) 列出所有作业进入内村时间及结束时间。 (2) 计算平均周转时间。 解答:每个作业运行将经过两个阶段:作业调度 (短作业优先 SJF)和进程调度 (优先数抢占式 )。另外,批处理系统最多容纳 2 道作业,更多的作业将在后备对列等待。 (1) 10:00 作业 A 到达并投入运行; (2) 10:20 作业 B 到达,且优先数高于作业 A,故作业 B 投入运行,而作业 A 在就绪队列等待; (3) 10:30 作业 C 到达,但是内存中已有两道作业,故作业 C 进入作业后备队列等待; (4) 10:50
31、 作业 B 运行结束,作业 D 到达,按照短作业优先算法,作业 D 被装入内存,进入就绪队列,而由于作业 A 的优先级高于作业 D,作业 A 投入运行; (5) 11:10 作业 A 运行结束,作业 C 被调入内存,且作业 C 的优先级高于作业 D,作业 C投入运行; (6) 12:00 作业 C 运行结束,作业 D 投入运行; (7) 12:20 作业 D 运行结束; 如图所示 (2)从图中可以看出 作业名 提交时间 估计运行时间 进入内存时间 运行结束时间 A 10:00 40 分 10:00 11:10 B 10:20 30 分 10:20 10:50 C 10:30 50 分 11:1
32、0 12:00 D 10:50 20 分 10:50 12:20 作业 A 的周转时间是 70,作业 B 的周转时间是 30,作业 C 的周转时间是 90,作业 D的周转时间是 20 70=90,所以平均周转时间是 (70+30+90+90)/4 70。 作业 B 运行结束,作业 D 到达,按照短作业优先算法,作业 D 被装入内存,进入就绪队列,而由于作业 A 的优先级高于作业 D, 作业 A 投入运行 作业 A 运行结束,作业 C 被调入内存,且作业C 的优先级高于作业 D,作业 C 投入运行 24、一个实时系统有 4 个周期性事件,周期分别为 50、 100、 300 和 250ms,若假
33、设其处理分别需要 35、 20、 10 和 ms,则该系统可调度允许的最大值为多少 ms。 答: x 应该满足条件 35/50+20/100+10/300+x/250 1,则 x 50/3=16.75ms, x 的最大值是 16.75ms. 类比: (1) 一个实时系统有 4 个周期性事件,周期分别为 50、 100、 250 和 200ms,若假设其处理分别需要 30、 20、 25 和 ms,则该系统可调度允许的最大值为多少 ms。 答: x 应该满足条件 30/50+20/100+25/250+x/200 1,则 x 20ms, x 的最大值是 20ms. (2) 设有周期性实时任务集如
34、下表所示,是否可以调度? 任务 发生周期 Ti 处理时间 Ci A 30 10 B 40 15 C 50 5 答:由于 ,因而可以调度 。 第三章 并发进程 二、应用题 4、有一阅览室,共有 100 个座位。读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名。读者离开时要消掉登记内容。试用 P、 V 操作描述读者进程的同步结构。 第一步:确定进程 可以进入阅览室的读者可以有很多,这里设为 n,即 n 个 Reader(读者)进程 Reader 进程: 登记 进入阅览室 读书 离开阅览室 注销 第二步:确定进程的同步、互斥关系 同步:当教室内有空座位时,读者才可以登记
35、,并进入阅览室 互斥:同时只能有一个读者在入口处进行登记 互斥:同时只能有一个读者在出口处进行注销 第三步:设置信号量 教室内空座位数量, seat,初值 100 为入口处进行登记设置互斥信号量 Sin,初值 1,表示当前可用 为出口处进行注销设置互斥信号量 Sout,初值 1,表示当前可用 第四步:用伪代码描述 begin Sin, Sout, seat: semaphore; seat :=100; Sin := 1; Sout := 1; cobegin process Reader-i ( i = 1,2,n ); begin P(seat); P(Sin); 登记 ; V(Sin);
36、 进入阅览室 ; 读书 ; 离开阅览室 ; P(Sout); 注销 ; V(Sout); V( seat) ; end coend; end; 7、设公共汽车上,司机的活 动顺序是:启动车辆、正常 行车、到站停车;售票员的活动顺序是:关车门、售票、开车门。现假设初始状态为:司机和售票员都已经在车上,汽车处于停止状态,车门处于开的状态。在汽车不断地到站、停车、行驶过程中,请用信号量的 PV 操作实现司机与售票员之间的同步关系。 参考答案: 第一步:确定进程 2 个进程 Driver(司机) 、 Busman(售票员) Driver 进程: 启动车辆 正常行车 到站停车 Busman 进程: 关车
37、门 售票 开车门 第二步:确定进程的同步、互斥关系 同步:当售票员将车门关上后,司机才可以启动车辆 同步:当司机到站停车后,售票员打开车门 第三步:设置信号量 车门关上, close,初值 0 到站停车, stop,初值 0 第四步:用伪代码描述 begin close, stop: semaphore; close := 0; stop := 0; cobegin Driver ( ); Busman ( ); coend; end; process Driver ( ) begin L1: P( close) ; 启动车辆; 正常行始; 到站停车; V( stop) ; goto L1 e
38、nd; process Busman ( ) begin L2: 关车门; V( close) ; 售票; P( stop) ; 开车门; goto L2 end; 19、设有三个进程 A、 B、 C,其中 A 与 B 构成一对生产者与消费者( A 为生产者, B为消费者) ,共享一个由 n 个缓冲块组成的缓冲池; B 与 C 也构成一对生产者与消费者(此时 B 为生产者, C 为消费者) ,共享另一个由 m 个缓冲块组成的缓冲池。用 P、 V操作描述它们之间的同步关系。 答: var mutexA,emptyA,fullA,mutexC,emptyC,fullC : semaphere; i
39、,j,a,b : integer; bufferA : array 0n-1 of item bufferC : array 0m-1 of item; procedure produceA: 生产者进程 A begin while ture do begin Produce next product; P(emptyA); P(mutexA); bufferA(i) :=products; i:=(i+1) mod(n) ; V(mutexA); V(fullA) end end procedure consumer_procedurerB: 消费者和生产者进程 B begin while
40、ture do begin P(fullA); P(mutexA); Goods:=buffer(j); j:=(j+1)mod(n); V(mutexA); V(emptyA); Consume goods and Produce next product C; P(emptyC); P(mutexC); BufferC(a):=product C; a:=(a+1) mod(m); V(mutexC); V(fullC) end end; procedure consumerC ; 消费者 C 进程 begin while ture do begin P(fullC); P(mutexC)
41、; Goods:=bufferC(b); b:=(b+1) mod(m); V(mutexC); V(emptyC); Consume product; end end; begin Seminitsal(mutexA.v,1;mutexC.v,1; emptyA.v,n;emptyC.v,m;fullA.V,0;fullC.V,0); i:=0;j:=0;a:=0;b:=0; cobegin produce A consumer_procedurerB; consumerC coend end. 26、设当前的系统状态如下表所示,系统此时 Available=(1,1,2)。 Claim A
42、llocation 进程 R1 R2 R3 R1 R2 R3 P1 3 2 2 1 0 0 P2 6 1 3 5 1 1 P3 3 1 4 2 1 1 P4 4 2 2 0 0 2 问题: (1) 计算各个进程还需要的资源数 Cki-Aki; (2) 此时系统是否处于安全状态,为什么?如果安全,则请给出一个安全序列; (3) 当 P2 发出资源请求向量 request2(1,0,1),此时系统能否把资源分配给它?为什么?如果能分配给它,则请给出一个安全序列; (4) 若在 P2 发出资源请求向量 request2(1,0,1)后,若 P1 发出资源请求向量request1(1,0,1),此时系
43、统能否把资源分配给它?为什么? (5) 若在 P1 发出资源请求向量 request1(1,0,1)后,若 P3 发出资源请求向量request3(0,0,1),此时系统能否把资源分配给它?为什么? 解答: (1) 各个进程还需要的资源数 Cki-Aki Cki-Aki 进程 R1 R2 R3 P1 2 2 2 P2 1 2 2 P3 1 0 3 P4 4 2 0 (2) 此时系统是否处于安全状态,安全序列为: P2, P1, P3, P4。 (3) 当 P2 发出资源请求向量 request2(1,0,1),此时系统可以把资源分配给它,因为系统是安全的,相应的安全序列为: P2, P1, P
44、3, P4。 (4) 若在 P2发出资源请求向量 request2(1,0,1)后, 若 P1发出资源请求向量 request1(1,0,1),此时系统不能把资源分配给它,因为此时系统资源不足。 (5) 若在 P1发出资源请求向量 request1(1,0,1)后, 若 P3发出资源请求向量 request3(0,0,1),此时系统不能把资源分配给它,因为如果分配,系统不安全,会导致死锁。 27、设系统中 A、 B、 C、 D 共 4 种资源,在某时刻进程 P0、 P1、 P2、 P3、 P4 对资源的占有和需求情况如下表所示。问题: (1) 计算各个进程还需要的资源数 Cki-Aki; (2
45、) 此时系统是否处于安全状态,为什么?如果安全,则请给出一个安全序列; (3) 若在 P0 发出资源请求向量 request0(0,0,1,1)后, 此时系统把资源分配给它是否安全?如果安全,则请给出一个安全序列; (4) 当 P2 发出资源请求向量 request2(1,2,2,2), 此时系统能否把资源分配给它?为什么? (5) 若在 P0 发出资源请求向量 request0(0,0,1,1)后, P4 若发出资源请求向量request4(0,6,2,2),此时系统能否把资源分配给它?为什么? Allocation Claim Available 进程 A B C D A B C D A
46、B C D P0 0 0 3 2 0 0 4 4 P1 1 0 0 0 2 7 5 0 P2 1 3 5 4 3 6 10 10 P3 0 3 3 2 0 9 8 4 P4 0 0 1 4 0 6 6 10 1 6 2 2 解答: (1) 各个进程还需要的资源数 Cki-Aki Cki-Aki 进程 A B C D P1 0 0 1 2 P2 1 7 5 0 P3 2 3 5 6 P4 0 6 5 2 P5 0 6 5 6 (2) 此时系统是否处于安全状态,安全序列为: P0, P3, P4, P1, P2。 (3) 若在 P0 发出资源请求向量 request0(0,0,1,1)后,此时系统
47、把资源分配给它是安全的,安全序列为: P0, P3, P4, P1, P2。 (4) 当 P2 发出资源请求向量 request2(1,2,2,2),此时系统不能把资源分配给它,因为系统将处于不安全状态,会导致死锁。 (5) 若在 P0 发出资源请求向量 request0(0,0,1,1)后, P4 若发出资源请求向量request4(0,6,2,2),此时系统不能把资源分配给它,因为此时系统资源不足。 28、把死锁检测算法用于下面的数据,并请问: Available =(1, 0, 2, 0) =01120100001321100011Need =00001011011100101103Al
48、location (1) 此时系统处于安全状态吗? (2) 若第二个进程提出资源请求 request2(0,0,1,0),系统能分配资源给它吗? (3) 执行 (2)之后, 若第五个进程提出资源请求 request5(0,0,1,0), 系统能分配资源给它吗? 解: (1)可以找到安全序列, P4,P1,P5,P2,P3。 (2)可以,安全序列是 P1,P4,P5,P2,P3。 (3)不可以,处于不安全状态。 38、桌上有一个空盘子,最多容纳两个水果,每次仅能放入或取出一个水果。爸爸向盘中放苹果,妈妈向盘中放桔子,规定两个儿子专等吃盘中的桔子,两个女儿专等吃盘中的苹果。请用信号量实现爸爸、妈妈
49、、儿子、女儿之间的同步。 第一步:确定进程 4 个进程 Father(爸爸) 、 Mother(妈妈) 、 Son(儿子) 、 Daughter(女儿) Father 进程: 将苹果放入盘中 Mother 进程: 将桔子放入盘中 Son 进程: 从盘中取出桔子 吃桔子 Daughter 进程: 从盘中取出苹果 吃苹果 第二步:确定进程的同步、互斥关系 同步: Father 当盘中无水果时,才可以将苹果放入盘中 同步: Mother 当盘中无水果时,才可以将桔子放入盘中 同步: Son 当盘中有桔子时,才可以从盘中取出桔子 同步: Daughter 当盘中有苹果时,才可以从盘中取出苹果 第三步:设置信号量 盘中无水果, Sp,初值 2; 盘中有桔子, So,初值 0; 盘中有苹果, Sa,初值 0; flag0 = flag1 = false; mutex = 1; plate ARRAY0, 1 of ( apple, orange) 第四步:用伪代码描述 begin Sp,So,Sa: semaphore; Sp :=1; S