阅读以下关于利用信号量机制解决进程同步与互斥方面的应用实例,回答问题1至问题3。 [说明] 在多道程序系统中,进程是并发执行的。这些进程间存在着不同的相互制约关系,主要表现为同步和互斥两个方面。信号量机制是解决进程间同步与互斥的有效方法。下面是

admin2010-05-08  30

问题 阅读以下关于利用信号量机制解决进程同步与互斥方面的应用实例,回答问题1至问题3。
   [说明]
   在多道程序系统中,进程是并发执行的。这些进程间存在着不同的相互制约关系,主要表现为同步和互斥两个方面。信号量机制是解决进程间同步与互斥的有效方法。下面是信号量应用实例。
   下图所示代码是在μC/OS-II操作系统上运行的一个应用的主函数。该函数创建了任务Task1和Task2,其中Task1实现从键盘读入一个字符的功能,Task2将该字符输出到屏幕,它们使用信号量和一个公共变量buffer来传递该字符。
   主函数、Task1和Task2中所调用的函数原型说明如下:
   a.创建一个信号量:OS EVENT*#OSSemCreate(INT16Uvalue);
   b.创建一个任务:INT8U OSTaskCreate(void(*#task)(void*#pd),void*#pdata,OS_STK *#ptos,INT8U prio);
   c.开始执行多任务:void OSStart(void);
   d.从键盘读入一个字符:char scanc();
   e.输出一个字符至屏幕:void printc(char ch);
   f.发出一个信号量:INT8U OSSemPost(OS EVENT*#pevent);
   g.等待一个信号量:void OSSemPend(OS_EVENT*#pevent,INT16U timeout,INT8U *#err)

设S为信号量,P、V操作的形式化定义如下图(a)和(b)所示,请完成该形式化定义,将应填入(n)处的内容写在答题纸的对应栏中。

选项

答案(1)S-- (2)S<O (3)S++ (4)S<=0

解析 信号量是荷兰著名的计算机科学家Dijkstra于1965年提出的一个同步机制,其基本思想是在多个相互合作的进程之间使用简单的信号宋同步。
   在操作系统中,信号量是表示资源的实体,除信号量的初值外,信号量的值仅能由 P操作(又称Wait操作)和V操作(又称Signal操作)改变。
   设S为一个信号量,P(S)执行时主要完成的功能为:先执行S=S-1,若S≥0,则进程继续运行;若S<O,则阻塞该进程,并将它插入该信号量的等待队列中。
   V(S)执行时主要完成的功能为:先执行S=S+1,若S>O,则进程继续执行;若 S≤0,则从该信号量等待队列中移出第一个进程,使其变为就绪状态并插入就绪队列,然后再返回原进程继续执行。
   P、V操作的形式化描述如下:
   P(S)
   {
       S --;
       IF(s<o  )  {
           阻塞该进程;
           将该进程插入信号量s的等待队列;
       }
   }
   V(S)
   {
       S++;
       IF(S<= 0)  {
           从信号量s的等待队列中取出队首进程;
           将其插入就绪队列;
       }
   }
转载请注明原文地址:https://kaotiyun.com/show/bhWZ777K
0

最新回复(0)