1,叙述进程和程序的主要区别。
解:进程和程序是两个既有联系又有区别的两个概念,它们的主要区别如下:
(1)程序是指令的有序集合,其本身没有任何运行的含义,它是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。
(2)程序的存在是永久的。而进程是有生命期的,它因创建而产生,因调度而执行,因得不到资源而暂停,因撤消而消亡。
(3)程序仅是指令的有序集合。而进程则由程序,数据和进程数据块组成。
(4)进程与程序之间不是一一对应的,即同一个程序同时运行与若干不同的数据集合上,它将属于若干个不同的进程;而一个进程可以执行多个程序。
2,在测量控制系统中,数据采集任务把所采集的数据送入一单缓冲区;计算任务从该单缓冲区中取出数据进行计算。试写出利用信号量机制实现两者共享单缓冲区的同步算法。
解:在本题中,应设置两个信号量SF SE ,信号量SF表示缓存区中是否有可供打印的计算结果,其初值为0;信号量SE 用于表示缓冲区有无空位置存放新的信息,其初值为1。
本题的同步描述如下:
1 semaphore se=1; 2 semaphore sf=0; 3 main() 4 { 5 cobegin 6 get(); 7 compute(); 8 coend 9 } 10 get() 11 { 12 while(采集工作未完成) 13 { 14 采集一个数据; 15 p(se); 16 将数据送入缓冲区中; 17 v(sf) 18 } 19 } 20 compute() 21 { 22 while(计算工作未完成) 23 { 24 p(sf) 25 从缓冲区中取出数据; 26 v(se); 27 进行数据计算; 28 } 29 }
3、下图给出了四个进程合作完成某一任务的前趋图,试说明这四个进程间的同步关系,并用p,v操作作描述它。
解:图说明任务启动后S1先执行。当S1结束后,S2,S3可以开始执行。S2,S3完成后,S4才能开始执行。为了确保这一执行顺利,设3个同步信号量b2,b3,b4分别表示进程S2,S3,S4是否可以开始执行,其初值均为0。这四个进程的同步描述如下:
1 semaphore b2=0 2 semaphore b3=0 3 semaphore b4=0 4 Main() 5 { 6 Cobegin 7 S1(); 8 S2(); 9 S3(); 10 S4(); 11 Coend 12 } 13 S1() 14 { 15 V(b2); 16 V(b3); 17 } 18 19 S2() 20 { 21 P(b2); . 22 V(b4) 23 } 24 S3() 25 { 26 P(b3) . 27 V(b4) 28 } 29 S4() 30 { 31 P(b4); 32 P(b4); 33 }
4.某系统的进程状态转换图如下图所示,请说明:
(1) 引起各种状态转换的典型事件有哪些?
(2) 当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作一次状态转换,在什么情况下,当一个进程发生转换3时能立即引起另一个进程发生转换1?
(3) 试说明是否会发生下述因果转换:
2---->1
3---->2
4---->1
解:(1)在本题所给的进程状态图中,存在四种状态转换.
当进程调度程序从就绪队列中选取一个进程投入运行引起转换, 1;
正在执行的进程如因时间片用完而被暂停执行就会引起转换2;
正在执行的进程因等待的事件尚未发生而无法执行(如进程请求完成I/O)则会引起转换3;
当进程等待的事件发生时(如I/O完成)则会引起转换4.
(2) 如果就绪队列非空,则一个进程的转换3会立即引起另一个进程的转换1.这是因为一个进程发生转换3意味着正在执行的进程由执行状态变为阻塞状态1.这时处理机空闲,进程调度程序必然会从就绪队列选取一个进程并将他投入运行,因此只要就绪队列非空,一个进程的转换3能立即引起另一个进程的转换1.
(3)所谓因果转换指的是有两个转换,一个转换的发生会引起另一个转换的发生,前一个转换称为因,后一个称为国,这两个转换称为因果转换,当然这种因果关系并不是什么时候都能发生,而是在一定条件下才会发生.
2---->1当进程发生转换2时,就必然引起另一进程的转换1.因为当发生转换2时,正在执行的进程从执行状态转变为就绪状态,进程调度程序必然会从就绪队列选取一个进程投入运行,即发生转换1.
3---->2某个进程的转换3决不可能引起另一进程发生转换2,这是因为当前执行进程从执行状态变为阻塞状态,不可能又从执行状态转变为就绪状态,
4---->1当处理机空闲且就绪队列为空是,某一进程的转换4就会引起该进程的转换1,因为此时从阻塞状态变为就绪状态,因而调度程序就会将就绪队列中的此进程投入运行
5 在单处理机的分时系统中,分配给进程P的时间片用完后,系统进行切换,结果调度到的仍然是进程P,有可能出现上述情形吗?如果可能请说明理由?
解,有可能出现上述情况。例如,若在进程P时间片用完后,被追回到就绪队列时,就绪队列为空,这样进程P 就是就绪队列中唯一的一个进程,于是调度程序选种的进程必然是进程P,
又如在按优先级调度的系统中,就绪队列按进程优先级排列,在进程P时间片用完后回到就绪队列时,若其优先级高于当前就绪队列中的其它进程,则它排在就绪队列之首,从而再次被调度程序选种并投入运行。
6 桌上有一个空盘,允许存放一只水果。爸爸可向盘中放苹果,也可以向盘中放橘子,儿子专等吃盘中的橘子,女儿专等吃盘中的苹果。规定当盘空时只能放一只水果供吃着取用,请用p,v原语实现爸爸,儿子,女儿三个并发进程的同步。
解,在本题中,应设置三个信号量S,SO,Sa,信号量S表示盘子是否为空,
信号量So表示盘子是否有橘子,信号量Sa表示盘子是否有苹果,其初值为0。同步描述如下:
1 semaphore s=1; 2 semaphore sa=0; 3 semaphore so=0; 4 main() 5 { 6 cobegin 7 father(); 8 son(); 9 daughter(); 10 coend 11 } 12 father() 13 { 14 while(1) 15 { 16 p(S) 17 将水果放入盘中: 18 if(放入的是橘子) v(So); 19 else 20 v(Sa); 21 } 22 } 23 son() 24 { 25 while(1) 26 { 27 p(So) 28 从盘子中取出橘子; 29 v(s); 30 吃橘子; 31 } 32 } 33 daughter() 34 { 35 while(1) 36 { 37 p(Sa) 38 从盘子中取出橘子; 39 v(s); 40 吃苹果; 41 } 42 }
7 (上海交通大学1996年试题)哲学家甲请哲学家乙,丙,丁到某处讨论问题,约定全体到齐后开始讨论;在讨论的间隙四位哲学家进餐,每位进餐是都需要使用刀,叉各一把,餐桌上的布置如图2.9所示。请用信号量及p,v原语操作说明四位哲学家的同步,互斥过程。
解,在本题中,应设置四个信号量fork1,fork2,knife1,knife2,其初值均为1,分别表示叉1,叉2,刀1,刀2是否可用。同步描述如下:(注意和5位哲学家就餐问题的区分,同时注意每次都是先拿刀后拿叉)
1 semaphore fork1=1; 2 semaphore fork2=1; 3 semaphore knife1=1; 4 semaphore knife2=1; 5 main() 6 { 7 cobegin 8 Pa(); 9 Pb(); 10 Pc(); 11 Pd(); 12 coend 13 } 14 Pa() 15 { 16 while(1) 17 { 18 p(knife1); 19 P(fork1); 20 进餐; 21 V(knife1); 22 V(fork1); 23 讨论问题; 24 } 25 } 26 Pb() 27 { 28 while(1) 29 { 30 p(knife2); 31 P(fork1); 32 进餐; 33 V(knife2); 34 V(fork1); 35 讨论问题 36 } 37 } 38 Pc() 39 { 40 while(1) 41 { 42 p(knife2); 43 P(fork2); 44 进餐; 45 V(knife2); 46 V(fork2); 47 讨论问题; 48 } 49 } 50 Pd() 51 { 52 while(1) 53 { 54 p(knife1); 55 P(fork2); 56 进餐; 57 V(knife1); 58 V(fork2); 59 讨论问题 60 } 61 }
8.某数据库有一个写进程,多个读进程,他们之间读,写操作的互斥要求是:写进程正在写该数据库时不能有其他进程读该数据库,读进程之间不互斥,可以同时读该数据库.请用信号量P.V操作描述这一组进程的工作进程.
解:在本题中,允许读进程同时读数据库,但写进程正在写数据库时不允许其他进程读数据库,也不允许其他进程写该数据库.为了解决读,写进程之间的同步,应设置两个信号量和一个共享变量:读互斥信号量rmutex,用于使读进程互斥地访问共享变量count,其初值为1;写互斥信号量wmutex,用于实现写进程与读进程的互斥及写进程与写进程的互斥,其初值为1;共享变量count,用于纪录当前正在读数据库的读进程数目,初值为0.其工作、过程如下:
1 semaphore rmutex=1; 2 semaphore wmutex=1; 3 int count=0; 4 main() 5 { 6 cobegin 7 reader(); 8 writer(); 9 coend; 10 } 11 reader() 12 { 13 while(1) 14 { 15 p(rmutex); 16 if (count==0) p(wmutex); 17 count++; 18 v(rmutex); 19 读数据库; 20 p(rmutex); 21 count--; 22 if (count==0) v(wmutex); 23 v(rmutex); 24 } 25 } 26 27 writer() 28 { 29 while (1) 30 { 31 p(wmutex); 32 写数据库; 33 v(wmutex); 34 } 35 }
在本题中,要注意对信号量rmutex意义的理解.rmutex是一个互斥信号量,用于使读进程互斥地访问共享变量count,该信号量并不表示读进程的数目,表示读进程的数目的是共享变量count.当一个读进程要读数据库时,应将读进程计数count加1;如果此前数据库无读进程,还应对写进程互斥信号量wmutex做p操作,这样,若数据库中无写进程,则通过p操作阻止写进程写,若数据库有无写进程,则通过p 操作让读进程等待.
9 (华中理工大学1999年试题)设公共汽车上,司机和售票员的活动分别表示是:
司机的活动:启动车辆;
正常行车;
到站停车;
售票员的活动:
在汽车不断的到站,停车,行使过程中,这两个活动有什么 同步关系?用信号量及p,v操作实现它们的同步。
解,在汽车行使过程中,司机活动和售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开始信号后开始启动车辆,在汽车正常行使工程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客上下车。因此司机启动车辆的动作必须与售票员关车取得同步,售票员开车门的动作也必须与司机停车的动作取得同步,
在本题中,应设置两个信号量,S1,S2,S1表示是否允许司机启动车辆,其初值为0,S2表示是否允许售票员开门,其初值为0。用p,v原语描述如下:
1 semaphore S1=0; 2 semaphore S2=0; 3 main() 4 { 5 cobegin 6 driver(); 7 busman(); 8 coend 9 } 10 11 driver() 12 { 13 while(1) 14 { 15 p(S1); 16 启动车辆; 17 正常行车; 18 到站停车; 19 V(s2); 20 } 21 } 22 busman() 23 { 24 while(1) 25 { 关车门; 26 v(s1); 27 售票; 28 p(s2); 29 开车门; 30 上下乘客; 31 } 32 }
用p,v操作来控制现实生活中的操作流程是一类常见的试题。这类试题要求解题者能将生活中的控制流程用形式化的方式表达出来。
11.设有一个发送者进程,其流程图如图2.10 所示. S 是用于实现进程同步的信号量,MUTEX 用于实现进程互斥的信号量.试问流程图中的 A B C D 四框中应填写什么?假定缓冲区有无限多个, S 和 MUTEX 的初值应为多少?
解:由上述分析可知, A B C D 四框应分别填入:
A框 P(MUTEX)
B框 V(MUTEX)
C框 P(S)
D框 P(MUTEX)
开始时,消息链上没有可供接收的信息,所以 S 的初值为0 ;互斥信号量 MUTEX 的初值应为1.