最新青岛理工大学操作系统作业答案.docx

上传人:b****3 文档编号:814181 上传时间:2022-10-13 格式:DOCX 页数:20 大小:144.22KB
下载 相关 举报
最新青岛理工大学操作系统作业答案.docx_第1页
第1页 / 共20页
最新青岛理工大学操作系统作业答案.docx_第2页
第2页 / 共20页
最新青岛理工大学操作系统作业答案.docx_第3页
第3页 / 共20页
最新青岛理工大学操作系统作业答案.docx_第4页
第4页 / 共20页
最新青岛理工大学操作系统作业答案.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

最新青岛理工大学操作系统作业答案.docx

《最新青岛理工大学操作系统作业答案.docx》由会员分享,可在线阅读,更多相关《最新青岛理工大学操作系统作业答案.docx(20页珍藏版)》请在冰豆网上搜索。

最新青岛理工大学操作系统作业答案.docx

最新青岛理工大学操作系统作业答案

第1章作业

综合题

1、设内存中有三道程序A、B、C,它们按A、B、C的优先次序执行。

它们的计算和I/O操作时间如表所示(单位:

ms)。

三道程序的操作时间

程序

操作

A

B

C

计算

30

60

20

I/O

40

30

40

计算

10

10

20

假设三道程序使用相同设备I/O操作,即程序是以串行方式使用设备,调度程序的执行时间忽略不计,试计算出在单道和多道两种情况下,完成这三道程序各要花多少时间?

要求画出多道运行的时序图。

(假定在多道方式下采用的是基于优先级的非抢占调度程序)

解:

采用单道方式运行这三道程序,运行次序为A、B、C,故总的运行时间为:

(30+40+10)+(60+30+10)+(20+40+20)=260ms

采用多道方式运行这三道程序,A、B、C这三道进程的运行存在并行,故总的运行时间如图所示为180ms

第二章

1、如图所示,有一计算进程和一打印进程,它们共享一个单缓冲

区,计算进程不断地计算出结果并将它放入单缓冲区中,打印

进程则负责从单缓冲区中取出每一个结果进行打印。

请用信号量来实现它们的同步关系。

答:

方法一:

从临界资源的角度来思考:

本题中有两类临界资源:

第一类是计算进程争用的空闲缓冲区,初始状态下有一个空闲缓冲可供使用,设置信号量empty,初值为1;第二类是打印进程争用的已放入缓冲区中的打印结果,初始状态下缓冲区中无结果可打印,设置信号量full,初值为0。

varfull,empty:

semaphore:

=0,1;

begin

parbegin

cp:

begin

repeat

computernextnumber;

wait(empty);

addthenumbertobuffer;

signal(full);

untilfalse

end

pp:

begin

repeat

wait(full);

takeanumberfrombuffer;

signal(empty);

printthenumber;

untilfalse

end

parend

end

2、试用信号量解决读者—写者问题,使得写者与读者优先级根据到达顺序确定(读写平等)。

然后用到达序列:

R1,R2,W1,R3,R4,W2进行测试

列出类似如下测试结果

进程

行为

rmutex=1

wmutex=1

Readcount=0

状态

备注

R1

到达

rmutex=0

rmutex=1

wmutex=0

Readcount=1

执行/就绪

第1位读者

1)典型错误代码讲解:

不增加任何信号量

Varrmutex,wmutex:

semaphore∶=1,1;

Readcount:

integer∶=0;

begin

parbegin

Reader:

begin

repeat

wait(rmutex);

ifReadcount=0thenwait(wmutex);

Readcount∶=Readcount+1;

signal(rmutex);

performreadoperation;

wait(rmutex);

Readcount∶=Readcount-1;

ifReadcount=0thensignal(wmutex);

signal(rmutex);

untilfalse;

end

writer:

begin

repeat

ifreadcount>0thenwait(rumtex);

wait(wmutex);

performwriteoperation;

signal(rmutex);

signal(wmutex);

untilfalse;

end

parend

end

到达序列:

R1,R2,W1,R3,R4,W2

进程

行为

rmutex=1

wmutex=1

Readcount=0

状态

备注

R1

到达

rmutex=0

rmutex=1

wmutex=0

Readcount=1

执行/就绪

第1位读者

R2

到达

rmutex=0

rmutex=1

Readcount=2

执行/就绪

W1

到达

rmutex=0

阻塞1

阻塞

Readcount>0

R3

到达

阻塞1

阻塞

rmutex=0

R4

到达

阻塞2

阻塞

rmutex=0

W2

到达

阻塞3

阻塞

rmutex=0

R1

离开

阻塞4

阻塞

rmutex=0

R2

离开

阻塞5

阻塞

rmutex=0

产生死锁

2)解决方案

varS,rmutex,wmutex:

semaphore:

=1,1,1;

readcount:

integer:

=0;

reader:

begin

repeat

wait(S);

wait(rmutex);

ifreadcount=0thenwait(wmutex);

readcount:

=readcount+1;

signal(rmutex);

signal(S);

performreadoperation;

wait(rmutex);

readcount:

=readcount-1;

ifreadcount=0thensignal(wmutex);

signal(rmutex);

untilfalse

end

writer:

begin

repeat

wait(S);

wait(wmutex);

performwriteoperation;

signal(wmutex);

signal(S);

untilfalse

end

到达序列:

R1,R2,W1,R3,R4,W2

进程

行为

S=1

rmutex=1

wmutex=1

readcount=0

备注

R1

到达

S=0

 

S=1

rmutex=0

rmutex=1

 

wmutex=0

 

readcount=1

第一个读者

执行/就绪

R2

到达

S=0

 

S=1

rmutex=0

rmutex=1

 

 

readcount=2

执行/就绪

W1

到达

S=0

阻塞1

第一个写者

R3

到达

阻塞1

R4

到达

阻塞2

W2

到达

阻塞3

R1

离开

rmutex=0

rmutex=1

readcount=1

R2

离开

rmutex=0

rmutex=1

wmutex=1

readcount=0

负责唤醒W1

W1

被唤醒

wmutex=0

执行/就绪

W1

离开

S=1

wmutex=1

负责唤醒R3

3、请给出一个写者优先的“读者—写者”问题的算法描述。

然后用到达序列:

R1,R2,W1,R3,R4,W2进行测试

列出类似如下测试结果

进程

行为

rmutex=1

wmutex=1

Readcount=0

状态

备注

R1

到达

rmutex=0

rmutex=1

wmutex=0

Readcount=1

执行/就绪

第1位读者

答:

为使写者优先,可在原来的读优先算法基础上增加一个初值为1的信号量S,使得当至少有一个写者准备访问共享对象时,它可使后续的读者进程等待写完成。

初值为0的整型变量writecount用来对写者进行计数;初值为1的互斥信号量mutex用来实现多个写者对writecount的互斥访问。

读者与写者进程算法描述如下:

varS,mutex,rmutex,wmutex:

semaphore:

=1,1,1,1;

writecount,readcount:

integer:

=0,0;

reader:

begin

repeat

wait(S);

wait(rmutex);

ifreadcount=0thenwait(wmutex);

readcount:

=readcount+1;

signal(rmutex);

signal(S);

performreadoperation;

wait(rmutex);

readcount:

=readcount-1;

ifreadcount=0thensignal(wmutex);

signal(rmutex);

untilfalse

end

writer:

begin

repeat

wait(mutex);

ifwritecount=0thenwait(S);

writecount:

=writecount+1;

signal(mutex);

wait(wmutex);

performwriteoperation;

signal(wmutex);

wait(mutex);

writecount:

=writecount-1;

ifwritecount=0thensignal(S);

signal(mutex);

untilfalse

end

到达序列:

R1,R2,W1,R3,R4,W2

进程

行为

S=1

mutex=1

rmutex=1

wmutex=1

writecount=0

readcount=0

备注

R1

到达

S=0

 

S=1

 

rmutex=0

rmutex=1

 

wmutex=0

 

readcount=1

第一个读者

执行/就绪

R2

到达

S=0

 

S=1

rmutex=0

rmutex=1

 

 

readcount=2

执行/就绪

W1

到达

S=0

mutex=0

 

mutex=1

 

阻塞1

 

writecount=1

第一个写者

R3

到达

阻塞1

R4

到达

阻塞2

W2

到达

mutex=0

mutex=1

 

阻塞2

writecount=2

 

R1

离开

rmutex=0

rmutex=1

readcount=1

R2

离开

rmutex=0

rmutex=1

wmutex=1

readcount=0

负责唤醒W1

W1

被唤醒

wmutex=0

执行/就绪

W1

离开

mutex=0

mutex=1

wmutex=1

 

writecount=1

负责唤醒W2

3、假设一个系统中有4个进程,它们的到达时间和服务时间如表所示,忽略I/O以及其他开销时间,若分别按先来先服务(FCFS)、非抢占及抢占的短进程优先(SPF)、高响应比优先(HRRN)、

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1