【2017年整理】进程同步典型例题(操作系统)
进程同步练习题
1. 在公共汽车上,司机和售票员的工作流程如图所示。为保证乘客的安全,司机和售票员应密切配合协调工作。请用信号量来实现司机与售票员之间的同步。
图 司机和售票员工作流程图
约束:怎么密切配合协调工作才能保证安全呢?
关车门之后再启动车辆;利用前驱图解释
到站停车之后再开车门;
根据约束定义信号量;
关车门和启动车辆需要一个信号量进行同步S1;到站停车和开车门之间需要一个信号量进行同步S2;
建立几个进程呢?
为司机建立一个进程Driver;
为售票员建立一个进程Conductor;
Driver:
Repeat
启动车辆;
正常行驶;
到站停车;
Until false;
Conductor:
Repeat
关车门;
售票;
开车门;
Until false;
加入同步关系:
Var s1,s2:semorphore=0,0;
Driver:
Repeat
Wait (s1);
启动车辆;
正常行驶;
到站停车;
Signal(s2)
Until false;
Conductor:
Repeat
关车门;
Signal(s1);
售票;
Wait(s2)
开车门;
Until false;
main()
{
Driver();
Conductor ();
}
2. 桌子上有一只盘子,盘子中只能放一只水果。爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。用PV操作实现他们之间的同步机制。
分析:
①约束:
爸爸和妈妈竞争盘子,往盘子放水果,爸爸在放时,妈妈等待,或者相反;
爸爸和女儿要同步,即爸爸放完苹果之后通知女儿来吃;同时女儿吃完之后要通知盘子可用;
妈妈和儿子要同步,即妈妈放完橘子之后通知儿子来吃;同时儿子吃完之后要通知盘子可用;
② 经上述分析可知:
需要3个信号量:S1表示临界资源盘子,初值1;爸爸和女儿需要一个信号量进行同步S2=0
妈妈和儿子需要一个信号量进行同步S3=0;
建立进程?
爸爸: 妈妈: 女儿: 儿子:
Repeat repeat repeat repeat
取一个苹果; 取一个橘子; 从盘子取一个苹果; 从盘子取一个橘子;
放入盘子; 放入盘子 吃苹果; 吃橘子;
Until false; Until false; Until false; Until false;
④ 加入同步关系。
爸爸: 妈妈: 女儿: 儿子:
Repeat repeat repeat repeat
wait(S2); wait(S3);
取一个苹果; 取一个橘子; 从盘子取一个苹果; 从盘子取一个橘子;
Wait(S1); Wait(S1); signal(S1); signal(S1);
放入盘子; 放入盘子 吃苹果; 吃橘子;
Signal(S2); Signal(S3);
Until false; Until false; Until false; Until false;
3. a,b两点之间是一段东西向的单行车道,现要设计一个自动管理系统,管理规则如下:
(1)当ab之间有车辆在行驶时同方向的车可以同时驶入ab段,但另一方向的车必须在ab段外等待;
(2)当ab之间无车辆在行驶时,到达a点(或b点)的