操作系统之QQ作业-10

  1. 管程由几个部分组成?
    管程是一种高级同步工具,是一种特殊的软件模块,有这些部分组成:
    a.局部于管程的共享数据结构说明
    b.对该数据结构进行操作的一组过程
    c.对局部于管程的共享数据结构设置初始值的语句
    简单可以这样说明:管程=数据结构+操作+对数据结构中的初始值设置

  2. 条件变量的作用是什么?
    管程必须使用条件变量提供对同步的支持,这些条件变量包含在管程中,并且只有在管程中才能被访问。以下两个函数可以操作条件变量:
    a.cwait(c):调用进程的执行在条件c上挂起,管程现在可被另一个进程使用
    b.csignal(c):恢复在cwait上因为某些条件而挂起的进程的执行。如果有多种这样的进程,选择其中一个。
    此外,管程中的条件变量只能访问定义在管程里的条件变量。

附送课堂七问。我是懵了,操作系统磨人

问题1 如果某个管程中存在A和B两个操作过程,线程P1正在执行A,请问,线程P2可以同时执行A或者B吗?

//不能,两个都不能,任何时候只能有一个进程在管程中执行,即线程P1执行A

问题2 如果线程P1执行A的时候阻塞,一定是因为检测条件变量吗?

这是回答是的。这里可以体现一个空闲让进的原则,执行A的时候堵塞,但没有其他进程继续执行操作,那么就是条件变量发生变化,导致相关条件队列的条件发生改变。

问题3 条件变量只能被在管程中定义的过程访问吗?

是的,只能在定义的过程中被访问。条件变量的作用就是为了实现同步控制,在管程中定义条件变量即可,管程中的条件变量只能访问定义在管程里的条件变量。

问题4 如何访问条件变量?

两个函数操作条件变量。
cwait(c):调用进程的执行在条件c上挂起,管程现在可被另一个进程使用
csignal(c):恢复在cwait上因为某些条件而挂起的进程的执行。如果有多种这样的进程,选择其中一个。

问题5 条件变量和信号量在控制同步时有什么区别

条件变量不需要积累信号,wait操作必须在signal操作之前。

问题6 如果父母姐弟在一个盘子里传递橘子和苹果,用管程控制他们的行为过程,需要如何定义管程?

不区分拿取操作,设置条件变量来区分橘子和苹果。满足橘子的话,就让儿子拿。满足苹果就让女儿拿。

问题7 定义几个条件变量控制前驱关系?

put(){
wait(plate);
<把水果放在盘子里>
if(盘里是橘子)
     signal(orange);
else
     signal(apple);

}

get(){
<把水果拿出盘子>
if(儿子拿了水果)
     wait(orange);
else
     wait(apple);

signal(plate)}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章