操作系统--课堂问答笔记08--习题答案

课堂笔记学习视频来自 操作系统
说明:其他”课堂问答笔记“也在”操作系统“专栏

【2-3、2-4】

  1. 记录型信号量机制相对于整型信号量机制作了哪些改进?
    1)利用阻塞原语和唤醒原语,较好的解决了让权等待的问题(不再循环空转,利用阻塞原语强制释放cpu的占有)。
    2)记录型信号量实际上是一个结构体:其中value>=0表示共享资源的数量(当共享资源的数目不止一个,如打印机),value<0时表示目前已经没有共享资源可用,|value|表示阻塞队列中进程的数目(即等待使用共享资源的进程数目),L是一个队列(阻塞队列,可以是个链表或顺序表)。|value|绝对值。
    上一课讲到整型信号量S的值的含义,解决进程互斥访问临界区问题,信号量S的取值只有1和0,初值是1表示可进入临界区,0表示不能进入临界区(当前有其它进程在使用临界区)需等待。也可以用整型信号量机制解决多个共享资源互斥使用的问题(参见生产者消费者问题)
  2. 如何理解一般信号集机制,应用在什么场合?n,si,ti,di的值都代表什么含义?为什么某个共享资源(设为i)的数量<ti时系统不再分配该种资源?
    应用场合:进程在运行过程中一次申请多种不同资源的多个(例如进程p1申请使用A类资源x个,p2申请使用B类资源y个,…),释放资源也是一次释放多个。
    n共享资源的种类,si表示第i个共享资源的记录型信号量结构体(有value和L两个分量或成员),ti第i个共享资源分配的下限,di一次申请或释放第i个共享资源的数目。
    设置下限是为了避免共享资源数目不够用从而产生死锁(进程互相竞争资源导致所有进程都无法运行,系统处于僵死状态),即分配共享资源时留个余量,而不是分配到数量剩余到0为止。
  3. 实现互斥和实现同步的信号集的初始值有什么不一样?如何理解信号集的初始值的含义?
    一般来说实现互斥信号量使用mutex作为信号量的名称,其初始值为1表示可进入临界区(或者进程执行的某个条件得到满足,如视频中前趋图的那个例子,但该例子没有使用mutex作为信号量的名称,因为这样的条件不止一个),在任何一个进程进入临界区之前减1(即P操作,wait),退出临界区之后加1(即V操作,signal);
    前趋图的那个例子,分别用abcd…给信号量取名,因为不同进程运行的条件不一样,但初始值都是0,因为这些条件一开始都不存在,需要执行相关进程产生。初始值都是0不是1,初始值都是0不是1,初始值都是0不是1
    而同步信号量则按题目意图给信号量取名(不用mutex),其初始值>=1表示某种共享资源的数目,任何一个进程申请使用该种资源之前减1(当然如果一次申请多种不同资源的多个,可用信号量集机制),释放资源之后加1(如果一次释放多种不同资源的多个,可用信号量集机制)。
  4. 生产者和消费者问题是典型的互斥同步问题,那么互斥访问的共享资源有什么?是互斥访问的还是协作(同步)访问的?
    共享资源包括缓冲区(可理解为一间放置产品的仓库)以及缓冲区中的单元格(可理解仓库中用来放一件产品的栅格)。注:缓冲区是一段内存空间,用数组实现;
    缓冲区(仓库)是互斥访问的,缓冲区中的单元格(栅格)是协作(同步)访问的。
    因此为缓冲区设置互斥信号量mutex(初始值为1),为单元格(栅格)设置同步信号量empty(含义为:空单元格即没有放置产品的单元格的数目,初始值为n=单元格的数目,表示一开始所有栅格都是空的)和full(含义为:放置了产品的单元格的数目,初始值为0,表示一开始没有任何一个栅格放置了产品)(实际上empty和full定义一个信号量就可以了,因为总是存在empty+full=n,但一般习惯定义两个信号量)。
    【生产者和消费者互斥和同步问题一定要掌握,几乎每一本OS的书都会讲,各种考试都可能会考。】
  5. 如何理解in:=(in+1) mod n和out:=(out+1) mod n这两行语句(mod n表示对n求余)?
    buffer这个数组用来表示缓冲区中的单元格,in和out是两个下标,生产者往in这个位置放产品,放置完后in要指向下一个位置;消费者从out这个位置取产品,取后out要指向下一个位置。因为生产者进程和消费者进程是同步的,因此不可能按照生产者放一个产品然后消费者取一个产品这样的方式进行,也就是in和out的值总是不一样的,可以把in理解为写指针(放置产品就是写数据)out理解为读指针(放置产品就是读数据),读和写并不是总是在同一个位置进行(但是当然只有数据存在的情况下才能读)。mod n操作的目的是为了循环使用这些单元格(对生产者来说,当最后一个栅格放置产品后可回到第一个栅格继续往后放置产品,因为可能此时前面栅格中的产品已经被消费者取走。对消费者来说,道理相同),类似于数据结构中的循环队列的概念。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章