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

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

【2-4、2-5】

  1. 初始的读写者问题涉及几个信号量,为什么?
    就是第一版的读写者问题,这些信号量都是什么含义?
    第一版方案有可能会导致写者长期得不到写的机会。
    公平型的读写者问题取消了读者优先。
    公平型的改进:有写者等,则后来的读者要等(排队等待写者之后);无写者等(当然也无写者写,这个第一版已经实现),则后来的读者可读。
  2. 程序实现时在最前面增加一个整体的排队队列,即增加一个信号量s(初始值为1),那么如何理解s值的含义?
    任何一个人进来,不管读或写,都要wait(s)。
    s== 1可通过队列,即不用等待;s== 0表示有人正在通过这个队列。s只有这两个取值。
    任何一个人通过队列后,都要signal(s)实现s+1。
  3. 写者优先的读写者问题中,信号量s,mutex,rmutex,wmutex的含义?
    s,rmutex,wmutex前面已经说过,现在只需要理解mutex。
    结合后面的程序,mutex表示排队等待修改写者人数的信号量。类似于rmutex,rmutex表示排队等待修改读者人数的信号量。
    只有第一个写者才进入s队列,若当前写者人数>=1,后面的写者不必再到s中排队;当然如果当前当前写者人数==0,那么目前的第一个写者要进入s队列。
    s,mutex,rmutex,wmutex这四个信号量都只有1,0这两个取值
  4. 如何理解Swait(m,a,b)的含义,为什么说Swait(m,1,0)是一个开关语句?Swait(m,a,b)在读写者问题中的用途?
    Swait(m,1,0)是一个开关语句,不是Swait(m,a,0)。
    Swait(m,a,b)的含义是每次执行Swait操作,m的值(要有初始值)减b,当m>=a时不必等待,否则等待。
    Swait(m,1,0)表示执行Swait操作,m的值(要有初始值)减0(即不发生变化),当m>=1时不必等待,否则等待;这句话的意思也就是当执行Swait(m,1,0)时,如果m>=1不必等待,否则等待;因此是开关语句,就像前面所说的wait(mutex)操作,当然mutex初始值为1。
    在读写者问题中,读者进程通过执行Swait(rMax,1,1; wmutex,1,0)确保无写者写可读,写者进程通过执行Swait(wmutex,1,1; rMax,RN,0)确保无写者在写以及无读者在读的情况下可写。其中wmutex的初始值为1,表示等待读写操作的信号量;rMax的初始值为RN,表示最多允许的读者数量。
    Swait(rMax,1,1; wmutex,1,0);等价于Swait(rMax,1,1); Swait(wmutex,1,0);
    若rMax目前的值等于RN,则表示无读者。
    只要有读者就会把rMax-1,一个读者读完rMax+1
  5. 为什么引入管程?
    信号量机制的缺点:进程自备同步操作,P(wait)和V(singal)操作大量分散在各个进程中,不易管理,易发生死锁。
    引入管程机制的目的:
    1、把分散在各进程中的临界区集中起来进行管理;
    2、防止进程有意或无意的违法同步操作;
    3、便于用高级语言来书写程序,也便于程序正确性验证。
发布了94 篇原创文章 · 获赞 40 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_46218781/article/details/105271335