S0:=1; S1\2:=N; in:=out:=0; Cobegin
Process PROCEDURE A; BEGIN
L1: 生产数据m;
P(S2); //等待可用的缓冲区空间 P(S0); //保护对in、out的操作 Buffer(in):=m;
in:=(in+1) MOD N;
V(S1); //有新数据,唤醒消费者进程 V(S0); Goto L1 END
Process PROCEDURE B; BEGIN
L2: P(S1); //等待新数据
P(S0); //保护对in、out的操作 m\
out:=(out+1) MOD N; V(S2); //增加可用空间 V(S0); 消费m; goto L2 END Coend END
4-15无界环形缓冲池,A进程顺序将信息写入缓冲池,B进程依次从缓冲池中读取信息。试写出A、B进程的同步算法.\\ semaphore count=0; main() { cobegin producer(); comsumer(); coend}
producer() { 生产产品; P(m);
将产品放入缓冲区; V(m);
/*产品计数*/
semaphore m=1; /*互斥*/
V(count); }
comsumer() { P(count); P(m);
从缓冲区取产品; V(m); 消费产品; }
第五章
5.14 假定在一个多道处理系统中,道数不受限制。当第一个作业进入输入井后或内存中有一道程序完成后即进行作业调度。现有4道都是仅作计算而没有请求设备输入输出的作业,它们进入输入井的时间,需要计算的时间及优先级如下所示: 作业名 A B C D 进入输入井时间 8:00 8:10 8:20 8:30 需要计算时间 优先(数大极高) 60 40 30 10 1 2 4 3 解:(1)作业调度和进程调度均采用FCFS算法时,计算这批作业的T和W。
先来先服务调度算法(FCFS) 作业名 A B C D 进入输入井时间 8:00 8:10 8:20 8:30 运行时间 (分) 60 40 30 10 开始时间 8:00 9:00 9:40 10:10 完成时间 9:00 9:40 10:10 10:20 周转时间 (分) 60 90 110 110 带权周转时间 1 9/4 11/3 11 调度顺序:A->B->C->D
平均周转时间:T=(60+90+110+110)/4=92.5(分) 平均带权周转时间: W=(1+9/4+11/3+11)/4=4.48
(2)作业调度采用SJF和进程调度采用SPF算法时,计算这批作业的T和W。 短作业优先调度算法 作业名 A D C B 进入输入井时间 8:00 8:30 8:20 8:10 运行时间 (分) 60 10 30 40 开始时间 8:00 9:00 9:10 9:40 完成时间 9:00 9:10 9:40 10:20 周转时间 (分) 60 40 80 130 带权周转时间 1 4 8/3 13/4
调度顺序:A-> D ->C-> B
平均周转时间:T=(60+130+80+40))/4=77.5
平均带权周转时间: W=(1+13/4+8/3+4))/4=2.73
(3)作业调度和进程调度均采用优先级高者时,计算这批作业的T和W。 优先级高者优先算法 作业名 A C D B 进入输入井时间 8:00 8:20 8:30 8:10 运行时间 60 30 10 40 开始时间 8:00 9:00 9:30 9:40 完成时间 9:00 9:30 9:40 10:20 周转时间 60 70 70 130 带权周转时间 1 7/3 7 13/4 调度顺序:A-> C -> D -> B 平均周转时间:T=(60+130+70+70))/4=82.5(分) 平均带权周转时间: W=(1+13/4+7/3+7))/4=3.40
列: 在一个单道批处理系统中,一组作业的提交时间和运行时间如下表所示:
作业 1 2 3 4 提交时间 8:00 8:50 9:00 9:10 运行时间(小时) 1.0 0.50 0.20 0.10 试计算以下三种作业调度算法的平均周转时间T和平均带权周转时间W: (1)先来先服务。 (2)短作业优先。 (3)响应比高者优先。
[答] (1)采用先来先服务作业调度算法时,作业的运行情况如下表所示: 作业执行次序 1 2 3 4 提交时间 8:00 8:50 9:00 9:10 运行时间 1.0 0.5 0.20 0.10 开始时刻 8:00 9:00 9:30 9:42 完成时刻 9:00 9:30 9:42 9:48 周转时间 1.0 0.67 0.7 0.63 带权周转时间 1.0 1.34 3.5 6.3 所以,平均周转时间为: T=(1.0+0.67+0.7+0.63)/4=0.75 平均带权周转时间为:
W=(1.0+1.34+3.5+6.3)/4=3.04
(2)采用短作业优先调度算法时,作业的运行情况如下表所示: 作业执行次序 1 2 3 4 提交时间 8:00 9:00 9:10 8:50 运行时间 1.0 0.2 0.10 0.50 开始时刻 8:00 9:00 9:12 9:18 完成时刻 9:00 9:12 9:18 9:48 周转时间 1.0 0.2 0.133 0.97 带权周转时间 1.0 1.0 1.33 1.94
(在9:00时,作业2和作业3就绪,作业3因为时间短而先执行。同理,9:12时作业4开始执行。)
所以,平均周转时间为: T=(1.0+0.2+0.1+0.97)/4=0.57 平均带权周转时间为:
W=(1.0+1.0+1.33+1.94)/4=1.32
(3)采用响应比高者优先作业调度算法时,作业的运行情况如下表所示: 作业执行次序 1 2 3 4 提交时间 8:00 9:00 8:50 9:10 运行时间 1.0 0.20 0.50 0.10 开始时刻 8:00 9:00 9:12 9:42 完成时刻 9:00 9:12 9:42 9:48 周转时间 1.0 0.2 0.87 0.63 带权周转时间 1.0 1.0 1.74 6.3 所以,平均周转时间为:
T=(1.0+0.2+0.87+0.63)/4=0.675 平均带权周转时间为:
W=(1.0+1.0+1.74+6.3)/4=2.51
12.单道批处理系统中,有四个作业,其有关情况如下表所示。在采用响应比高者优先调度算法时分别计算其平均周转时间T和平均带权周转时间W。 作业 提交时间/h 运行时间/h J1 8.0 2.0 J2 8.6 0.6 J3 8.8 0.2 J4 9.0 0.5 [答] 分析响应比高者优先调度算法是指在每次调度作业运行时,先计算后备作业队列中每个作业的响应比,然后挑选响应比最高的投入运行。
在第8小时,因为只有作业J1到达,系统先将作业J1投入运行。作业J1运行两个小时后完成。这时三个作业都已到达,要计算三个作业的响应比,然后使响应比最高的投入运行。三个作业的响应比为:
作业J2的响应比=1+(10.0-8.6)/0.6=3.33 作业J3的响应比=1+(10.0-8.8)/0.2=7 作业J4的响应比=l+(10.0-9.0)/0.5=3
从计算的结果来看,作业J3的响应比最高,所以让作业J3先执行。作业J3执行0.2小时后完成,此时作业J2和作业J4的响应比为:
作业J2的响应比=1+(10.2-8.6)/0.6=3.67 作业J4的响应比=1+(10.2-9.0)/0.5=3.4
从计算的结果来看,作业J2的响应比最高,所以再让作业J2执行。 可见,四个作业的执行次序为:作业J1,作业J3,作业2,作业J4。 计算结果如下表:
作业号 1 2 3 4 平均周转时间为: 到达时间 8.0 8.6 8.8 9.0 运行时间 2.0 0.6 0.2 0.5 开始完时间 成时间 8.0 10.2 10.0 10.8 10.0 10.8 10.2 11.3 周转时间 2.0 2.2 1.4 2.3 带权周转时间 1.0 3.67 7 4.6
T=(2.0+2.2+1.4+2.3)/4=1.975 平均带权周转时间为: W=(1.0+3.67+7+4.6)/4=3.98
5-15在单道批处理系统中,有下列三个作业用先来先服务调度算法和最短作业优
先调度算法进行调度,哪一种算法调度性能好些?请完成下表中未填写的各项。
作业 1 2 3 提交时间 执行时间 开始时间 10.00 10.10 10.25 2.00 1.00 0.25 完成时间 周转时间 带权周转时间 平均周转时间t= 平均带权周转时间w= 先来先服务调度算法
最短作业优先调度算法
作业123提交时间10.0010.1010.25执行时间2.001.000.25开始时间10.0012.2512.00完成时间12.0013.2512.25周转时间23.152带权周转时间13.158作业123提交时间10.0010.1010.25执行时间2.001.000.25开始时间10.0012.0013.00完成时间12.0013.0013.25周转时间2.002.903.00带权周转时间12.912平均周转时间t=2.63平均带权周转时间w=5.3平均周转时间t=2.38平均带权周转时间w=4.05最短作业优先调度算法性能好些,因为平均周转时间和平均带权周转时间都要比先来先服务调度算法短。
第六章
1、简述死锁的防止与死锁的避免的区别。
1、答:死锁的防止是系统预先确定一些破坏死锁必要条件资源分配策略,进程按规定申请资源,系统按预先规定的策略进行分配,从而防止死锁的发生。 而死锁的避免是当进程提出资源申请时系统测试资源分配,仅当能确保系统安全时才把资源分配给进程,使系统一直处于安全状态之中,从而避免死锁。