操作系统_作业3_进程同步与互斥
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
班级:08111602 班
学号:1120161918
姓名:李林峰
4. 请用并行语句和 P、V 操作描述图 1 所示的任务执行过程。
Parbegin P1(): S1; V(synch1); S2; S4; V(synch2); S5; V(synch3); P2(): P(synch1); S3; P(synch2); S6; P(synch3); S7;
Parend
图 1. 任务执行过程
5. "理发师睡觉”问题:假设理发店由等待间(n 个座位)和理发间(只有一个 座位)构成。无顾客时,理发师睡觉。顾客先进等待间再进理发间,当顾客 进入理发间发现理发师在睡觉时,则唤醒理发师,请求理发;如果理发师正 在理发,又有顾客到来时,只要有空椅子,他就坐下来等待,如果没有空椅 子,他就离开。请为理发师和顾客各编写一段程序来描述他们的同步问题。
班级:08111602 班
学号:1120161918
姓名:李林峰
操作系统与分布式计算
作业 3 进程的互斥与同步
1. 例举两个现实生活中需要同步与互斥的例子。 同步:去打印店印刷书籍,必须要先印刷好了过后,装订设备才能装订。 互斥:去打印店用一台机器同时打印 2 份文档,2 份文档竞争使用一台
机器形成互斥 进程互斥 // 等候理发的顾客数减少 // 开放临界区 // 理发 // 理发师增加
// 进程互斥 // 有空椅子,留下
// 等候理发的顾客数增加 // 唤醒理发师 // 开放临界区 // 占用理发师 // 理发
// 没有空椅子,离开
3
实现原语执行的不可分割性:通常由硬件来实现,也可以由软件通过中 断屏蔽的方法来实现。
3. 如果 P、V 操作不作为原语,即可分割执行,那么是否还可以用于解决互斥 问题?若不能,举例说明。
如果 P、V 操作不作为原语,那么不可用于解决互斥问题。
因为如果可以分割,P 操作:s = s-1,翻译成机器语言为:load R1, s; load R2, 1; sub R1, R2;。此时,他们之间的操作可以分割执行,假设 有两个进程 P1、P2,s 初值为 1,当 P1 进入 P 操作时,s 大于 0,可以进入, 因此会执行上面的机器语言,将 s 的值取出来,放入 R1 寄存器中,而此时, 有可能 P2 进程要进入临界段,因此,它也比较 s 的值是否小于 0,因为此时 s 的值仍为 1,所以 P2 也进入临界段,出现错误。
2
班级:08111602 班
学号:1120161918
姓名:李林峰
定义变量:
①. waiting:记录等候理发的顾客数,初值 0。 ②. customers:记录等待理发的顾客数,并用于阻塞理发师,初值 0。 ③. barbers:记录正在等候理发的理发师数目,初值 1。
④. mutex:用于互斥,初值 1。
程序描述:
Parbegin Barber(): while(1) { P(customers); P(mutex); waiting--; V(mutex); CutHair(); V(barbers); } Customer(): P(mutex); if(waiting < chairs) { waiting++; V(customers); V(mutex); P(barbers); GetHaircut(); } else { V(mutex); }
2. 何谓原语?它与系统调用有何区别?如何实现原语执行的不可分割性?
原语是由若干条机器指令构成的可完成特定功能的程序段,它是一个 “原子操作过程,作为一个整体而不可分割,即要么全都完成,要么全都不 做,是完成某种功能且不被分割或不被逻辑上中断执行的操作序列。
它与系统调用的区别:原语主要强调操作的不可分割性,可以认为是一 个不可中断的子程序调用,但是系统调用是由用户态进入核心态,虽然系统 调用一般也不被中断,但是如果有更高更紧迫的系统调用的话,还是能够打 断原来的系统调用的。