第七章机内进程间通信.doc

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

第六章 机内进程间通信 6.1 引言 计算机网络通信通常包括广播通信、多播通信和点对点通信。一个基于网络的软件系统,从通信进程的物理位置来看,系统中的进程通信通常包括两种方式,即位于不同节点上的进程通信和一个节点上不同进程之间的通信。对于不同节点上的进程通信,主要采用Internet域套接字技术实现;对于一个节点上不同进程之间的通信,绝大多数操作系统提供了管道、共享内存、套接字方法。 对于许多网络应用系统,例如入侵检测系统(IDS)、网管系统等,系统要求很高的实时性,通信性能的好坏直接决定了该系统的可用性和效率。其中一个节点上的进程之间通信通常占有很大比重,因此,对于一个节点上不同进程之间的通信性能进行研究是十分重要的。 网络编程通常涉及多个进程之间相互作用,相互协调它们的活动。这一协调是通过进程间的某些主动或被动通信实现的。Linux系统提供多种在一个节点上进程间通信方式,主要有信号(Signal)、管道(pipe)、命名管道(FIFOS)、消息队列(message queue)、信号灯(semaphore)、共享内存(shared memory)和内存映象(memory mapped file)以及UNIX域类型的套接字。 信号是UNIX系统中最原始的进程间同步和通信的工具,用于通知进程在它的运行环境中发生的事件,这种通信方式主要用于传输少量数据。 消息队列和共享内存是同一计算机内进程间通信的重要方式,消息队列支持多路复用,但需要进行两次数据的复制,从用户空间到核心,再从核心到用户空间;共享内存不需要多次拷贝,所以在传输数据量大的进程通信中,使用共享内存比使用消息队列性能好。 对于使用Internet域的套接字,既可以支持机内进程间通信,也可以支持不同机器之间进程通信,有关文献指出,对于本地通信,采用UNIX域套接字的通信速度是采用Internet域套接字的2倍. 因此,使用UNIX域套接字支持位于同一个节点上的进程间通信。 本章针对管道、共享内存和UNIX域套接字通信方法介绍了实现机内进程通信的主要方法和原理,使用这些方法用C语言在PC/Linux环境下实现了机内通信程序,并对机内进程间通信性能进行了测试。 6.2 信号 信号是Unix系统中最原始的进程间同步和通信的工具,它实际上是发送给进程的“软件中断”,用于通知进程在它的运行环境中发生了某件事情。当引起信号的事件发生了,相应的信号就产生了。而当进程获得基于信号的行为时,这个信号就释放了,从信号的产生到信号被释放这段时间,称为信号的生命期。从信号的产生到信号的释放之间,信号可能被阻塞。通常是进程在执行某项任务时,不希望被相应的信号中断,这时进程可以阻塞这些信号。当进程完成任务时,再清除对这些信号的屏蔽,进程通过设置屏蔽码来实现信号的屏蔽。在进程阻塞期间产生的信号,进程仍然会收到,只是直到进程清除屏蔽后信号才被释放。 信号类似于硬件中断,但没有优先级,也就是说,进程平等地对待所有的信号。对于同时发生的信号,一次只给进程一个信号,而没有特别的次序。 6.2.1 Linux系统支持的信号 在Linux系统中,可以使用kill –l来显示系统中支持的信号,这些信号主要有: SIGHUP SIGINT SIGQUIT SIGILL SIGTRAP SIGIOT SIGBUS SIGFPE SIGKILL SIGUSER1 SIGSEGV SIGUSER2 SIGPIPE SIGALRM SIGTERM SIGCHLD SIGCONT SIGSTOP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGXCPU SIGXFSZ SIGVTALRM SIGPROF SIGWINCH SIGIO SIGPWR 信号在task_struct结构中实现,由于每个信号对应于unsigned long类型数的一位。所以在32位系统中,支持的信号数量不会超过32种。 可以根据信号的来源将信号进行分类: 进程在运行过程中出现了错误,触发系统的信号处理器对错误事件进行处理,这些信号是核心产生的。例如当进程遇到浮点运算错误,将触发SIGFPE信号进行相应的错误处理;段越界错误,核心将向进程发送SIGSEGV信号。 一个进程向另一个进程发送的信号,例如进程可以使用kill系统调用向某个进程或进程组发送信号,进程还可以使用raise向自己发送信号。 常用的信号类型在signal.h文件中定义,表6-1列出了一些常用的信号及其含义。 表6-1 常用信号及其含义 信号名 含义 SIGKILL 无条件终止进程,这个信号不能被进程捕获、阻塞或忽略 SIGTERM 软件终止信号,可使用kill命令产生 SIG

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档