简答题

简述信号量的定义和作用。P,V操作原语是如何定义的?

正确答案

信号量一般是由两个成员组成的数据结构,其中一个成员是整型变量,表示该信号量的值,它与相应资源的使用情况有关;另一个是指向PCB的指针。当多个进程都等待同一信号量时,它们就排成一个队列,由信号量的指针项指出该队列的队首。
信号量通常可以简单反映出相应资源的使用情况,它与P、V操作原语一起使用可实现进程的同步和互斥。P,V操作原语有如下定义。
P(S)顺序执行下述两个动作:
⑴信号量的值减1,即S=S-1;
⑵如果S>=0,则该进程继续执行。
如果S<0,则把该进程的状态置为阻塞态,把相应的PCB连入该信号量队列的末尾,并放弃处理机,进行等待(直到其他进程在S上执行V操作,把它释放出来为止)。
V(S)顺序执行下述两个动作:
⑴S值加1,即S=S+1;
⑵如果S>0,则该进程继续运行;
如果S<=0,则释放信号量队列上的第一个PCB所对应的进程(把阻塞态改为就绪态),执行V操作的进程继续运行。

答案解析

相似试题
  • OSI参考模型相邻层间的接口定义了原语操作和高层向下层提供的服务。

    判断题查看答案

  • 一个二元信号量是一个其值只能取0,1的信号量,给出一个二元信号量实现一般信号量P、V操作的程序。

    简答题查看答案

  • 简述进程的几种状态和引起状态转换的典型原因,以及相关的操作原语。

    简答题查看答案

  • 原语是一种不可分割的操作。

    判断题查看答案

  • 将“文件”/“最近打开”/“清除最近”命令定义为快捷键Ctrl+P,其操作过程为()

    单选题查看答案

  • 设顺序存储的线性表存储结构定义为: struct sequnce {ELEMTP elem[MAXSIZE]; int len; } 将下列简单插入算法补充完整。 void insert(struct sequnce *p,int i,ELEMTP x) {v=*p; if(iv.len+1)printf(“Overflow“); else { for(j=v.len;();j- -)(); v.elem[i]= () ;v.len=(); } }

    填空题查看答案

  • 如果进程PA对信号量S执行P操作,则信号量S的值应()

    单选题查看答案

  • 在类定义中,说明成员的访问权限的public、private和protected三个关键字的作用是什么?请分别简述之。

    简答题查看答案

  • 对于记录型信号量,在执行一次P操作(wait操作)时,信号量的值应当为减1;当其值为()时,进程应阻塞。 

    单选题查看答案