操作系统读者写者进程实现_第四章:进程同步与互斥(下)

·经典的进程同步问题

1、简单生产者——消费问题。 生产者是计算进程,消费者是打印进程,在输入时输入进程是生产者,计算进程是消费者。

462106282004817d6065584639f7fbb1.png

简单生产者消费问题(上图) 同步互斥关系的分析:      1)、P进程不能往已“满”的缓冲区中取出产品      2)、Q进程不能从已经“空”的缓冲区中取出产品

ca64993a1d23a6ee5f38b378410ab7e0.png

同步互斥关系的分析(上图)

2、多个生产者——消费问题。将多个缓冲区组成一个环形的缓冲池,里面的缓冲区为空的个数为K,每一个缓冲区能容纳一个产品。

8b5a8c7d7850f6fc6949cdfdb1645102.png

环形缓冲池(上图)

同步问题:

    1)、生产者不能往“满”的缓冲区中放产品,设置信号量为empty,初始值为K,用于指示缓冲池中空缓冲区的数目。

    2)、消费者不能从“空”的缓冲区中取产品,设置信号量为full,初始值为0,用于指示缓冲池中满缓冲区的数目。

互斥问题:设置信号量mutex,初始值为1,用于实现临界区互斥。

多个生产者-消费者算法:

37b6f5098e83927d23ceee6257497739.png


3、读者——写者问题:某个共享文件F,系统允许若干进程对文件F进行读和写。把读文件的进程称为读者,把写文件的进程称为写者,读者和写者必须遵循如下规定:

    1)、多个进程可以同时读文件F。

    2)、任一个进程在对文件F进行写时,不允许其他进程对文件进行读或写。

    3)、当有进程正在读文件时,不允许任何进程去写文件。

问题分析:

    1、写者和读者之间互斥。

    2、写者和写者之间互斥。

    3、读者和读者之间同步。

    得出答案:如果第一个读者取得了读文件的权利,其他读者可以跟着读文件,所以写者与读者之间的互斥就变成了写者与第一个读者之间的互斥。


读者——写者问题解决方案:

5dfa16e181f2a610d7d3c0b0966c6a39.png

读者——写者问题解决方案(上图)


·管程

1、管程的提出:因为采用信号量及P、V同步机制来编写并发程序。有如下缺点:

    1)、程序易读性差,要了解一组共享变量及信号量的操作是否正确,必须读整个系统或者并发程序。

    2)、程序不利于修改和维护,程序的局部性很差,任一组变量或一段代码的修改都可能影响全局。

    3)、正确性难以保证,因为操作系统或并发程序通常很大,要保证系统没有逻辑错误是很难的。

2、管程的概念:一个管程是一个由过程,变量及数据结构等组成的一个集合,它们组成一个特殊的模块或软件包。进程可在任何需要的时候调用管程中的过程,但他们不能在管程之外声明的过程中直接访问管程内的数据结构。

     管程的组成:一个管程由四个部分组成,管程名称、共享数据的说明、对数据进行操作的一组过程和对共享数据赋初始值的语句。

3、管程的特点:

    模块化:一个管程是一个基本程序单位,可以单独编译。

    抽象数据类型:管程是一种特殊的数据类型,其中不仅有数据,而且有对数据进行操作的代码。

    信息屏蔽:管程是半透明的,管程中的外部过程实现了某些功能,至于这些功能是怎样实现的,在其外部则是不可见的。


·进程通信

由于P、V操作时一类低级通信原语,不能承担进程间大量信息的交换任务,因此需要引入新的通信原语,解决大量信息的交换问题。进程通信分为三种:共享内存、消息机制、管道通信。

1、共享内存:在相互通信的进程之间设有一个公共内存区,一组进程向该公共内存中写,另一组进程从公共内存中读,通过这种方式实现两组进程间的信息交换。

2、消息机制:

    1)、消息缓冲通信,根据“生产者——消费者”原理,利用内存中公用信息缓冲区实现进程之间的信息交换。

    2)、以发送信件和接收回答信件为进程间通信的基本方式。当一个进程希望与另一个进程通信时,就创建一个链接两个进程的信箱,发送进程把信件投入信箱,接收进程可以在任何时刻取走信件。

3、管道通信:管道通信的基础是文件系统,是指连接两个进程之间的一个打开的共享文件。专用于进程之间进行数据通信,发送进程可以源源不断的从管道一端写入数据流,每次写入的信息长度是可变的,接收进程在需要时可以从管道的另一端读出数据,读出单位长度也是可变的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值