2.在测量控制系统中,数据采集任务把所采集的数据送入一单缓冲区;计算任务从该单缓冲区中取出数据进行计算。试写出利用信号量机制实现两者共享单缓冲区的同步算法。
解:在本题中,应设置两个信号童sf,se,信号量sf表示缓冲区中是否有可供打印的
计算结果,其初值为o;信号量se用于表示缓冲区有无空位置存放新的信息,其初值为1。
本题的同步描述如下: int se=1; int sf=0; main( ) { cobegin get ( ) ; compute ( ); coend } get ( ) {
while (采集工作未完成) {
采集一个数据; p(se);
将数据送入缓冲区; v(sf); }
}
compute ( ) {
while (计算工作未完成) { p(sf);
从缓冲区中取出数据; v(se);
进行数据计算; } }
3.下图给出了四个进程合作完成某一任务的前趋图,试说明这四个进程间的同步关系并用P、V操作描述它。
解:上图说明任务启动后Sl先执行。当S1结束后,S2、S3可以开始执行。S2、S3完成后,S4才能开始执行。为了确保这一执行顺序,设三个同步信号量b2、b3、b4分别表示进程S2、S3、S4是否可以开始执行,其初值均为0。这四个进程的同步描述如下:
int b2=0; int b3=0; int b4=0; main ( ) { cobegin s1 ( );
s2 ( ); s3 ( ); s4 ( ); coend } s1 ( ) { ? v(b2); v(b3); } s2 ( ) { p(b2); ? v(b4); } s3 ( ) { p(b3); ? v(b4); } s4 ( ) {
p(b4);
p(b4); /*因在s2和s3完成后均对b4作了v操作,因此这里要用两个p操作*/
? }
4.某系统的进程状态转换图如下,请说明:
(1)引起各种状态转换的典型事件有哪些?
(2)当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作一次状态转换。在什么情况下,当一个进程发生转换3时能立即引起另一个进程发生转换l?
(3)试说明是否会发生下述因果转换: 2 l 3 4 1 答:(1)在本题所给的进程状态转换图中.存在四种状态转换。当进程调度程序从就绪队 列中选取一个进程投入运行时引起转换1;正在执行的进程如因时间片用完而被暂停执行就会引起转换2;正在执行的进程因等待的事件尚未发生而无法执行(如进程请求完成I/O)则会引起转换3;当进程等待的事件发生时(如I/O完成)则会引起转换4。
(2)如果就绪队列非空,则一个进程的转换3会立即引起另一个进程的转换1。这是因为一个进程发生转换3意味着正在执行的进程由执行状态变为阻塞状态,这时处理机空闲,进程调度程序必然会从就绪队列中选取一个进程并将它投入运行,因此只要就绪队列非空,一个进程的转换3能立即引起另一个进程的转换1。
(3)所谓因果转换指的是有两个转换,一个转换的发生会引起另一个转换的发生,前一个转换称为因,后一个转换称为果,这两个转换称为因果转换。当然这种因果关系并不是什么时候都能发生,而是在一定条件下才会发生。
2 2 1:发生转换2时,就必然引起另一进程的转换1。因为当发生转换2时,正在执行的进程从执行状态变为就绪状态,进程调度程序必然会从就绪队列中选取一个进程投入运行,即发生转换1。
3 2: 某个进程的转换3决不可能引起另一进程发生转换2。这是因为当前执行进程从执行状态变为阻塞状态.不可能又从执行状态变为就绪状态。
4 1: 当处理机空闲且就绪队列为空时,某一进程的转换4就会引起该进程的转换1。因为此时处理机空闲,一旦某个进程发生转换4,就意味着有一个进程从阻塞状态变为就绪状态,因而调度程序就会将就绪队列中的此进程投入运行。
5.某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,厅外的购票者可立即进入,否则需在外面等待。若把一个购票者看作一个进程,请回答下列问题:
(1)用PV操作管理这些并发进程时,应怎样定义信号量,写出信号量的初值以及信号量各种取值的含义。
(2)根据所定义的信号量,把应执行的P、V操作填入下面横线上,以保证进程能够正确地并发执行。
(3)若欲购票者最多为n个人,写出信号量可能的变化范围(最大值和最小值)。
答:(1)定义一信号量S,初始值为20,其意义如下: S>0 S的值表示可继续进入售票厅的人数 S=0 表示售票厅中已有20名顾客(购票者) S<0 |S|的值为等待进入售票厅的人数
(2)根据所定义的信号量,把应执行的P、V操作填入下面横线上,以保证进程能够正确地并发执行。
COBEGIN PROCESS Pi(i=1,2,??) begin; P(S)
进入售票厅;