离开注销登记控制: void Leave(int j){ P(mutex); seat[j]=free; V(mutex); V(S); }
每个读者的活动: void Reader(){ int k; k=enter(); 阅读; Leave(k); }
21、 某公共汽车上司机、售票员、乘客的活动如下:
司机活动: 售票员活动: Driver () { Conductor () { do{ do { 启动车辆; 关车门; 正常行车; 售票; 到站停车; 开车门; } while (1); } while (1); } } 乘客活动: Customer () { 乘客上车; 乘坐; 乘客下车; }; 为安全起见,要求:
(1) 必须乘客全部上车,才能关闭车门;假设车门只允许一个乘客通过,且有自动
判别第一个下车乘客和最后一个上车乘客的装置,且遵守先下、后上原则;
(2) 关闭车门,才能启动汽车; (3) 车辆到站停稳,才能打开车门。
初始时,车辆停靠在站点上,车门是打开着。
请用信号量与PV操作实现对司机、售票员和乘客之间的同步。 【参考答案】
semaphore dc1,dc2;(0,0) semaphore cc1,cc2;(1,0) semaphore metux;(1); 乘客活动: 司机活动: 售票员活动: Customer(){ Driver(){ Conductor(){ P(mutex); do{ do{ if(最后一个上车乘客?)V(cc2); P(dc1); P(cc2); 乘客上车; 启动车辆; 关车门; V(mutex); V(dc1) 正常行车; 乘坐; 到站停车; 售票; P(mutex); V(dc2); P(dc2); 乘客下车; }while(1); 开车门; if(是第一个下车乘客?) P(cc1);
22、 在Linux操作系统中,sem_wait(sem_t *s) 和sem_post(sem_t *s)分别表示对信号量
的什么操作?
sem_wait(sem_t *s):P操作 sem_post(sem_t *s):V操作
23、 假设有两个进程,P1和P2,其中P1有一个活动act1、P2有一个活动act2;要求
act1执行完成后才能执行act2,用信号量“semaphore S;”实现对两个活动进行控制。请给出其实现的一般规则。
24、 P1和P2为两个同步进程. 要求P2完成动作B后P1才能执行动作A. 请根据要求
填写S的初值、P操作和V操作。 semaphore S; (initial value_(1)_) P1:_(2)_动作AP2:动作B_(3)_
25、 请完成下面生产者-消费者程序。
itemtype B[n];//shared variables(n个空箱子)
semaphore S1,S2,mutex; (初值: S1.value=___; S2.value=_____; mutex.value=____) int in,out;//shared variables void producer( ){ while(1){
produceitem(&item); ________ P(mutex); B[in]:= item; in:=(in+1) % k; _________ V(S2); } }
void consumer( ){ while(1){ P(s2); P(mutex); x:=B[out];
out:=(out+1) % k; V(mutex); ________ consume x; } }
26、 请完成如下R-W问题的改进算法。
semaphore r_w_w= ,mutex= ,s= ; int count=0; void Reader() { do{ P(S); P(mutex); count++;
if( ) P(r_w_w); V(mutex) V(s); {读操作} P(mutex); count--;
If(count==0) V(r_w_w); }while(1); }
void Writer() { do{
P(s);
; {写操作}; P(r_w_w);
V(s); }while(1); }
参考P144题25)
27、 什么叫管程(Monitor ,Hansen管程)? 一个管程由哪几部分组成?
管程是一种高级同步机制,一个管程定义一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改善管程中的数据.。
一个管程由四个部分组成,它们是管程名称、局部与管程的共享数据的说明、对数据进行操作的一组过程和对该共享数据赋初值的语句。
28、 请用管程写出Scan和C-scan的磁头调度算法。
29、 请给出在Linux系统中采用共享内存进行进程间通信的一般步骤。(实验二)
第五章 死锁与饥饿
1、 什么叫死锁?在操作系统中,发生死锁有哪些特征?
在多道程序系统中,一组进程中的每一个进程均无限期的等待另一组进程所占有的且不会释放的资源,这种现象称为死锁
参加死锁的进程的数目至少为2,参与死锁的所有进程均等待资源,参与死锁的进程至少有2个占有资源,参与死锁的进程是系统中当前正在运行的进程集合的一个子集。 2、 有哪些类型的死锁?
竞争资源引起的死锁、进程通信引起的死锁、其他原因引起的死锁
3、 从资源分配过程的角度,说明死锁与饥饿的区别?
死锁进程处于等待状态,饥饿处于忙式等待; 死锁等待不会释放的资源,饥饿分配不到资源; 死锁循环等待,饥饿没有循环等待;
4、 参与死锁进程的个数至少几个?如果产生饥饿,发生饥饿的进程至少几个?
至少2个;1个
5、 请给出发生死锁的必要条件(Coffman条件)并加以解析。
资源独占(mutual exclusion) 不可抢占(non preemption) 保持申请(hold-while-applying) 循环等待(circular wait)
6、 有三种死锁的处理方式?
死锁预防---静态的 死锁避免---动态的 死锁检测与恢复
7、 熟悉资源分配图的绘制,以及资源分配图的约简。
8、 死锁预防有哪两种基本策略?
预先分配策略、有序分配策略
9、 请阐述预先分配法。它破坏发生死锁什么条件?
进程在运行前一次性地向系统申请它所需要的全部资源;破坏了保持申请。
10、 请阐述有序分配法。它破坏发生死锁什么条件?
事先将所有资源类完全排序;破坏了循环等待。
11、 如图所示,请给出采用有序分配法、用信号量和PV操作控制各个方向(W、E、
S方向)车辆进行临界区。
资源编号:F (D) =1; F (B) =2; F (A) =3; F(C) =4; Var S1, S2, S3, S4: semaphore; (1, 1, 1, 1)
12、 死锁避免中,什么叫做安全序列?
所谓系统是安全的,是指系统中的所有进程能够按照某一种次序分配资源,并且依次地运行完毕,这种进程序列{P1,P2,…,Pn}就是安全序列。
13、 银行家算法:掌握p154例5-4、p170习题五第9题,及本章的作业。
14、 某系统有资源R={A,B,C}={10,5,7}和进程P={p0,p1,p2,p3,p4}。下面是该系统某进程
提出资源请求预分配后的两个状态,请分别用银行家算法检验是否为安全状态?