诚毅学院操作系统期末复习(2014-2015)答案

发布时间 : 星期六 文章诚毅学院操作系统期末复习(2014-2015)答案更新完毕开始阅读

lock=0;

}while(1);

12、 请写出“交换”的原子指令?给出利用“交换”指令实现互斥的算法。

void swap(int *a,int *b){ int temp; temp=*a;

*a=*b; *b=temp;

}

互斥算法:

int lock=0(初始=false); int key; do{

key=1; do {

swap(&lock,&key); } while(key==1); 临界区 lock=0; }while(1);

13、 什么叫做进程同步?

一组进程,为了协调其推进速度,在某些点处需要相互等待或者唤醒,进程之间这种相互制约的关系称为进程同步。

14、 请给出信号量类型的定义。

“信号量”是一个具有非负初值的整型变量,并且有一个队列与它关联。

15、 信号量变量的初值有什么要求?

初值必须是非负整数

同步的信号量初值一般为0 互斥的信号量初值一般为1

16、 什么叫做原语?

一段不可间断执行的程序称为原语

17、 分别写出对信号量进行P操作和V操作的操作原语。

P操作原语:

void P(semaphore *s){ s->value--; If(s->value<0)

asleep(s->queue); }

V操作原语:

void V(semaphore *s){

s->value++; If(s->value<=0) wakeup(s->queue); }

18、 请给出信号量元素s.value与s.queue之间的关系。

19、 说出初值分别是0、1、n(>1的值)时信号量的作用。

0为同步 1为互斥

N为子资源个数

20、 某图书馆阅览室有50个座位。进入阅览室的读者需要在登记簿上登记,登记后,如

果有空座位,安排到对应位置上;如果没有空座位,要求在入口等待。当读者离开阅览室时,进行注销登记。此时,如果有读者等待,唤醒等待读者进行阅览室。使用信号量、PV操作实现对阅览室进行管理。 【参考答案】 公共变量:

enum seat[50];(free,used) semaphore S;(50) semaphore mutex;(1)

进入登记控制: int Enter(){ int i; P(S); P(mutex);

for(i=0;i<50;i++)

if(seat[i]==free) break; seat[i]=used; V(mutex); return i; }

离开注销登记控制: 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];

联系合同范文客服:xxxxx#qq.com(#替换为@)