编辑: yyy888555 | 2019-07-02 |
出来时,注销;
登记表同时只能由一个人使用;
用P、V原语描述一个读者的使用过程 进程管理习题 信号量SN,表示可用座位数,初值为100;
信号量sb, 表示登记表是否正在使用,初值为1;
reader(int i){ enter();
阅读;
outer()} enter( ){ P(SN) P(sb) 登记;
V(sb);
} outer( ){ P(sb);
注销;
V(sb);
V(SN);
} 进程管理习题 有3个进程PA,PB和PC合作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;
PB将缓冲区1的内容复制到缓冲区2,每执行一次复制一个记录;
PC将缓冲区2的内容打印出来,每执行一次打印一个记录.
缓冲区的大小等于一个记录大小;
请用P,V操作来保证文件的正确打印 进程管理习题 设置4个信号量:empty
1、empty
2、full
1、full2empty1及empty2分别表示缓冲区1及缓冲区2是否为空,初值为1full1,full2分别表示缓冲区1及缓冲区2是否有记录可供处理,其初值为0 缓冲区1 缓冲区2 PA 从磁盘读入 PB 复制 PC 打印 进程管理习题 PA() 从磁盘读一 个记录;
P(empty1);
将记录存入 缓冲区1;
V(full1);
PB() P(full1);
从缓冲区1中 取出记录;
V(empty1);
P(empty2);
将记录存入缓 冲区2;
V(full2);
PC() P(full2);
从缓冲区2 取一个记录;
V(empty2);
打印记录;
缓冲区1 缓冲区2 PA 从磁盘读入 PB 复制 PC 打印 进程管理习题 公共汽车上,司机和售票员的活动分别为: 司机:启动车辆;
正常行驶,到站停车 售票员: 关车门;
售票;
开车门;
司机P1 售票员P2 启动 关门 正常运行 售票 到站停 开门 进程管理习题 设信号量S1:是否允许司机启动汽车,初值为0, S2:是否允许售票员开门,初值为0 Driver() { While (1) { P(S1);
启动汽车;
正常行车;
到站停车;
V(S2) Busman() { While (1) { 关车门;
V(S1);
售票;
P(S2);
开车门;
上下乘客;
Int s1=0;
Int s2=0;
Main( ) { Cobegin Driver();
Busman();
Coend } 进程管理习题 三个进程P
1、P
2、P3互斥使用一个包含N(N>
0)个单元的缓冲区.P1每次用produce()生成一个正整数并用put()送入缓冲区某已空单元中;
P2每次用getodd()从该缓冲区中取出一个奇数并用countodd()统计奇数个数;
P3每次用geteven()从该缓冲区中取出一个偶数并用counteven()统计偶数个数.请用信号量机制实现这三个进程的同步和互斥活动,并说明所定义信号量的含义.要求用伪码描述. 进程管理习题 互斥信号量:mutex初值为1;
同步信号量:P
1、P2因奇数的放与取而同步,设置信号量odd;
P
1、P3因偶数的放与取而同步,设置信号量even;
P
1、P
2、P3因共享缓冲区而同步,设置信号量empty. 进程管理习题 互斥信号量:mutex初值为1;
同步信号量:P
1、P2因奇数的放与取而同步,设置信号量 odd;
P
1、P3因偶数的放与取而同步,设 置信号量even;
P
1、P
2、P3因共享缓冲 区而同步,设置信号量empty. P1: P(empty);
P(mutex);
put();
V(mutex);
If number%2==0 V(even) Else V(odd);
P2: P(odd);
P(mutex);
getodd();
V(mutex);
V(empty);
countodd();
P3: P(even);
P(mutex);
geteven();
V(mutex);
V(empty);
counteven();
进程管理习题 设自行车生产线上有一支箱子,其中有N个位置(N≥3),每个位置可存放一个车架或一个车轮;