- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)