电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

进程的同步与通信:消息机制


发布日期:2022/1/3
 

消息机制

消息和消息队列

) 消息(message)

) 消息队列

当一个进程收到由其它多个进程发来的消息时可将这些消息排成一个消息队列每个消息队列有一个称为关键字key的名称它是由用户指定的每个消息队列还有一个消息队列描述符其作用与用户文件描述符一样以方便用户和系统对消息队列的访问在一个系统中可能有若干个消息队列由所有的消息队列的头标组成一个头标数组

消息队列的建立与操作

) 消息队列的建立

在一个进程要利用消息机制与其它进程通信之前应利用系统调用msgget( )先建立一个指名的消息队列对于该系统调用核心将搜索消息队列头标表确定是否有指定名字的消息队列若无核心将分配一个新的消息队列头标并对它进行初始化然后给用户返回一个消息队列描述符 否则它只是检查该消息队列的许可权后便返回

) 消息队列的操纵

() 用于查询有关消息队列的情况如队列中的消息数目队列中的最大字节数最后一个发送消息的进程的标识符发送时间等

() 用于设置和改变有关消息队列的属性如改变消息队列的用户标识符或用户组标识符消息队列的许可权等

() 消除消息队列的标识符

消息的发送和接收

) 消息的发送

当进程要与其它进程通信时可利用msgsnd( )系统调用来发送消息对于msgsnd( )系统调用核心检查消息队列描述符和许可权是否合法消息长度是否超过系统规定的长度通过检查后核心为消息分配消息数据区并将消息从用户消息缓沖区拷贝到消息数据区分配消息首部将它链入消息队列的末尾在消息首部中填写消息的类型大小以及指向消息数据区的指针等还要修改消息队列头标中的数据(如消息队列中的消息数字节数等然后唤醒在等待消息到来的睡眠进程

) 消息的接收

进程可利用msgrcv( )系统调用从指定消息队列中读一个消息对于msgrcv( )系统调用是先由核心检查消息队列标识符和许可权继而根据用户指定的消息类型做相应的处理消息类型msgtyp的参数可能有三种情况当msgtyp=核心寻找消息队列中的第一个消息并将它返回给调用进程当msgtyp为正整数时核心返回指定类型的第一个消息当msgtyp为负整数时核心应在其类型值小于或等于msgtyp绝对值的所有消息中选出类型值最低的第一个消息返回如果所返回消息的大小等于或小于用户的请求核心便将消息正文拷贝到用户区再从队列中删除该消息并唤醒睡眠的发送进程如果消息长度比用户要求的大则系统返回出错信息

——返回教材目录

了解更多计算机相关基础课程视频

上一篇:被中断进程的环境保护

下一篇:2013年(下)操作系统试卷答案[1]