进程管理练习题 下载本文

内容发布更新时间 : 2024/5/22 5:20:05星期一 下面是文章的全部内容请认真阅读。

解:本题是读者-写者问题。在本题中,允许读进程同时读数据库,但写进程正在写数据库时不允许其他进程读该数据库,也不允许其他进程写该数据库。为了解决读、写进程之间的同步,应该设置2个信号量和一个共享变量:读互斥信号量rmutex,用于使读进程互斥地访问共享变量count,其初值为1;写互斥信号量wmutex,用于实现写进程与读进程的互斥及写进程与写进程的互斥,其初值为1;共享变量count,用于记录当前正在读数据库的读进程数目,初值为0。其工作过程描述如下: Semaphore rmutex=1; Semaphore wmutex=1; Int count=0; Main() {

Cobegin

Reader(); Writer(); Coend } Reader() {

While(true) {

P(rmutex);

If(count==0) p(wmutex); Count ++; V(rmutex); 读数据库; P(rmutex); Count --;

If (count==0) v(wmutex); V(rmutex); } } Writer() {

While(true) {

P(wmutex); 写数据库;

V(wmutex); } }

注意:正确理解信号量rmutex的意义是理解读者-写者问题的关键。Rmutex是一个互斥信号量,用于使读进程互斥地访问共

享变量count。信号量rmutex并不表示读进程的数目,表示读进程数目的是共享变量count。当一个读进程要读数据库时,应将读进程计数count增加1;如果此前(count加1以前)数据库中无读进程,还应对写互斥信号量wmutex做p操作,这样,若数据库中无写进程则通过p操作阻止后续写进程写,若数据库中有写进程,则通过p操作让读进程等待。同理,当一个读进程完成读数据库操作时,应将读进程计数count减少1;如果此时(count减1以后)数据库中已无读进程,还应对写互斥信号量wmutex做v操作,以允许写进程写。

6. 就绪队列中有10个进程,系统将时间片设为200ms,CPU进行进程切换要花费10ms,试问系统开销所占的比率约为多少? 解:因就绪队列中有10个进程,它们以时间片轮转的方式使用CPU,时间片长度为200ms。当一个时间片用完时,调度进程将当前运行进程设置为就绪状态并放入就绪队列尾,再从就绪队列首选择进程投入运行,这一过程(进程切换)要花费时间10ms。因此系统开销所占比率为:10/(200+10)=4.8%

7、在OS中引起进程调度的主要因素有哪些? 【解】

在OS中引起进程调度的主要因素有:

(1)缺乏资源。正在运行的进程因为某个条件不能满足,不得不进入阻塞状态,此时,运行进程被撤下,引起调度使另一个进程进入运行

(2)时间片到。如果是分时系统或者以时间片作为激励调度的系统,时间片是引起硬件激励的主要因素,每当时间片到,正在运行的进程被暂时停止,将它再次排入就绪队列,引起调度使另一就绪进程进入运行。

(3)外部中断。外部中断信号也将引起调度,如打印机打印完成,通过打印通道或者信号线路传送一激励信号,将原等待进程唤醒重新进入运行,或引起调度使另一进程运行。

(4)进程结束。进程正常执行完毕,退出并终止,此时将激励系统调度另一进程进入运行。

8. 假设有4道作业,它们的提交时间及执行时间已给出。

作业号 提交时刻(时) 执行时间(小时) 1 10: 00 2 2 10: 20 1 3 10: 40 0.5 4 10: 50 0.3

采用先来先服务调度算法和最短作业优先调度算法时的平均周转时间和平均带权周转时间,并指出它们的调度顺序。