进程间通信-软中断

进程间通信-软中断

ID:38151336

大小:112.30 KB

页数:4页

时间:2019-05-28

进程间通信-软中断_第1页
进程间通信-软中断_第2页
进程间通信-软中断_第3页
进程间通信-软中断_第4页
资源描述:

《进程间通信-软中断》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、附:补充材料实验三Linux共享存储通信P10有关软中断示例3.1Linux软中断信号机制软中断信号(signal)是一种简单且最基本的进程通信机制,它最大的特点是提供了一种简单的处理异步事件的方法。例如,常见的用户从键盘键入组合键Ctrl+C来中断一个程序的运行,或者在两个进程之间通过某个信号来通知发生了异步事件,或者向系统或进程报告突发的硬件故障,如非法指令、运算溢出等。更重要的是,用户进程还可以向自己发送信号以中断进程的执行,并自动转入指定的软中断处理函数去执行用户自行安排的处理内容,处理

2、完毕后再返回用户进程继续执行,从而为应用程序提供了由用户自行处理随机事件的通信机制。软中断信号实现(signalimplementation)是操作系统用来通知进程有事情发生的一种机制。由于这种信号总是在进程处于运行状态时才会去响应,故称之为软中断信号。软中断信号的使用者是操作系统和源程序,操作系统事先将系统的中可以使用的软件中断信号进行集中编码并定义相应含义后,提交用户使用。用户可以通过相应的软件中断序号或软中断名称来使用软中断,二者在使用上是等效的。用户只能在操作系统提供的软件中断序号范围内

3、使用软件中断信号,不能自己创建新的软件中断信号。如果用户的应用程序之间有信号需要发送,则可以使用操作系统预留给用户使用的用户信号SIGUSR1或用户信号SIGUSR2。以RedHatLinux9版本所使用的linux-2.4为例,常用的部分软件中断信号的编码、名称及其含义如表3-1所示。表3-1Linux常用的部分软中断信号序号名称含义1SIGHUP挂起2SIGINT按Ctrl+C3SIGQUIT按Ctrl+4SIGILL非法指令5SIGTRAP自陷,跟踪代码的执行6SIGIOTIOT指令7S

4、IGBUS总线错(超时)8SIGFPE浮点数例外19SIGKILL终止进程10SIGUSR1用户定义信号111SIGEGV段违例(段越界)12SIGUSR2用户定义信号213SIGPIPE向非法管道中写数据(没有读)14SIGALARM闹钟报警15SIGTERM软件中止16……17SIGCHLD子进程死亡18……Linux的软中断信号在/usr/src/linux-2.4/include/asm/signal.h中定义。3.1.2软中断信号的使用方法对于需要使用的软中断信号,进程在接收之前必须先

5、使用signal()系统调用函数进行预置。预置的目的是将某个软中断信号与某个可执行的处理函数进行关联,当信号发出并被指定的进程接收后,系统就中断接收该软件中断信号进程的执行,转而执行与信号相关联的函数,该函数执行完毕后再返回被中断的进程继续执行。事实上,除了用户定义信号SIGUSR1和SIGUSR2外,其他软中断信号都已经由操作系统预置了相应的处理函数,用户进程如果对这些软中断信号进行了预置,则使该信号与新的函数进行关联,当该软中断信号被接收时,转而执行的不再是操作系统预置的处理函数,而是用户对

6、该软中断信号重新预置的处理函数。对于同一个软中断信号,可以通过多个signal()系统调用分别与不同的处理函数进行关联。系统在响应该软中断信号时,执行的是当前预置的处理函数(最近预置的),从而实现同一软中断信号在不同的情况下转向不同的处理函数去执行。3.1.3软中断信号的系统调用1.软中断信号预置函数命令格式:signal(sig,function)2参数说明:sig系统给定的软中断信号中的序号或名称。function与软中断信号关联的函数名,当进程在运行过程中捕捉到指定的软中断信号后,中断当前

7、程序的执行转到该函数执行。注意:软中断信号必须提前预置,然后才可以在程序运行中捕获。2.发送软中断信号函数命令格式:intkill(pid,sig)参数说明:pid表示一个或一组进程的标识号。当pid>0时,将信号发送给指定pid的进程;当pid=0时,将信号发送给同组的所有进程;当pid=-1时,将信号发送给以下所有满足条件的进程:该进程用户标识符等于发送进程的有效用户标识符。sig软中断信号的序号或名称。功能:向指定进程标识符pid的进程发送软中断信号sig。例中用来实现父进程向子进程发送终

8、止执行的软中断信号。所用头文件为:#include#include注意:只能是核心或超级用户进程才能kill来向任意的其他进程发送软中断信号,而普通用户进程只能kill向同组或同用户标识的进程发送软中断信号,而不能向任意的其他进程发送软中断信号。如果是进程向自己发送软中断信号,则可以使用raise()函数。例证中只使用kill()函数。【有关软中断示例】使用软中断实现父子进程同步,同步方式为:父进程先输出字符“A”,然后子进程再输出“B”。程序代码清

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。