homework参考答案
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
prepare an orange;
P(empty);
P(empty);
put an apple on the plate; put an orange on the plate;
V(apple ); }}
V (orange); }}
第二章
son(){ while(1) { P(orange);
daughter(){ while(1) { p(apple); take an apple from the plate; v(empty); eat the apple; }}
P(Emptyseat); P(mutex); 查登记表,登记姓名,座 位号等;
V(mutex);
阅读; P(mutex); 查登记表,置空;
V(mutex); 离开;
V(Emptyseat); }
哲学家就餐问题
➢给所有哲学家编号,奇数号的哲学家必 须先拿左边的筷子,偶数号的哲学家必 须先拿右边的筷子。
2.8
3
10.4 0.5 13.0 13.5 3.1
6.2
4
10.5 0.3 13.5 13.8 3.3
11.0
平均周转时间: (2.0+2.8+3.1+3.3)/4=2.8 • 平均带权周转时间:
(2.0+2.8+3.1+3.3)/4=2.8
第三章
(2)采用短作业优先调度算法,则其调度顺序是1、 4、3、2
,总的运行时间为:
20+30+10 + 40+20+10 + 10+30+20=190ms 其程序运行时间关系图如下图所示:
第一章
第一章
程序
操作
ABC
计算 20ms 40ms 10ms
• 采用多道方式运行程序,系统中按I/O照操作A、30Bm、s 2C0ms 30ms
的优先次序执行(非抢占式),其计程算序运10m行s 时10ms 20ms 间关系图如下图所示:
PA(); PB(); PC(); }
第二章
PB() { while(1)
PA()
{ P(full1);
{
从缓冲池1中取一个产品;
while(1) { 生产一个产品;
V(empty1); 生产一个产品;
P(empty1);
P(empty2);
将这个产品放入缓冲池1; 将这个产品放入缓冲池2;
V(full1);
… think; …
end
end
until false;
2021/6/29
28
第三章
6 、答:
(1)采用先来先服务调度算法,则其调度顺 序是1、2、3、4
作业 提交时 运行时 开始时 完成时 周转时 带权周转
号间
间
间
间
间
时间
1
10.0 2.0 10.0 12.0 2.0
1.0
2
10.2 1.0 12.0 13.0 2.8
第二章
剪发 离开; P(mutex); count:=count-1; V(mutex); end until false end
第二章
11、答: 本题中中共有三类进程,机房管理员进程guard,
学生进程student和教师进程teacher。 相应的信号量和各个进程描述如下:
semaphore computer=2m;
/*对应于计算机的资源信号量*/
semaphore student=0;
/*对应于欲进入机房的学生*/
semaphore enter=0;
/*用来控制学生是否可进入机房*/
semaphore finish=test=0; /*用来同步学生和教师——
教师须检查实习完毕的学生*/
第二章
computer=2m student=0 enter=0; finish=0;test=0;
A: 使用CPU10s,设备甲5s, CPU5s,设备乙10s, CPU10s。 B:设备甲10s, CPU10s,设备乙5s, CPU5s,设备乙10s。
第一章
9、
程序
操作
A
B
C
计算
20ms
40ms
10ms
I/O操作
30ms
20ms
30ms
计算
10ms
10ms
20ms
答:采用单道方式运行程序,A,B,C依次执行
A10 B10 C10 B20
B10
C20
C30
• 3道程序并发执行的总运行时间为: 20+30+10+10+20+30+20=140ms
第一章
10、答:两个进程同时进入就绪状态,说明是多 道系统
CPU
A50
B50
A50
B100
打印机
A100
A100
输入设备
B80
(1)有,100ms~150ms,250/300=83.3% (2)无 (3)有,0ms~50ms,180ms~200ms
/*激活教师已经做完实验*/
P(test);
/*等待教师检查作业*/
离开机房;
V(computer); /*所占用的计算机变为空闲*/
}
第二章
5、答:
设置四个信号量empty1,empty2,full1和 full2。
A,B,C三个进程之间的同步关系如下:
第二章
Semaphore empty1=n; //缓冲池1中的空缓冲个数 Semaphore empty2=m; //缓冲池2中的空缓冲个数 Semaphore full1=0; //缓冲池1中的满缓冲个数 Semaphore full2=0; //缓冲池2中的满缓冲个数 main() {
}}
V(mutex);
第二章
reader (){ while ( 1) { P(S); P(rmutex); if(readcount==0) P(mutex); readcount++; V(rmutex); V(S); 读文件; P(rmutex); readcount--; if(readcount==0) V(mutex); V(rmutex); }}
第二章
Guest: begin
repeat P(mutex); if (count==n+1) then begin V(mutex); 离开; end else
Barber: begin
repeat P(full); 剪发; V(empty);
until false end
第二章
begin count:=count+1; if (count>1) then //多个顾客时,坐等候椅上 V(mutex); P(sofa); 坐沙发等; P(empty); 坐理发椅子上; V(sofa); V(full); else //只有一个顾客时,坐到理发椅上 begin V(mutex); P(empty); 坐理发椅子上; V(full); end
作业 提交 运行 开始 号 时间 时间 时间 1 10.0 2.0 10.0 4 10.5 0.3 12.0 3 10.4 0.5 12.3 2 10.2 1.0 12.8
完成 周转 时间 时间 12.0 2.0 12.3 1.8 12.8 2.4 13.8 3.6
带权周转 时间 1.0 6.0 4.8 3.6
➢这样,任何一个哲学家拿到一支筷子后, 就已经阻止了他邻座的一个哲学家吃饭 的企图,除非某个哲学家一直吃下去, 否则不会有人会饿死。
第二章
Repeat
begin if (i mod 2)!=0 then
begin P(chopstick[i]); P(chopstick[(i+1) mod 5]);
第一章
(2)多道环境下(假设同时到达、非抢占式): 此时执行的时序图如下所示:
CPU A10
B10
A5 B5
A10
设备甲 B10
A5
设备乙
B5 A10
B5
执行A,B的总时间为:10+10+5+10+10=45s 占用CPU的总时间为:10+10+5+5+10=40s CPU的利用率为: 100% * 40/45 = 88.9%
图书馆阅览室问题
问题描述: 假定阅览室最多可同时容纳100个人
阅读,读者进入时,必须在阅览室门口 的一个登记表上登记,内容包括姓名、 座号等,离开时要撤掉登记内容。用P、 V操作描述读者进程的同步算法。
图书馆阅览室问题
mutex,emptyseat semaphore; mutex=1,Emptyseat=100; Reader(i) {
第二章
computer=2m student=0 enter=0; finish=0;test=0;
student_i(){
/*i=1,2,···2n*/
V(student);
/*激活管理员,有学生到达,要进入机房实验*/
P(enter);
/*等待管理员激活进入机房*/
进入机房上机实习;
V(finish);
…eat;… V(chopstick[i]); V(chopstick[(i+1) mod 5]);
… think; …
end
2021/6/29
27
第二章
else
begin P(chopstick[(i+1) mod 5]); P(chopstick[i]);
…eat;… V(chopstick[(i+1) mod 5]); V(chopstick[i]);
guard(){ int i; for(i=0; i<n;i++;) { P(computer); /*等待有两个空闲计算机*/ P(computer); P(student); /*等待有两个学生达到*/ P(student); V(enter); /*激活两个等待进入机房的学生*/ V(enter); }}
V(full2);
}}
}}
PC()
{ while(1)
{ P(full2);
从缓冲池2中取一个产品;
V(empty2);
}}
第二章
7、答:
• 为了使写者优先,在原来的读优先算法 基础上增加一个初值为1的信号量S,使 得当至少有一个写者准备访问共享对象 时,它可使后续的读者进程等待写完成;
• 初值为0的整型变量writecount,用来对 写者进行计数;初值为1的互斥信号量 wmutex,用来实现多个写者对 writecount的互斥访问。
take an orange from the plate;
V(empty);
eat the orange;
}}
第二章
9、答: 信号量sofa:表示等候椅数,初值为n 信号量empty:表示理发椅空,初值为1 信号量full:表示理发椅上有顾客,初值为0 count:记录当前顾客的总人数,初值为0 信号量mutux:用来实现对变量count的互斥访问 Var mutex,sofa,empty,full: semaphore=1,n,1,0; count: integer: =0;
第一章
8、答:(1)单道环境下: 先执行A,再执行B的总时间为: 10+5+5+10+10 + 10+10+5+5+10=80s 占用CPU的总时间为:
10+5+10 + 10+5=40s CPU的利用率为:
100% * 40/80 = 50%
A: 使用CPU10s,设备甲5s, CPU5s,设备 乙10s, CPU10s。 B:设备甲10s, CPU10s,设备乙5s, CPU5s, 设备乙10s。
第二章
6、答:设信号量empty用于表示空盘子的数量,信号量 apple用于计数,表示盘子中的苹果数目,信号量 orange用于计数,表示盘子中的桔子数目。
Semaphore empty=1,apple=0,orange=0
dad(){ while(1){
mom(){ while(1){
prepare an apple;
计算 A20
B40
A10 C10 B10
C20
A30
B20
C30
I/O
• 3道程序并发执行的总运行时间为: 20+40+20+30+20=130ms
第一章
• 抢占式: 计算 A20 B30
A30
I/O
程序
操作
ABC
计算 20ms 40ms 10ms
I/O操作 30ms 20ms 30ms
计算 10ms 10ms 20ms
第二章
writer(){ while(1){ P(wmutex); if(writecount==0) P(S); writecount++; V(wmutex); P(mutex); 写文件; P(wmutex); writecount- -; If(writecount==0) r=2m student=0 enter=0; finish=0;test=0;
teacher(){ int i; for(i=0;i<n;i++) { P(finish); /*等待两个学生完成实验*/ P(finish); 检查两个学生的实习结果; V(test); /*检查完后,激活两个学生检查完 毕,可以离开机房*/ V(test); }}