文档详情

《操作系统》8并发性:互斥和同步课件.ppt

发布:2017-09-08约2.01万字共34页下载文档
文本预览下载声明
8.1 互斥和同步 8.2 实现互斥的方法讨论 8.2.1 实现互斥的硬件方法 8.3 信号量与P、V操作 8.3.1 信号量与P、V操作定义 8.3.2 用P、V操作实现互斥 8.3.3 用P、V操作实现同步 8.3.4 用P、V操作实现资源分配 8.3.5 管程 8.4 互斥、同步的样例分析 8.4.1 读者-写者问题 8.4.2 哲学家就餐问题 8.4.3 理发师理发问题 8.5 高级进程通信 8.5.1 消息缓冲通信 8.5.2 信箱通信 . 理发师程序barber()的代码描述如下: barber() { while(TRUE) { *P(custs); /* 是否有顾客等待理发 */ P(mutex); waiting=waiting-1; V(mutex); cut_hair(); /* 调用理发子程序完成理发 */ **V(barbs); } } . 顾客程序customer()的代码描述如下: customer() { P(mutex); if(waitingn) { waiting=waiting+1; *V(custs); V(mutex); **P(barbs); get_haicut(); } else V(mutex); } 功能是在custs上做P操作,判定是否有顾客等待理发。只有通过这个P操作,才表示有顾客理发,于是进入由信号量mutex控制的临界区,确保对变量waiting操作的互斥。然后调用理发子程序cut_hair(),完成理发后,在信号量barbs上做V操作,表示又有一理发师在等待工作。 顾客到达后,执行顾客程序customer(),功能是进入mutex控制的临界区,在有座椅的情况下,对信号量custs做V操作,记录等待理发的顾客数。退出mutex临界区后,对信号量barbs做P操作,申请一位理发师为顾客理发。若k个理发师现在都忙,顾客就阻塞在信号量barbs上;否则调用子程序get_haicut(),得到理发师提供的理发服务。 . . . barber()中注有“*”号的P(custs),与customer()中注有“*”号的V(custs)是相互呼应的一对同步信号量操作;barber()中注有“**”号的V(barbs),与customer()中注有“**”号的P(barbs)是相互呼应的又一对同步信号量操作。 返回目录 . 用P、V操作实现的通信,称为进程间的低级通信。为使进程间能真正交换数据,操作系统设计有高级通信命令,提供给用户在程序一级使用。只要准备好所需的参数,直接调用它们就能在进程间传递大量信息。 消息缓冲通信是一种直接通信方式,基本思想是消息发送者在自己的消息发送区形成消息,向系统申请消息缓冲区,把数据从消息发送区移到消息缓冲区中。通过发送命令,把这个消息缓冲区直接发送到消息接收者的消息队列里。接收者从自己的消息队列上摘下消息缓冲区,把里面的数据移到自己的消息接收区里,释放消息缓冲区。 . . 为实现消息缓冲通信,要解决如下问题: 开辟消息缓冲区,每个消息缓冲区的构成是:发送消息的进程名或标识name;发送消息的长度size;发送消息的正文内容text;下一个消息缓冲区的指针nPtr。 (1) (2) 系统要提供发送消息和接收消息的系统调用命令。比如发送命令为Send,接收命令为Receive。 (3) 进程PCB中增设管理消息队列的内容,它们是:消息队列的队首指针 hPtr;mutex——在发送和接收中,Send和Receive都要操作,保证对进程消息队列进行互斥操作的信号量mutex ,初值为1。 * * 8.5.2 信箱通信 第8章 并发性:互斥和同步 8.1 互斥和同步 8.1.1 互斥和临界区 8.1.2 同步 8.2 实现互斥的方法讨论 8.2.1 实现互斥的硬件方法 8.2.2 实现互斥的软件方法 8.3 信号量与P、V操作 8.3.1 信号量与P、V操作定义 8.3.2 用P、V操作实现互斥 8.3.3 用P、V操作实现同步 8.3.4 用P、V操作实现资源分配 8.3.5 管程 8.4 互斥、同步的样例分析 8.4.1 读者-写者问题 8.4.2 哲学家就餐问题 8.4.3 理发师理发问题 8.5 高级进程通信 8.
显示全部
相似文档