- 1、本文档共161页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.消息传递的概念 消息传递(Message passing)作为当前应用最为广泛的一种进程间通信机制,为进程间信息传递和交换的实现提供了很好的保障 消息是一组信息,由消息头和消息体组成。 send destination, message receive source, message 3.4.6 消息传递 * 2.同步 阻塞send:发送进程阻塞,知道消息被接收进程接收 非阻塞send:发送进程发送消息并再继续操作 阻塞receive:接收者阻塞直到请求的消息到达 非阻塞receive:接收者收到一条有效消息或一条空消息 组合形式: 阻塞send,阻塞receive 非阻塞send,阻塞receive 非阻塞send,非阻塞receive 3.4.6 消息传递 * 3.寻址方式 (1)直接寻址(Direct addressing)方式 (2)间接寻址(Indirect addressing)方式 在间接选址方式下,消息传递并不是在发送进程和接收进程之间直接进行,而是通过一个被称为信箱(Mailbox)的共享的数据结构完成 利用信箱进行通信,发送进程和接收进程存在如下的对应关系:一对一、多对一、一对多和多对多 3.4.6 消息传递 * 图3.14 间接的进程通信 3.4.6 消息传递 * 3.互斥 send mbox, msg 原语表示向信箱mbox中发送msg消息 receive mbox, msg 表示从信箱mbox中取走msg消息 消息可以看成是进程访问临界区的钥匙,收到消息拿到钥匙的前提下才能进入临界区,否则只能等待 3.4.6 消息传递 * 2.记录型信号量 整型信号量机制没有满足让权等待的原则,可能使进程处于饥饿的忙等状态。 假设s为一个记录型数据结构,其中一个分量为整形量value,另一个为信号量队列queue。value通常是一个具有非负初值的整型变量,queue是一个初始状态为空的进程队列,当一个进程必须等待信号量时,就加入到进程队列中去。 3.4.3 信号量机制 * wait和signal操作定义如下: wait s :信号量s减l,若结果小于0,则调用 wait s 的进程被设置成等待信号量s的状态。 signal s :将信号量s加1,若结果不大于0,则释放一个等待信号量s的进程。 3.4.3 信号量机制 * 分析得出以下结论: (1)若信号量s.value值为正,则该值表示在对进程进行阻塞之前对信号量s可以实施的wait 操作个数,即系统中某类资源实际可用数目; (2)若信号量s.value值为负,则其绝对值表示阻塞队列s.queue中等待的进程个数; (3)每次wait 操作,意味着进程请求一个单位的该类资源,使系统中可供分配的该类资源数减少一个,每次signal 操作,表示执行进程释放一个单位资源,使系统中可供分配的该类资源数增加一个。 3.4.3 信号量机制 * 3.二元信号量 假设s为一个记录型数据结构,其中一个分量为value,它仅能取值0和1,另一个分量为信号量队列queue。 一个二元信号量的值只能是0或者1 3.4.3 信号量机制 * P-V同步缺点: 对于共享变量及信号量变量的操作将被分散于各个进程中,有几个缺点: (1)易读性差,因为要了解对于一组共享变量及信号量的操作是否正确,则必须通读整个系统或者并发程序 (2)不利于修改和维护,因为程序的局部性很差,所以任一组变量或一段代码的修改都可能影响全局 (3)正确性难以保证,因为操作系统或并发程序通常很大,要保证这样一个复杂的系统没有逻辑错误是很难的 管程的引入 信号量机制的引入解决了进程同步的描述问题,但信号量的大量同步操作分散在各个进程中不便于管理,还有可能导致系统死锁。 如:生产者消费者问题中将P、V颠倒可能死锁。 Dijkstra于1971年提出:把所有进程对某一种临界资源的同步操作都集中起来,构成一个所谓的秘书进程。凡要访问该临界资源的进程,都需先报告秘书,由秘书来实现诸进程对同一临界资源的互斥使用。 1.管程的定义 管程是由一个或多个过程、一个初始化序列和数据组成的软件模块,是一种程序设计语言结构成分,具有和信号量同等的表达能力。进程可以通过调用管程实现对资源的请求和释放。 百度百科:管程 英语:Monitors,也称为监视器 定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。 3.4.4 管程 * 管程的基本思想 将共享变量和对它们的操作集中在一个模块中,操作系统或并发程序就由这样的模块构成。这样模块之间联系清晰,便于维护和修改,易于保证正确性。 管程的主要特点: 共享性:一个进程通过调用管程的一个过程进入管程,管程中的移出过程可被
文档评论(0)