操作系统读书笔记-互斥和同步

应sicofiled同学建议,把读书笔记写成博客,目前看到了互斥同步至管程模块。

5.4 管程

1.使用信号的管程

     5.boundedbuffer控制着用于保存和取回字符的缓冲区,有两个条件变量:notfull为真则至少有增加一个字符的空间,notempty为真则缓冲区至少有一个字符。

     6.信号量和管程的责任不同,管程构造自己的互斥机制,缓冲区的访问由管程控制;使用信号量互斥和同步都属于程序员的责任。

     7.cwait()后无csignal()的进程将被阻塞,但优先级较高(入紧急队列)。如果没有进程在条件x上等待,csignal()的执行将不会产生任何效果。

     8.管程相对于信号量的优点:所有同步机制都被限制在管程内易于验证同步的正确性,易于检查出错误。

2.使用通知和广播的管程

     1.  使用信号的管程的缺点:可能增加额外的进程切换;信号相关的进程调度必须非常可靠。

     2.  cnotify代替csignal使得信号中隐含的消息(足够空闲,满足分配请求)得以模块化,无错误唤醒。

     3.  while语句代替if 使得至少多一次对条件变量的检测。

     4.  cbroadcast()原语可以使所有在该条件上等待的进程都设置为就绪状态。


5.5消息传递

1.同步 

     1.消息传递是进程间同步和通信的方式之一。

     2.send & recieve原语有阻塞和无阻塞两种状态。对大多数进程无阻塞send和阻塞recieve是最自然的,但无阻塞send会导致进程重复重复产生消息;阻塞recieve会导致进程无限期被阻塞下去,可使用无阻塞recieve来解决(会导致消息丢失) or 。

     3.同步时为了确定那个进程接收消息。

2.寻址

     1.寻址是为了指明消息来源:直接/间接寻址。

     2.直接寻址:send原语包含目标进程的标识符;receive原语有两种处理方式:1->显示的指定源进程(并发进程合作) 2->隐式寻址,不可能指定所期望的源进程,此时source参数保存了接收操作执行后的返回值。

     3.间接寻址:消息发送到共享数据结构,称作信箱的临时保存消息队列。更灵活:一对多,多对一,多对多。多对一的关系中,信箱称作端口。进程和信箱间的关联可以静态(端口、一对一),可以动态。

     4.信箱所有权问题:端口归接收进程所有,随进程撤销而销毁。信箱归创建者/操作系统所有,随进程/显式销毁。

3.消息格式

     1.短定长消息减少处理和存储开销。大量数据时,消息可引用数据文件。

     2.可变长度消息最灵活。消息头+消息体。

4.排队原则

     先进先出/检查下次接受

5.互斥

     1.无阻塞send和阻塞receive原语用于一组并发进程,初始化信箱(空)。希望进入临界区的进程首先接收一条消息,若信箱空,则阻塞该进程,否则进入临界区,然后把消息放回信箱。若消息仅传递给一个进程则阻塞其他进程,空消息队列阻塞所有进程,有一条时,激活一个阻塞进程。

     2.好例:mayproduce & mayconsume 信箱。,可用于分布式系统。

6.读者-读写问题

     1.通过信号量传递 wsem和rsem完成互斥。

     2.通过消息传递。

------------------------------------------------------------------------------------------------------

第五章读书笔记到此

     

                                                                        

    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值