logo资料库

操作系统大作业(对问题进行问题分析+流程图+代码).docx

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
操作系统大作业
J I A N G S U U N I V E R S I T Y 操作系统大作业 学号: 姓名: 班级: 2018 年 10 月 3 日
9.有三个进程 R,M,P,其中 R 负责从输入设备读入信息并传送给 M,M 将信 息加工并传送给 P,P 将打印输出,写出下列条件下的并发进程程序描述。 (1)一个缓冲区,其容量为 K。 (2)两个缓冲区,每个缓冲区容量均为 K。 答: (1) 问题思路: 根据题目可以得出本程序的几个操作:(1)R 读入数据;(2)M 读出数据;(3)M 传输数据;(4)P 读出数据。也就是需要定义 4 个操作,因为只有一个缓冲区,且 其容量为 k,所以需要定义一个容量为 k 的缓冲区 buffer[k],并四个操作各自对应一 个信号量 sR,sM1,sP,sM2,并定义一个信号量 mutex 确保程序的互斥。其中操作(1) 读入数据,sR 减一,sM1 加一;操作(2)读入数据,sM1 减一,sM2 加一;操作 (3)读入数据,sM2 减一,sP 加一;操作(4)读入数据,sP 减一,sR 加一。 R 进程 M 进程 P 进程 (2) (3) (1) (4) 缓冲区 int buffer[k]; semaphore mutex,sR,sM1,sP,sM2; int in,out; mutex.value=1; sR,value=k; sM1.value=0; sP.value=0; sM2.value=0; in=0; out=0; … Process R1 {
Int dataR; 将从输入设备读入的信息暂存在 dataR 中; P(mutex); P(sR); Buffer[in]=dataR; In=(in+1) % k; V(sM1); V(mutex); }. Process M1 { Int dataR; P(mutex); P(sM1); dataR=Buffer[out]; out=(out+1) % k; V(sM2); V(mutex); }. Process M2 { Int dataM; 将加工后要传送的信息暂存在 dataM 中; P(mutex); P(sM2); Buffer[in]=dataM; In=(in+1) % k; V(sP); V(mutex); }. Process P1 { Int dataM; P(mutex); P(sP); dataM=Buffer[out]; out=(out+1) % k; V(sR); V(mutex); }.
(2) 问题思路:同(1)中,只不过缓冲区变成了等容量的两个缓冲区,所以将(1)(2) 两个操作在①号缓冲区内进行,(3)(4)两个操作在②号缓冲区内进行。并定义两 个容量为 k 的缓冲区 buffer1[k],buffer2[k]。 R 进程 M 进程 P 进程 (2) (3) (1) (4) 缓冲区① 缓冲区② int buffer1[k],buffer2[k]; semaphore mutex,sR,sM1,sP,sM2; int in,out; mutex.value=1; sR,value=k; sM1.value=0; sP.value=0; sM2.value=0; in=0; out=0; … Process R1 { Int dataR; 将从输入设备读入的信息暂存在 dataR 中; P(mutex); P(sR); Buffer1[in]=dataR; In=(in+1) % k; V(sM1); V(mutex); }. Process M1 { Int dataR; P(mutex);
P(sM1); dataR=Buffer1[out]; out=(out+1) % k; V(sM2); V(mutex); }. Process M2 { Int dataM; 将加工后要传送的信息暂存在 dataM 中; P(mutex); P(sM2); Buffer2[in]=dataM; In=(in+1) % k; V(sP); V(mutex); }. Process P1 { Int dataM; P(mutex); P(sP); dataM=Buffer2[out]; out=(out+1) % k; V(sR); V(mutex); }. 10.假定一个阅览室最多可以容纳 100 人阅读,读者进入和离开阅览室时都必须 在阅览室门口的一个登记表上注册或注销。假定每次只允许一个人注册或注销, 设阅览室内有 100 个座位。 (1)试问:应编制几个程序和设置几个进程?程序和进程的对应关系如何? (2)试用 P、V 操作编写读者进程的同步算法。
答: (1) 应编制一个程序和两个进程。 对应的关系为:一个程序对应多个进程,一个进程对应一个程序。 (2) 问题思路: 可以把阅览室当作一个缓冲区,因为阅览室最多可以容纳 100 人阅读,也就是说缓 冲区的最大容量为 100。而对缓冲区进行的操作只有两种,一种是进阅览室进行阅 读,另一种就是离开阅览室,所以就只需要定义两个进程,一个是 register,另一个 是 cancel。因为同时只允许一个人注册或注销,所以定义一个 mutex 来确保进程的 互斥,保证同时只有一个进程执行。 人数 加 1 剩余椅子数 减 1 阅览室 semaphore mutex=1; semaphore people=0; semaphore chairs=100; void register() { P(chairs); P(mutex); 进入阅览室阅读; V(people); V(mutex); } void cancel() { P(people); P(mutex); 离开阅览室; V(chairs); V(mutex); }
分享到:
收藏