网站大量收购闲置独家精品文档,联系QQ:2885784924

进程间通信机制的分析与研究.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进程间通信机制的分析与研究.pdf

进程间通信机制的分析与研究 王钦骞 罗克露 龚伟 电干科技大学计算机学院,成都,610054 摘要Linux支持多种进程间通信:奉丈主要介绍了信号、管道和Unix system V(消息队列,信号量, 共享内存)几种进程间通信机制的主要数据结构和主要的实现方法。井且分析、比较了这些通信机制的优、 ‘ 缺点。 关键词进程间通信,信号.管道,消息队列,信号量,共享内存 引 言 对于多用户、多进程的操作系统,进程间通信(IPC)是一项非常重要、甚至必不可少的基本手段和设施 下面将详细介绍进程间通信机制的设计原理和实现白法。 2 信号 信号是Unix系统中使用的最古老的进程间通信的方法之一,用于向一个或多个进程发送异步事件的 信号。 每种信号类型都有相关的操作.当进程发送信号时,内棱将代表该进程执行这个操作。一个进程通常可以 请求系统采取某些代替的操作,这些代替操作是: ·忽略信号。随着这一选J;!j{的设臂,进程将忽略信号的出现。但有两个信号不可忽略:SIGKILL,它将结 束进程;S1GSTOP,它足作业控制机制的一部分,将挂起作业的执行。 ●恢复信号的默认操作。 ●执行 个预先安排的信号处理函数。 2.1信号机制的实现原理 每一种信号都被赋予一个符号名。为了给一个进程发进一个软中断信号,内核在诙进程表中,按所要接受 的信号类型来设置软中断信号宇段的某一位。如果该进程睡眠在一个可中断的优先级上,内核就唤醒它。例 如,如果某个进程收到了一个挂起信号(SIGHUP)和一个火亡信号(SIGKII。I。),则它将在进程表的软中断信号 宁段中设置相应的两位.但它没法告诉收到了多少这样的信号。信号的检测和处理流程图如图1所示。 信号处理程序 圈1信号的检测和处理流程图 当一个进程即将从核心态返回到用户态时,或它要进入或离开一个适当的低调度优先级睡眠状态时,内棱 要检查它是否收到一个软中断信号。内核仅当一个进程从核心忠返回用户态时才处理软中断信号,因此当一 个进程在核心态下运行时软中断信号并不立即起作用。如果一十进程正在用户态下运行『f『i且内核处理一个使 一个软中断信号发送给该进程的中断,那么当内核从中断返回后,它将识别和处理该软中断信号。这样在处理 72 中国西部嵌入式系统与单片机技术论坛2005学术年套论文集 未被处理的软中断信号之前,进程永远不会在用户态下执行。 2.2 Linux中实现 (1 J主要数据结构 Signal_struct;task__struct结构中有一个指针sig,指向Signal—struct结构。结构中的数组actjon[]就相当 于一个“信号向量表”,数组中的每个元素就相当于一个“信号向量”,确定了当进程接收到一个具体的信号时应 该采取的行动。 Struet SignaLstruct{ Atomic—t count} Struct sigaetion action[_NSIG3; Spinlock_t siglock;} 其中,sigaetion代表信号到达时应该执行的动作。它的成员变量sa—handier描述了进程列该信号的处理 方式。 struct sigaction{ 一sighandler_t sa_handler; sigset_t sa_maskl unsigned long sa—flags; void(”sa—restorer)(void);}f sigset_t表示信号的集合。它的唯一一个成员变量是unsigned long类型的一组无符号长整数,在x86平 台上是用两个32位无符号长整数来代表所有的信号,其中每一位代表一个信号,那么最多可以有64十信号。 Typedef struct{ Unsigned long sig[一NSIG_WORDS]; }sigset_t; slginfo_t主要是伴随着信号所传递的信息,如信号的来源等。 Struet sigpengding( Struct sigqueue *head一**tail£ Sigset_t signal, J sigpengding表示信号队列和信号位图的合并。signal—queue表示进程挂起时的实时信号队列,它包含指 向下一个实时信号节点的指针和siginlo_t。 发送给某个进程的信号并不会立即得到处理,当进程从系统调用中退出或者从中断处理返回时,内核会检 查进程的signal和block字段。如果收到任何一个未被阻塞的信号,则会根据sigaction结构数组中的信息执 行相应的处理。以下将详细介绍发送和接收信号的处理过程。 (2)信号的发送 用户调用系统调用sys—kill(in*pid,in*sig)发送一个信号给某个进程,参数是待发送的信号和接收该信号 进程的进程号。 sys_kill首先要调用相应的函数执行一系列的

文档评论(0)

带头大哥 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档