- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
主要内容 进程间通信 内容回顾:软中断、管道通信 Linux的IPC机制 Linux消息缓冲通信 Linux共享内存通信 内容回顾 软中断 软中断信号 软中断信号相关主要函数:signal()、sigaction()、kill()、exit()、wait()等 如何实现“父?子?父”的进程同步 管道通信 管道的概念:无名管道、命名管道 无名管道的实现原理(见下页) 无名管道的组成(见下页) 相关函数:pipe(),write(),read(),lockf()等 内容回顾(2) Linux的IPC机制 IPC—Inter Process Communication Linux的IPC机制包含如下IPC对象: 消息队列:由消息缓冲区msgbuf组成的链表 共享内存:一进程创建,各进程可共享 信号量集:下节大课讲解 IPC对象 每个IPC对象拥有唯一的IPC标识符(ipc_ids和ipc_id),ipc_id是一个指向ipc_perm的指针 每个IPC对象都有一个公共的ipc_perm结构,在Linux中由kern_ipc_perm结构表示,定义于ipc.h文件中 Linux的IPC机制(2) IPC标识符 由两个结构组成:ipc_ids和ipc_id ipc_id结构指向ipc_perm 此二结构定义在util.h中 ipc_perm结构(权限管理结构) 键值(key)、拥有者、创建者、组标识符、对象存取模式等重要信息 ipc_perm结构定义于ipc.h中 在Linux中对应于kern_ipc_perm结构(见下页) Linux中也定义了ipc_perm结构,为了兼容Unix system V Linux的IPC机制(3) /* used by in-kernel data structures */ struct kern_ipc_perm { key_t key; //关键字 uid_t uid; //对象属主的有效用户标识号 gid_t gid; //对象属主的有效组标识号 uid_t cuid; //创建者用户标识号 gid_t cgid; //创建者组标识号 mode_t mode; //存取模式(权限) unsigned long seq; //序列号 }; Linux的IPC机制(4) IPC标识符及IPC key(键)值的说明 Key(键)和IPC标识指的是不同的东西 系统支持两种键:公有和私有 如果key(键)是公有的,则系统中所有的进程通过权限检查后,均可以找到System V IPC 对象的识别号 如果key(键)是私有的,则键值为0。每个进程都可以用键值0建立一个专供其私用的对象 注意,对System V IPC对象的引用是通过识别号而不是通过key(键),从后面的系统调用例子中可看到这一点 Linux的IPC机制(5) mode 解释(以下数值为8进制,1word) IPC对象的存取模式,以bit定义, 0禁止,1允许 Bit2-0:用户的读、写、未使用 Bit5-3:组员的读、写、未使用 Bit8-6:宿主的读、写、未使用 Linux消息缓冲通信(1) 消息缓冲通信概述 Linux消息缓冲队列 消息队列实际上是系统内核地址空间中的一个内部链表,他允许一个或多个进程从消息队列中读出消息。每一个消息队列都用一个唯一的标识号表示。 多个独立的进程之间可以通过消息缓冲机制来相互通信,这种通信的实现是通过多进程共享同一个消息队列完成的。 发送消息的进程可以在任意时刻发送任意个消息到指定的消息队列上,同时,该发送进程还要检查是否有接收进程在等待它所发送的消息,若有则唤醒它;而接收消息的进程可以在需要消息时到该消息队列上获取消息,若消息还没到来,则接收进程转入睡眠状态。 消息队列一旦创建后即可由多进程共享。 消息队列进行消息的发送与接收的同步和互斥由系统实现。 Linux消息缓冲通信(1) 消息缓冲队列msgque(Linux中为msg_queue结构) 拥有一个唯一的key(每个IPC对象有一个ipc_perm) 可供多个进程共享,并实现进程间通信 是一个临界资源,进程间进入临界区读写需互斥操作 挂接一个有多个“消息缓冲区”(msgbuf)组成的链表,称为消息队列(q_messages) 挂接一个消息的接收进程等待队列(q_receivers) 挂接一个消息的发送进程等待队列(q_senders) 参见 msg_queue结构源码 Linux消息缓冲通信(2) Linux消息缓冲通信(3) 消息队列相关的数据结构 1、msgque:消息队列链表 在Linux中,对应于msg_queue数据结构 内容如下 q_perm:kern_ipc_perm结构 队列变更的时间及进程标识信息 q_
您可能关注的文档
最近下载
- 2025年广东东莞农村商业银行春季校园招聘笔试历年典型考题及考点剖析附带答案详解.docx
- 制浆车间生产初步技术方案(桉木).docx VIP
- 部编三年级上册语文第二单元主题阅读.doc VIP
- ARKInvestBigIdeas2025-歌者PPT中文校对版.pdf VIP
- 新中国55年统计资料汇编-全国篇.doc VIP
- 2025西双版纳供电局及所属县级供电企业项目制用工招聘(14人)笔试参考题库附答案解析.docx VIP
- (三十六计.docx VIP
- 2025年10月全国自考《马克思主义基本原理概论》真题及答案 .pdf VIP
- 大数据数据资产价值评估.pdf VIP
- 钟君申论笔记.doc VIP
文档评论(0)