假定系统有三个并发进程read、move和print共享缓冲器B1和B2。进程read负责从输入设备上读信息,每读出一个记录后把它存放到缓冲器B1中。进程move从缓冲器B1中取出一记录,加工后存入缓冲器B2。进程print将B2中的记录取出打印输出。缓冲

admin2012-10-31  33

问题 假定系统有三个并发进程read、move和print共享缓冲器B1和B2。进程read负责从输入设备上读信息,每读出一个记录后把它存放到缓冲器B1中。进程move从缓冲器B1中取出一记录,加工后存入缓冲器B2。进程print将B2中的记录取出打印输出。缓冲器B1和B2每次只能存放一个记录。要求三个进程协调完成任务,使打印出来的与读入的记录的个数和次序完全一样。请用PV操作,写出它们的并发程序。

选项

答案begin SR,SM1,SM2,SP:semaphore; B1,B2:record; SR:=1;SM1:=0;SM2:=1;SP:=0; cobegin process read X:record; begin R:{接收来自输入设备上一个记录}; X:=接收一个记录; P(SR); B1:=X; V(SM1); goto R; end; Process move Y:record; begin M:P(SM1); Y:=B1: V(SR); 加工Y: P(SM2); B2:=Y; V(SP); goto M; end; Process print Z:record; begin P:P(SP); Z:=B2: V(SM2); 打印Z; goto P; end; coend; end;

解析 本题要注意read进程读入一个记录放入缓冲器B1,被move进程取走加工后并没有存回缓冲器B1,而是存到了B2。所以read进程和move进程之间存在进程的同步操作,move进程和print进程之间存在进程的同步操作,而read进程和print进程之间不存在进程的同步操作。
转载请注明原文地址:https://jikaoti.com/ti/ZVEaFFFM
本试题收录于: 操作系统题库理工类分类
0

最新回复(0)