二综合应用题1. 假定某多道程序设计系统供用户使用的主存空间为100KB,磁带机2台,打印机1台。采用可变分区方式管理主存,采用静态分配方式分配磁带机和打印机,忽略用户作业I/O时间。现有如下作业序列,见表2-8。
表2-8 作业序列 作业号 | 进入输入井时间 | 要求计算时间 | 主存需求量 | 磁带机需求 | 打印机需求 | 1 | 8:00 | 25min | 15KB | 1 | 1 | 2 | 8:20 | 10min | 30KB | 0 | 1 | 3 | 8:20 | 20min | 60KB | 1 | 0 | 4 | 8:30 | 20min | 20KB | 1 | 0 | 5 | 8:35 | 15min | 10KB | 1 | 1 | |
采用先来先服务作业调度,优先分配主存的低地址区域且不准移动已在主存的作业,在主存中的各作业平分CPU时间,问题如下:
1)作业调度选中各作业的次序是什么?
2)全部作业运行结束的时刻是什么?
3)如果把一个作业从进入输入井到运行结束的时间定义为周转时间,在忽略系统开销时间条件下,最大的作业周转时间是多少?
4)平均周转时间是多少?
各个作业执行的时间如下图所示(灰色部分代表程序在执行):

注:深黑色表示作业独占CPU时间,浅灰色表示作业平分CPU时间,白色表示CPU空闲。
在8:00,作业1到达,由于CPU空闲、内存空间充足且磁带机和打印机都空闲,作业1开始执行;在8:20,作业2和作业3到达,由于只有一台磁带机空闲,作业2无法执行,只能执行作业3,注意此时作业1和作业3平分CPU时间;在8:30,作业1执行完毕,作业4到达,由于此时内存情况无法满足作业2的需求,作业4开始执行;在8:35时刻,磁带机无法满足作业5,作业5无法执行;到9:00时刻,作业3完成,由于作业2先到达,系统先将资源分配给作业2,之后无法满足作业5需求,作业5无法执行;到9:10,作业4完成,但资源仍无法满足作业5;到9:15,作业2完成,系统将资源分配给作业5,作业5开始执行,到9:30,作业5完成。根据以上分析知:
1)作业调度顺序为:1,3,4,2,5。
2)全部作业运行结束的时刻为9:30。
3)最大作业周转时间为55min。
平均周转时间为:(30+55+40+40+55)/5=44。
2. 有一个CPU和两台外设D1、D2,且能够实现抢占式优先级调度算法的多道程序环境中,同时进入优先级由高到低的P1、P2、P3三个作业,每个作业的处理顺序和使用资源的时间如下:
P1:D2(30ms),CPU(10ms),D1(30ms),CPU(10ms)
P2:D1(20ms),CPU(20ms),D2(40ms)
P3:CPU(30ms),D1(20ms)
假设对于其他辅助操作时间忽略不计,每个作业的周转时间T1、T2、T3分别为多少?CPU和D1的利用率各是多少?
抢占式优先级调度算法,三个作业执行的顺序如下图所示。

作业P1的优先级最高,所以周转时间等于运行时间,T1=80ms;作业P2等待时间为10ms,运行时间为80ms,故周转时间T2=(10+80)ms=90ms;作业P3的等待时间为40ms,运行时间为50ms,故周转时间T3=90ms。
三个作业从进入系统到全部运行结束,时间为90ms。CPU与外设都是独占设备,运行时间分别为各作业的使用时间之和:CPU运行时间为[(10+10)+20+30]ms=70ms,D1为(30+20+20)ms=70ms,D2为(30+40)ms=70ms。故利用率均为70/90=77.8%。
假设一个计算机系统具有如下性能特征:处理一次中断平均需要500μs,一次进程调度平均需要花费1ms,进程的切换平均需要花费2ms。若该计算机系统的定时器每秒发出120次时钟中断,忽略其他I/O中断的影响,那么请问:3. 操作系统将百分之几的CPu时间分配给时钟中断处理程序?
每秒产生120个时钟中断,每次中断的时间为
1/120≈8.3(ms)
其中,中断处理耗时为500μs,那么其开销为
500μs/8.3ms=6%
4. 如果系统采用时间片轮转调度算法,24个时钟中断为一个时间片,操作系统每进行一次进程的切换,需要花费百分之几的CPU时间?
24个时钟为一个时间片,那么每24次时钟中断会产生24次中断处理、1次调度、1次切换。所以,每引起一次进程切换需要耗时
24×500μs+1ms+2ms=15ms
每24次中断共消耗时间
24×8.3ms=200ms
CPU的系统开销
15ms/200ms=7.5%
5. 根据上述结果,请说明,为了提高CPU的使用效率,可以采用什么对策?
为了提高CPU的效率,一般情况下尽量减少时钟中断的次数,如由每秒120次降低到100次,以延长中断的时间间隔。或者将每个时间片的中断数量加大,如由24个中断加大到36个。也可以优化中断处理程序,减少中断处理开销,如将每次500μs的时间降低到400μs。若能这样,则每一次进程切换的CPU开销为
(36×400μs+1ms+2ms)/(1/100×36)≈4.8%
6. 下面是两个并发执行的进程,它们能正确运行吗?若不能请举例说明,并改正。

P1和P2两个并发进程的执行结果是不确定的,它们都对同一变量X进程操作,X是一个临界资源,而没有进行保护。例如:
1)若先执行完P1再执行P2,结果是x=0,y=1,z=1,t=2,u=2。
2)若先执行P1到“x=1”,然后一个中断去执行完P2,再一个中断回来执行完P1,结果是x=0,y=0,z=0,t=2,u=2。
显然两次执行结果不同,所以这两个并发进程不能正确运行。可以将这个程序改为:

设某计算机系统有一个CPU、一台输入设备、一台打印机。现有两个进程同时进入就绪状态,且进程A先得到CPU运行,进程B后运行。进程A的运行轨迹为:计算50ms,打印信息100ms,再计算50ms,打印信息100ms,结束。进程B的运行轨迹为:计算50ms,输入数据80ms,再计算100ms,结束。试画出它们的甘特图((Gantt Chart),并说明:7. 开始运行后,CPU有无空闲等待?若有,在哪段时间内等待?计算CPU的利用率。
有,在100~150ms等待,利用率=[300-(150-100)]/300×100%=83.3%
8. 进程A运行时有无等待现象?若有,在什么时候发生等待现象?
9. 进程B运行时有无等待现象?若有,在什么时候发生等待现象?
有,在0~50ms、180~200ms时发生等待现象。
10. 在南开大学至天津大学间有一条弯曲的路,每次只允许一辆自行车通过,但中间有小的安全岛M(同时允许两辆车),可供两辆车在已进入两端小车错车,如图2-13所示。设计算法并使用P、V操作实现。

由于安全岛M仅仅允许两辆车停留,本应该作为临界资源而要设置信号量,但根据题意,任意时刻进入安全岛的车不会超过两辆(两个方向最多各有一辆),因此,不需要为M设置信号量,在路口T和路口N都需要设置信号量,以控制来自两个方向的车对路口资源的争夺。这两个信号量的初值都是1。此外,由于从S到T的一段路只允许一辆车通过,所以还需要设置另外的信号量用于控制,由于M的存在,可以为两端的小路分别设置一个互斥信号量。

有以下的进程需要调度执行,见表2-10。 表2-10 进程 进程名 | 到达时间 | 运行时间 | P1 | 0.0 | 9 | P2 | 0.4 | 4 | P3 | 1.0 | 1 | P4 | 5.5 | 4 | P5 | 7 | 2 | |
11. 如果用非抢占式短进程优先调度算法,请问这5个进程的平均周转时间和平均响应时间各是多少?
非抢占式平均响应时间见下表:
进程名 |
到达时间 |
运行时间 |
丌始时间 |
结束时间 |
周转时间 |
P1 |
0.0 |
9 |
0.0 |
9.0 |
9 |
P2 |
0.4 |
4 |
12.0 |
16.0 |
15.6 |
P3 |
1.0 |
1 |
9.0 |
10.0 |
9 |
P4 |
5.5 |
4 |
16.0 |
20.0 |
14.5 |
P5 |
7 |
2 |
10.0 |
12.0 |
5 |
平均周转时间为:(9+15.6+9+14.5+5)/5=10.62。
12. 如果采用抢占式短进程优先调度算法,请问这5个进程的平均周转时间和平均响应时间各是多少?
抢占式平均响应时间见下表:
进程名 |
到达时间 |
运行时间 |
开始时问 |
结束时间 |
周转时间 |
P1 |
0.0 |
9 |
0.0 |
20.0 |
20 |
P2 |
0.4 |
4 |
0.4 |
5.4 |
5 |
P3 |
1.0 |
1 |
1.0 |
2.0 |
1 |
P4 |
5.5 |
4 |
5.5 |
11.5 |
6 |
P5 |
7 |
2 |
7.0 |
9.0 |
2 |
平均周转时间为:(20+5+1+6+2)/5=6.8。
13. 采用非抢占式短进程优先调度算法,存在平均周转时间较大的问题,为了降低平均周转时间,有这样的一种解决方案:依旧采用非抢占式短进程优先调度算法,但当就绪队列中只有一个进程等待运行时,不马上运行这个进程,而是让这个进程等待1个单位的时间,然后再选择一个运行时间短的进程投入运行。请问采用这种方法5个进程的平均周转时间和平均响应时间各是多少?
采用标题所述方法时,平均响应时间见下表:
进程名 |
到达时间 |
运行时间 |
开始时间 |
结束时间 |
周转时间 |
P1 |
0.0 |
9 |
0.0 |
20.0 |
20 |
P2 |
0.4 |
4 |
2.4 |
6.4 |
6 |
P3 |
1.0 |
1 |
1.4 |
24 |
1.4 |
P4 |
5.5 |
4 |
6.4 |
12.4 |
6.9 |
P5 |
7 |
2 |
7.4 |
9.4 |
2.4 |
平均周转时间为:(20+6+1.4+6.9+2.4)/5=7.34。
14. 有一个具有两道作业的批处理系统,作业调度采用短作业优先调度算法,进程调度采用抢占式优先级调度算法。作业的运行情况见表2-9,其中作业的优先数即为进程的优先数,优先数越小,优先级越高。
表2-9 作业运行情况 作业名 | 到达时间 | 运行时间 | 优先数 | 1 | 8:00 | 40分钟 | 5 | 2 | 8:20 | 30分钟 | 3 | 3 | 8:30 | 50分钟 | 4 | 4 | 8:50 | 20分钟 | 6 | |
问:
1)列出所有作业进入内存的时间及结束的时间(以分钟为单位);
2)计算平均周转时间。
1)所有作业进入内存的时间及结束的时间见下表。
作业 |
到达时间 |
运行时间 |
优先数 |
进入内存时间 |
结束时间 |
周转时间 |
1 |
8:00 |
40min |
5 |
8:00 |
9:10 |
70min |
2 |
8:20 |
30min |
3 |
8:20 |
8:50 |
30min |
3 |
8:30 |
50min |
4 |
9:10 |
10:00 |
90min |
4 |
8:50 |
20min |
6 |
8:50 |
10:20 |
90min |
2)平均周转时间为:(70+30+90+90)/4=70(min)。
15. 银行有n个柜员,每个顾客进入银行后先取一个号,并且等着叫号,当一个柜员空闲后,就叫下一个号。试用信号量方法PV操作实现此过程,并给出信号量定义和初始值。
将顾客号码排成一个队列,顾客进入银行领取号码后,将号码由队尾插入。柜员空闲时,从队首取得顾客号码,并且为这个顾客服务,由于队列为若干进程共享,所以需要互斥。柜员空闲时,若有顾客,就叫下一个顾客并为之服务。因此,需要设置一个信号量来记录等待服务的顾客数。

某分时系统中的进程可能出现如图所示的状态变化,请回答下列问题:

16. 根据图,该系统应采用什么进程调度策略?
根据题意,该系统采用的是时间片轮转法调度进程策略。
[解析] 根据题意,首先由图2-3分析,进程由运行状态可以直接回到就绪队列的末尾,而且,就绪队列中是先来先服务。那么,什么情况才能发生这样的变化呢?只有采用单一的时间片轮转的调度系统,当分配的时间片用完时,才会发生上述情况。所以,该系统一定是采用的时间片轮转调度算法,采用时间片轮转算法的操作系统一般均为交互式操作系统。在图2-3中可以知道,当进程阻塞时,分别可以进入不同的阻塞队列,等待打印机输出结果和等待磁盘读取文件。所以,它是一个多阻塞队列的时间片轮转法的调度系统。
17. 把图中的每一个状态变化可能的原因填在表2-2中。
可能的变化见下表:
变化 |
原因 |
1 |
进程被凋度,获得CPU,进入运行状态 |
2 |
进程需要读文件,因I/O操作进入阻塞 |
3 |
进程打印输出结果,因打印机未结束放阻塞 |
4 |
打印机打印结束,进程重新回归就绪状态,并排在尾部 |
5 |
进程所需数据已经从磁盘进入内存,进程回到就绪状态 |
6 |
运行的进程因为时间片用完而让出CPU,排到就绪队列尾部 |
18. 三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用produce()生成一个正整数并用put()送入缓冲区某一空单元中;P2每次用getodd()从该缓冲区中取出一个奇数并用countodd()统计奇数个数;P3每次用geteven()从该缓冲区中取出一个偶数并用counteven()统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义(要求用伪代码描述)。
定义信号量S1控制P1与P2之间的同步:S2控制P1与P3之间的同步;empty控制生产者与消费者之间的同步;mutex控制进程间互斥使用缓冲区。程序如下:

考虑某个系统在表2-25时刻的状态。 表2-25 系统资源状态表 | Allocation | Mac | Available | A | B | C | D | A | B | C | D | A | B | C | D | P0 | 0 | 0 | 1 | 2 | 0 | 0 | 1 | 2 | 1 | 5 | 2 | 0 | P1 | 1 | 0 | 0 | 0 | 1 | 7 | 5 | 0 | P2 | 1 | 3 | 5 | 4 | 2 | 3 | 5 | 6 | P3 | 0 | 0 | 1 | 4 | 0 | 6 | 5 | 6 | |
使用银行家算法回答下面的问题:20. 系统是否处于安全状态?如安全,请给出一个安全序列。
Work矢量初始化值=Available(1,5,2,0)
系统安全性[分析]

因为存在一个安全序列<P0、P2、P1、P3>,所以系统处于安全状态。
21. 如果从进程P1发来一个请求(0,4,2,0),这个请求能否立刻被满足?如安全,请给出一个安全序列。
Request
1(0,4,2,0)<Need
1(0,7,5,0)
Request
1(0,4,2,0)<Available(1,5,2,0)
假设先试着满足进程P1的这个请求,则Available变为(1,1,0,0)
系统状态变化见下表:

再对系统进行安全性分析,见下表:

因为存在一个安全序列<P0、P2、P1、P3>,所以系统仍处于安全状态。所以进程P1的这个请求应该马上被满足。
22. 什么是多线程?多线程与多任务有什么区别?
多线程指的是在一个程序中可以定义多个线程同时运行它们,每个线程可以执行不同的任务。
多线程与多任务区别:多任务是针对操作系统而言的,代表着操作系统可以同时执行的程序个数;多线程是针对一个程序而言的,代表着一个程序可以同时执行的线程个数,而每个线程可以完成不同的任务。
假设有两个线程(编号为0和1)需要去访问同一个共享资源,为了避免竞争状态的问题,我们必须实现一种互斥机制,使得在任何时候只能有一个线程在访问这个资源。假设有如下的一段代码:


当一个线程想要访问临界资源时,就调用上述的这两个函数。例如,线程0的代码可能是这样的:

试问:23. 以上的这种机制能够实现资源互斥访问吗?为什么?
这种机制不能实现资源的互斥访问,考虑如下的情形:
①初始化时,flag数组的两个元素值均为FALSE;
②线程0先执行,在执行while循环语句时,由于flag[1]=FALSE,所以顺利结束,不会被卡住。假设这个时候来了一个时钟中断,打断它的运行;
③线程1去执行,在执行while循环语句的时候,由于flag[0]=FALSE,所以顺利结束,不会被卡住,然后就进入了临界区;
④后来当线程0再执行的时候,也进入了临界区,这样就同时有两个线程在临界区。
总结:不能成功的根本原因是无法保证Enter_Critical_Section()函数执行的原子性,我们从上面的软件实现方法中可以看出,对于两个进程间的互斥,最主要的问题就是标志的检查和修改不能作为一个整体来执行,因此容易导致无法保证互斥访问的问题。
24. 如果把Enter_Critical_Section()函数中的两条语句互换一下位置,结果会如何?
可能会出现死锁,考虑如下的情形:
①初始化时,flag数组的两个元素值均为FALSE;
②线程0先执行,flag[0]=TRuE,假设这个时候来了一个时钟中断,打断它的运行;
③线程1去执行,flag[1]=TRUE,在执行while循环语句时,由于flag[0]=TRuE,所以在这个地方被卡住,直到时间片用完;
④线程0再执行的时候,由于flag[1]=TRuE,它也在while循环语句的地方被卡住,这样,这两个线程都无法执行下去,从而死锁。
25. 为什么说多级反馈队列调度算法能较好地满足各类用户的需要?
多级反馈队列调度算法能较好地满足各种类型用户的需要。对终端型作业用户而言,由于他们所提交的大多属于交互型作业,作业通常比较短小,系统只要能使这些作业在第1级队列所规定的时间片内完成,便可使终端型作业用户感到满意;对于短批处理作业用户而言,他们的作业开始时像终端型作业一样,如果仅在第1级队列中执行一个时间片即可完成,便可以获得与终端型作业一样的响应时间,对于稍长的作业,通常也只需要在第2级队列和第3级队列中各执行一个时间片即可完成,其周转时间仍然较短;对于长批处理作业用户而言,它们的长作业将依次在第1,2,…,直到第n级队列中运行,然后再按时间片轮转方式运行,用户不必担心其作业长期得不到处理。
26. 面包师有很多面包,由n个销售人员推销。每个顾客进店后取一个号,并且等待叫号,当一个销售人员空闲下来时,就叫下一个号。试设计一个使销售人员和顾客同步的算法。
顾客进店后按序取号,并等待叫号;销售人员空闲之后也是按序叫号,并销售面包。因此同步算法只要对顾客取号和销售人员叫号进行合理同步即可。我们使用两个变量i和j分别记录当前的取号值和叫号值,并各自使用一个互斥信号量用于对i和j的进行访问和修改。

27. 假设一个录像厅有1、2、3三种不同的录像片可由观众选择放映,录像厅的放映规则为:
1)任一时刻最多只能放映一种录像片,正在放映的录像片是自动循环放映的,最后一个观众主动离开时结束当前录像片的放映;
2)选择当前正在放映的录像片的观众可立即进入,允许同时有多位选择同一种录像片的观众同时观看,同时观看的观众数量不受限制;
3)等待观看其他录像片的观众按到达顺序排队,当一种新的录像片开始放映时,所有等待观看该录像片的观众可依次序进入录像厅同时观看。用一个进程代表一个观众,要求:用信号量方法PV操作实现,并给出信号量定义和初始值。
电影院一次只能放映一部影片,希望观看的观众可能有不同的爱好,但每次只能满足部分观众的需求,即希望观看另外两部影片的用户只能等待。分别为三部影片设置三个信号量s0、s1、s2,初值分别为1、1、1。电影院一次只能放一部影片,因此需要互斥使用。由于观看影片的观众有多个,因此必须分别设置三个计数器(初值都是0),用来统计观众个数。当然计数器是个共享变量,需要互斥使用。

28. 父进程创建子进程和主程序调用子程序有何不同?
父进程创建子进程后,父进程与子进程同时执行(并发)。主程序调用子程序后,主程序暂停在调用点,子程序开始执行,直到子程序返回,主程序才开始执行。
在一个批处理系统中,有两个作业进程。有一作业序列,其到达时间及估计运行时间见表2-13。系统采用最高响应比优先调度算法(响应比=等待时间/估计运行时间)。作业进程的调度采用短作业优先的抢占式调度算法。 表2-13 作业到达时间及估计运行时间 作业 | 到达时间/min | 估计运行时间/min | J1 | 10:00 | 35 | J2 | 10:10 | 30 | J3 | 10:15 | 45 | J4 | 10:20 | 20 | J5 | 10:30 | 30 | |
29. 列出各作业的执行时间(即列出每个作业运行的时间片段,如作业i的运行时间序列为10:00~10:40,11:00~11:20,11:30~11:50结束)。
作业1的执行时间片段为:10:00~10:35(结束)。
作业2的执行时间片段为:10:55~11:25(结束)。
作业3的执行时间片段为:11:55~12:40(结束)。
作业4的执行时间片段为:10:35~10:55(结束)。
作业5的执行时间片段为:11:25~11:55(结束)。
30. 计算这批作业的平均周转时间。
它们的周转时间分别为:35min、75min、145min、35min、85min,故它们的平均周转时间为75min。
31. 系统有同类资源m个,供n个进程共享,如果每个进程对资源的最大需求量为k,试问:当m、n、k的值为分别是下列情况时(见表2-23),是否会发生死锁?
表2-23 m、n、k取值 序写 | m | n | k | 上否会死锁 | 说明 | 1 | 6 | 3 | 3 | | | 2 | 9 | 3 | 3 | | | 3 | 13 | 6 | 3 | | | |
不发生死锁要求必须保证至少有一个进程可以得到所需的全部资源并执行完毕,当m>=n(k-1)+1则一定不会发生死锁。
序号 |
m |
n |
k |
是否会死锁 |
说明 |
1 |
6 |
3 |
3 |
可能会 |
6<3(3-)+1 |
2 |
9 |
3 |
3 |
不会 |
9>3(3-1)+1 |
3 |
13 |
6 |
3 |
不会 |
13=3(6-1)+{1 |
32. 假定某计算机系统有R1和R2两类可使用资源(其中R1有两个单位,R2有一个单位),它们被进程P1和P2所共享,且已知两个进程均以下列顺序使用两类资源:
→申请R1→申请R2→申请R1→释放R1→释放R2→释放R1→
试求出系统运行过程中可能到达的死锁点,并画出死锁点的资源分配图(或称进程资源图)。
在本题中,当两个进程都执行完第一步后,即进程P1和进程P2都申请到了一个R1类资源时,系统进入不安全状态。随着两个进程向前推进,无论哪个进程执行完第二步,系统都将进入死锁状态。可能达到的死锁点是:进程P1占有一个单位的R1类资源及一个单位的R2类资源,进程P2占有一个单位的R1类资源,此时系统内已无空闲资源,而两个进程都在保持已占有资源不释放的情况下继续申请资源,从而造成死锁;或进程P2占有一个单位的R1类资源及一个单位的R2类资源,进程P1占有一个单位的R1类资源,此时系统内已无空闲资源,而两个进程都在保持已占有资源不释放的情况下继续申请资源,从而造成死锁。
假定进程P1成功执行了第二步,则死锁点的资源分配如下图所示。

有两个并发进程P1、P2,其程序代码如下:

34. 可能打印出的c值有?(其中x为P1,P2的共享变量)
35. 进程和程序之间可以形成一对一、一对多、多对一、多对多的关系,请分别举例说明在什么情况下会形成这样的关系。
执行一条命令或运行一个应用程序时,进程和程序之间形成一对一的关系。进程在执行过程中可以加载执行不同的应用程序,从而形成一对多的关系;当以不同的参数或数据多次执行同一个应用程序时,形成多对一的关系;当并发地执行不同的应用程序时,形成多对多的关系。
[解析] 从进程的概念、进程与程序之间的关系来考虑问题的解答。进程是程序的执行过程,进程代表执行中的程序,因此进程与程序的差别就隐含在“执行”之中。程序是静态的指令集合,进程是程序的动态执行过程。静态的程序除了占用磁盘空间外,不需要其他系统资源,只有执行中的进程才需要分配内存、CPU等系统资源。
进程的定义说明了两点:
1)进程与程序相关,进程包含了程序。程序是进程的核心内容,没有程序就没有进程。
2)进程不仅仅是程序,还包含了程序在执行过程中使用的全部资源。没有资源,程序就无法执行,因此,进程是程序执行的载体。
当运行一个程序时,操作系统首先要创建一个进程,为进程分配内存等资源,然后加入到进程队列中执行。当单个进程在某个时刻而言,一个进程只能执行一个程序,进程与程序之间是一对一的关系。但从整个系统中的进程集合以及进程的生命周期而言,进程与程序之间可以形成一对一、多对一、一对多、多对多的关系。
回答下列问题:36. 若系统中没有运行进程,是否一定没有就绪进程?为什么?
是。若系统中没有运行进程,那么系统很快会选择一个就绪进程运行。只有就绪队列中无进程时,CPU才可能处于空闲状态。
37. 若系统中既没有运行进程,也没有就绪进程,系统中是否就没有进程?为什么?
不一定。因为系统中的所有进程可能都处于等待状态,但不一定处于死锁状态。
38. 在采用优先级进程调度时,运行进程是否一定是系统中优先级最高的进程?
不一定。因为高优先级的进程有可能正处在等待队列中,进程调度就从就绪队列中选一个进程占用CPU,这个被选中的进程可能优先级较低。
39. 某银行计算机系统要实现一个电子转账系统,基本的业务流程是:首先对转出方和转入方的账户进行加锁,然后进行转账业务,最后对转出方和转入方的账户进行解锁。如果不采取任何措施,系统会不会发生死锁?为什么?请设计一个能够避免死锁的办法。
系统会死锁。因为对两个账户进行加锁操作是可以分割进行的,若此时有两个用户同时进行转账,P1先对账户A进行加锁,再申请账户B;P2先对账户B进行加锁,再申请账户A,此时产生死锁。解决的办法是:可以采用资源顺序分配法对A、B账户进行编号,用户转账时只能按照编号由小到大进行加锁;也可以采用资源预分配法,要求用户在使用资源之前将所有资源一次性申请到。
40. 某工厂有两个生产车间和一个装配车间,两个生产车间分别生产A、B两种零件,装配车间的任务是把A、B两种零件组装成产品。两个生产车间每生产一个零件后都要分别把它们送到专配车间的货架F1、F2上。F1存放零件A,F2存放零件B,F1和F2的容量均可以存放10个零件。装配工人每次从货架上取一个零件A和一个零件B后组装成产品。请用P、V操作进行正确管理。
本题是生产者一消费者问题的变形,生产者“车间A”和消费者“装配车间”共享缓冲区“货架F1”;生产者“车间B”和消费者“装配车间”共享缓冲区“货架F2”。因此,可为它们设置6个信号量,其中,empty1对应货架F1上的空闲空间,其初值为10;full1对应货架F1上面的A产品,其初值为0;empty2对应货架F2上的空闲空间,其初值为10;full2对应货架F2上面的B产品,其初值为0;mutex1用于互斥地访问货架F1,其初值为1;mutex2用于互斥地方问货架F2,其初值为1。
A车间的工作过程可描述为:

B车间的工作过程可描述为:

装配车间的工作过程可描述为:

41. 为什么进程之间的通信必须借助于操作系统内核功能?简单说明进程通信的几种主要方式。
每个进程有自己独立的地址空间。在操作系统和硬件的地址保护机制下,进程无法访问其他进程的地址空间,所以必须借助于操作系统的系统调用函数实现进程之间的通信。进程通信的主要方式有:
[解析] 在操作系统中,进程是竞争和分配计算机系统资源的基本单位。每个进程有自己的独立地址空间。为了保证多个进程能够彼此互不干扰地共享物理内存,操作系统利用硬件地址机制对进程的地址空间进行了严格的保护,限制每个进程只能访问自己的地址空间。
1)共享内存区:通过系统调用创建共享内存区。多个进程可以(通过系统调用)连接同一个共享内存区,通过访问共享内存区实现进程之间的数据交换。使用共享内存区时需要利用信号量解决同步互斥问题。
2)消息传递:通过发送/接收消息,系统调用实现进程之间的通信。当进程发送消息时,系统将消息从用户缓冲区复制到内核中的消息缓冲区中,然后将消息缓冲区挂入消息队列中。进程发送的消息保持在消息队列中直到被另一进程接收。当进程接收消息时,系统从消息队列中解挂消息缓冲区,将消息从内核的消息缓冲区中复制到用户缓冲区,然后释放消息缓冲区。
3)管道系统:管道是先进先出(FIFO)的信息流,允许多个进程向管道写入数据,允许多个进程从管道读出数据。在读/写过程中,操作系统保证数据的写入顺序和读出顺序是一致的。进程通过读/写管道文件或管道设备实现彼此之间的通信。
4)共享文件:利用操作系统提供的文件共享功能实现进程之间的通信。这时,也需要信号量解决文件共享操作中的同步和互斥问题。
42. 设公共汽车上,驾驶员和售票员的活动分别如下(见图2-14)驾驶员的活动:启动车辆,正常行车,到站停车;售票员的活动:关车门,售票,开车门。在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用信号量和P、V操作实现它们的同步。

在汽车行驶过程中,驾驶员活动与售票员活动之间的同步关系为:售票员关车门后,向驾驶员发开车信号,驾驶员接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时驾驶员停车,售票员在车停后开门让乘客上下车。因此,驾驶员启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与驾驶员停车取得同步。应设置两个信号量S1、S2:
S1表示是否允许驾驶员启动汽车(其初值为0)。
S2表示是否允许售票员开门(其初值为0)。

43. 在一个仓库中可以存放A和B两种产品,要求:
1)每次只能存入一种产品。
2)A产品数量-B产品数量<M。
3)B产品数量-A产品数量<N。
其中,M、N是正整数,试用P操作、V操作描述产品A与产品B的入库过程。
使用信号量mutex控制两个进程互斥访问临界资源(仓库),使用同步信号量Sa和Sb(分别代表产品A和产品B的入库计数器)满足条件2和条件3。代码如下:

44. 设系统中有下述解决死锁的方法:
1)银行家算法;
2)检测死锁,终止处于死锁状态的进程,释放该进程占有的资源;
3)资源预分配。
简述哪种办法允许最大的并发性,也即哪种办法允许更多的进程无等待地向前推进?请按“并发性”从大到小对上述三种办法进行排序。
死锁检测方法可以获得最大的并发性。并发性排序:死锁检测方法、银行家算法、资源预分配法。
[解析] 死锁在系统里不可能完全消灭,但是我们要尽可能地减少死锁的发生。对死锁的处理有四种方法:忽略、检测与恢复、避免和预防,每一种方法对死锁的处理从宽到严,同时系统并发性由大到小。这里银行家算法属于避免死锁,资源预分配属于预防死锁。
现代操作系统一般都提供多进程(或称多任务)运行环境,回答以下问题:45. 为支持多进程的并发执行,系统必须建立哪些关于进程的数据结构?
为支持多进程的并发执行,系统为每个进程建立了一个数据结构:进程控制块(PCB),用于进程的管理和控制。PCB中记录了有关进程的一些描述信息和控制信息,包括进程标识符、进程当前的状态、优先级、进程放弃CPU时的现场信息,以及指示组成进程的程序和数据在存储器中存放位置的信息、资源使用信息、进程各种队列的连接指针和反映进程之间的隶属关系的信息等。
46. 为支持进程状态的变迁,系统至少应提供哪些进程控制原语?
在进程的整个生命周期中,会经历多种状态。进程控制的主要职能是对系统中所有进程实施有效地管理,它具有创建新进程、撤销已有进程、实现进程的状态转换等功能。在操作系统内核中,有一组程序专门用于完成对进程的控制,这些原语至少需要包括创建新进程原语、阻塞进程原语、唤醒进程原语、终止进程原语等操作。系统服务对用户开放,也就是说用户可以通过相应的接口来使用它们。
47. 执行每一个进程控制原语时,进程状态发生什么变化?相应的数据结构发生什么变化?
进程创建原语:从PCB集合中申请一个空白的PCB,将调用者参数(如进程外部标识符、初始CPU状态、进程优先数、初始内存及申请资源清单等),添入该PCB,设置记账数据。置新进程为“就绪”状态。
终止进程原语:用于终止完成的进程,回收其所占资源。包括消去其资源描述块,消去进程的PCB。
阻塞原语:将进程从运行状态变为阻塞状态。进程被插入等待事件的队列中,同时修改PCB中相应的表项,如进程状态和等待队列指针等。
唤醒原语:将进程从阻塞状态变为就绪状态。进程从阻塞队列中移出,插入到就绪队列中,等待调度,同时修改PCB中相应的表项,如进程状态等。
48. 在一单道批处理系统中,一组作业的提交时间和运行时间见表2-6。试计算以下三种作业调度算法的平均周转时间T和平均带权周转时间W。
表2-6 作来提交时间和运行时间表 作业 | 提交时间 | 运行时问 | 1 | 8.0 | 1.0 | 2 | 8.5 | 0.5 | 3 | 9.0 | 0.2 | 4 | 9.1 | 0.1 | |
1)先来先服务调度算法。
2)短作业优先调度算法。
3)高响应比优先调度算法。
FCFS调度算法的作业调度情况见下表:
作业 |
提交时问 |
运行时间 |
开始时间 |
结束时间 |
周转时间 |
带权周转时间 |
1 |
8.0 |
1.0 |
8.0 |
9.0 |
1.0 |
1.0 |
2 |
8.5 |
0.5 |
9.0 |
9.5 |
1.0 |
2.0 |
3 |
9.0 |
0.2 |
9.5 |
9.7 |
0.7 |
3.5 |
4 |
9.1 |
0.1 |
9.7 |
9.8 |
0.7 |
7.0 |
T=(1.0+1.0+0.7+0.7)/4=0.85
W=(1.0+2.0+3.5+7.0)/4=3.375
SJF调度算法的作业调度情况见下表:
作业 |
提交时间 |
运行时间 |
开始时间 |
结束时间 |
周转时间 |
带权周转时间 |
1 |
8.0 |
1.0 |
8.0 |
9.0 |
1.0 |
1.0 |
2 |
8.5 |
0.5 |
9.3 |
9.8 |
1.3 |
2.6 |
3 |
9.0 |
0.2 |
9.0 |
9.2 |
0.2 |
1.0 |
4 |
9.1 |
0.1 |
9.2 |
9.3 |
0.2 |
2.0 |
T=(1.0+1.3+0.2+0.2)/4=0.675
W=(1.0+2.6+1.0+2.0)/4=1.65
响应比高者优先:8.0时只有1号作业,所以肯定是1号得到CPU。9.0时1号作业执行完毕,2号作业响应比为(9.0-8.5+0.5)/0.5=2,3号作业响应比为(9.0~9.0+0.2)/0.2=1,2号的响应比大于3号,9.0时调度2号作业。9.5时2号作业执行完毕,此时3号作业响应比为(9.5-9.0+0.2)/0.2=3.5,4号作业响应比为(9.5-9.1+0.1)/0.1=5,4号的响应比大于3号,所以先调度4号作业。
高响应比优先调度算法的作业调度情况见下表:
作业 |
提交时间 |
运行时间 |
开始时间 |
结束时间 |
周转时问 |
带权周转时间 |
1 |
8.0 |
1.0 |
8.0 |
9.0 |
1.0 |
1.0 |
2 |
8.5 |
0.5 |
9.0 |
9.5 |
1.0 |
2.0 |
3 |
9.0 |
0.2 |
9.6 |
9.8 |
0.8 |
4.0 |
4 |
9.1 |
0.1 |
9.5 |
9.6 |
0.5 |
5.0 |
T=(1.0+1.0+0.8+0.5)/4=0.825
W=(1.0+2.0+4.0+5.0)/4=3.0
49. 理发店理有一位理发师、一把理发椅和n把供等候理发的顾客坐的椅子。如果没有顾客,理发师便在理发椅上睡觉,一个顾客到来时,顾客必须叫醒理发师,如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,就坐下来等待,否则就离开。
1)控制变量waiting用来记录等候理发的顾客数,初值为0,当进来一个顾客时,waiting加1,当一个顾客理发时,waiting减1;
2)信号量customers用来记录等候理发的顾客数,并用做阻塞理发师进程,初值为0;
3)信号量barbers用来记录正在等候顾客的理发师数,并用做阻塞顾客进程,初值为0;
4)信号量mutex用于互斥,初值为1。

50. 进程之间存在哪几种制约关系?各是什么原因引起的?以下活动各属于哪种制约关系?
1)若干学生去图书馆借书。
2)两队进行篮球比赛。
3)流水线生产的各道工序。
4)商品生产和消费。
进程之间存在两种制约关系,即同步和互斥。
同步是由于并发进程之间需要协调完成同一个任务时引起的一种关系,为一个进程等待另一个进程向它直接发送消息或数据时的一种制约关系。
互斥是由于并发进程之间竞争系统的临界资源引起的,为一个进程等待另一个进程已经占有的必须互斥使用的资源时的一种制约关系。
1)是互斥关系,同一本书只能被一个学生借阅,或者任何时刻只能有一个学生借阅一本书。
2)是互斥关系,篮球是互斥资源。
3)是同步关系,一个工序完成后开始下一个工序。
4)是同步关系,生产商品后才能消费。
51. 假设某操作系统采用时间片轮转调度策略,分配给A类进程的时间片为100ms,分配给B类进程的时间片为400ms,就绪进程队列的平均长度为5(包括正在运行的进程),其中A类进程有4个,B类进程有1个,所有进程的平均服务时间为2,问A类进程和B类进程的平均周转时间各为多少?(不考虑I/O情况)
时间片轮转(RR)调度是轮流地调度就绪队列中的每个进程,进程每次占用CPU的时间长度限制为时间片的大小。当采用固定的时间片大小时,每个进程按照固定周期被循环执行。所以,进程的执行速度是由该进程的时间片大小在一个循环周期中所占的比例决定的,比例越高,进程的相对执行速度就越快。
因为就绪进程队列的平均长度为5,单个RR调度循环周期的时间为
(4×100+1×400)ms=800ms
A类进程需要20个时间片的执行时间,B类进程需要5个时间片地执行时间(1s=1000ms)。
A类进程的平均周转时间为
20×0.8s=16s
B类进程的平均周转时间为
5×0.8s=4s
52. 假设某计算机系统有4个进程,各进程的预计运行时间和到达就绪队列的时刻见表2-11(相对时间,单位为“时间配额”)。试用可抢占式短进程优先调度算法和时间片轮转调度算法进行调度(时间配额为2)。分别计算各个进程的调度次序及平均周转时间。
表2-11 进程调度表 进程 | 到达就绪队列时刻 | 预计运行时间 | P1 | 0 | 8 | p2 | 1 | 4 | P3 | 2 | 9 | P4 | 3 | 5 | |
1)按照可抢先式短进程优先调度算法进程运行时间见下表。
进程 |
到达就绪队列时刻 |
预计执行时间 |
执行时间段 |
周转时间 |
P1 |
0 |
8 |
0~1:10~17 |
17 |
P2 |
1 |
4 |
1~5 |
4 |
P3 |
2 |
9 |
17~26 |
24 |
P4 |
3 |
5 |
5~10 |
7 |
时刻0,进程P1到达并占用处理器运行。
时刻1,进程P2到达,因其预计运行时间短,故抢夺处理器进入运行,P1等待。
时刻2,进程P3到达,因其预计运行时间长于正在运行的进程,进入就绪队对等待。
时刻3,进程P4到达,因其预计运行时间长于正在运行的进程,进入就绪队列等待。
时刻5,进程P2运行结束,调度器在就绪队列中选择短进程,P4符合要求,进入运行,进程P1和进程P3则还在就绪队列等待。
时刻10,进程P4运行结束,调度器在就绪队列中选择短进程,P1符合要求,再次进入运行,而进程P3则还在就绪队列等待。
时刻17,进程P1运行结束,只剩下进程P3,调度其运行。
时刻26,进程P3运行结束。
平均周转时间=[(17-0)+(5-1)+(26-2)+(10-3)]/4=13。
2)按照时间片轮转调度算法进程时间分配见下表。
进程 |
到达就绪队列时刻 |
预汁执行时间 |
执行时间段 |
剧转时间 |
P1 |
0 |
8 |
0~2;8~10;16~18;21~23 |
23 |
p2 |
1 |
4 |
2~4;10~12 |
11 |
P3 |
2 |
9 |
4~6;12~14;18~20;23~25;25~26 |
24 |
P4 |
3 |
5 |
6~8;14~16;20~21 |
18 |
平均周转时间=((23-0)+(12-1)+(26-2)+(21-3))/4=19。
53. 设P、Q、R共享一个缓冲区,P、Q构成一对生产者一消费者,R既为生产者又为消费者。使用P、V操作实现其同步。