您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第3章 传统的进程间通信
第第33章章传统的进程间通信传统的进程间通信实验目的实验目的实验目的实验目的理解信号和管道的概念及用于实现进程通信的原理理解信号和管道的概念及用于实现进程通信的原理掌握信号通信机制,实现进程之间通过信号进行通掌握信号通信机制,实现进程之间通过信号进行通信信信信掌握匿名管道及有名管道通信机制,实现进程之间掌握匿名管道及有名管道通信机制,实现进程之间通过管道进行通信通过管道进行通信通过管道进行通信通过管道进行通信2主要内容主要内容主要内容主要内容背景知识背景知识¾¾进程间的通信方式进程间的通信方式¾¾信号通信信号通信信号通信信号通信¾¾管道通信管道通信实验内容实验内容实验内容实验内容¾¾信号通信信号通信¾¾匿名管道通信匿名管道通信¾¾匿名管道通信匿名管道通信¾¾命名管道通信命名管道通信¾¾使用命名管道建立客户使用命名管道建立客户//服务器关联程序服务器关联程序¾¾使用命名管道建立客户使用命名管道建立客户//服务器关联程序服务器关联程序3LinuxLinux进程通信的主要手段进程通信的主要手段LinuxLinux进程通信的主要手段进程通信的主要手段基本上从基本上从UnixUnix平台上的进程通信手段继承而来平台上的进程通信手段继承而来¾¾AT&TAT&T的贝尔实验室的贝尔实验室99systemVIPCsystemVIPC:单机内进程间通信:单机内进程间通信yy单间通单间通¾¾BSDBSD(加州大学伯克利分校的伯克利软件发布中心)(加州大学伯克利分校的伯克利软件发布中心)99套接字(套接字(socketsocket)进程间通信机制)进程间通信机制套接字(套接字()进程间通信机制)进程间通信机制¾¾LinuxLinux99继承两者继承两者继承两者继承两者AT&TAT&T初始初始SystemVIPCSystemVIPCBSDBSD初始初始UNIXUNIXIPCIPC基于基于socketIPCsocketIPCLinuxLinuxIPCIPC4POSIXIPCPOSIXIPC进程通信作用进程通信作用进程通信作用进程通信作用共享资源共享资源¾¾保护临界资源,支持互斥访问保护临界资源,支持互斥访问¾¾进程同步进程同步进程同步进程同步协同工作协同工作¾¾数据共享数据共享¾¾数据共享数据共享¾¾消息通知消息通知¾¾数据交换数据交换¾¾数据交换数据交换5LinuxLinux进程通信主要手段进程通信主要手段LinuxLinux进程通信主要手段进程通信主要手段传统信号通信传统信号通信¾¾信号(信号(signalsignal)):进程或内核均使用信号通知一个进程有:进程或内核均使用信号通知一个进程有某种事件某种事件发生发生¾¾管道(管道(pipepipe))及及有名管道(有名管道(namedpipenamedpipe)):用于具有亲缘:用于具有亲缘关系的进程之间的关系的进程之间的通信通信SystemVIPCSystemVIPC进程通信进程通信¾¾消息(消息(messagemessage)队列)队列:是消息的链接表,在进程之间以:是消息的链接表,在进程之间以gg传递消息形式进行传递消息形式进行通信通信¾¾共享主存共享主存(sharedmemory)(sharedmemory):支持多个进程可以访问同一:支持多个进程可以访问同一块主存块主存空间空间块主存块主存空间空间¾¾信号量(信号量(semaphoresemaphore)):用做用户空间的进程之间及同一:用做用户空间的进程之间及同一进程内不同线程之间的同步进程内不同线程之间的同步手段手段6进程内不同线程之间的同步进程内不同线程之间的同步手段手段套接字(套接字(socketsocket))主要内容主要内容主要内容主要内容背景知识背景知识¾¾进程间的通信方式进程间的通信方式¾¾信号通信信号通信信号通信信号通信¾¾管道通信管道通信实验内容实验内容实验内容实验内容¾¾信号通信信号通信¾¾匿名管道通信匿名管道通信¾¾匿名管道通信匿名管道通信¾¾命名管道通信命名管道通信¾¾使用命名管道建立客户使用命名管道建立客户//服务器关联程序服务器关联程序¾¾使用命名管道建立客户使用命名管道建立客户//服务器关联程序服务器关联程序7信号信号信号信号对中断的模拟,也称软中断信号或软中断对中断的模拟,也称软中断信号或软中断主要用于向进程发送主要用于向进程发送异步事件信号异步事件信号,如,如¾¾键盘中断可能产生信号键盘中断可能产生信号¾¾浮点运算溢出或者内存访问错误等也可产生信号浮点运算溢出或者内存访问错误等也可产生信号¾¾shellshell通常利用信号向子进程发送作业控制命令通常利用信号向子进程发送作业控制命令信号事件来源信号事件来源¾¾硬件来源硬件来源99硬件操作,如按硬件操作,如按Ctrl+CCtrl+C99硬件故障硬件故障软件来源软件来源¾¾软件来源软件来源99常用信号发送函数,如常用信号发送函数,如killkill()(),raise,raise()(),alarm,alarm99非法运算非法运算899非法运算非法运算信号分类信号分类信号分类信号分类不可靠信号不可靠信号早期机制上的信号称为“不可靠信号”,信号值小于早期机制上的信号称为“不可靠信号”,信号值小于¾¾早期机制上的信号称为“不可靠信号”,信号值小于早期机制上的信号称为“不可靠信号”,信号值小于SIGRTMINSIGRTMIN¾¾进程每次处理信号后,就将对信号的响应设置为默认动作,需要调进程每次处理信号后,就将对信号的响应设置为默认动作,需要调用用signal()signal()重新安装该信号重新安装该信号g()g()¾¾信号可能丢失信号可能丢失¾¾非实时信号非实时信号属于不可靠信号,支持排队属于不可靠信号,支持排队可靠信号可靠信号可靠信号可靠信号¾¾信号值位于信号值位于SIGRTMINSIGRTMIN和和SIGRTMAXSIGRTMAX之间之间¾¾支持排队,不会丢失支持排队,不会丢失支持排队,不会丢失支持排队,不会丢失¾¾新信号安装函数新信号安装函数sigactionsigaction()()和信号发送函数和信号发送函数sigqueuesigqueue()()¾¾实时信号都是可靠信号,不支持排队实时信号都是可靠信号,不支持排队il()il()与与itiiti()()的区别的区别signal()signal()与与sigactionsigaction()()的区别的区别¾¾sigactionsigaction()()能传递信息给信号处理函数能传递信息给信号处理函数¾¾signal()signal()安装的信号不能向信号处理函数传递信息安装的信号不能向信号处理函数传递信息9¾¾signal()signal()安装的信号不能向信号处理函数传递信息安装的信号不能向信号处理函数传递信息¾¾对于信号发送函数来说也是一样对于信号发送函数来说也是一样常见信号常见信号常见信号常见信号KillKill––ll可列出所有信号可列出所有信号值值CC语言宏语言宏用途用途1SIGHUP从终端上发出的结束信号1SIGHUP从终端上发出的结束信号2SIGINT来自键盘的中断信号(Ctrl-c)3SIGQUIT来自键盘的退出信号(Ctl\)3SIGQUIT来自键盘的退出信号(Ctrl-\)8SIGFPE浮点异常信号(例如浮点运算溢出)该信号结束接收信号的进程9SIGKILL该信号结束接收信号的进程14SIGALRM进程的定时器到期时,发送该信号15SIGTERMkill命令发出的信号17SIGCHLD标识子进程停止或结束的信号1019SIGSTOP来自键盘(Ctrl-z)或调试程序的停止执行信号进程对信号的响应方式进程对信号的响应方式进程对信号的响应方式进程对信号的响应方式忽略信号忽略信号¾¾进程忽略接收到的信号,不做任何处理,象未发生过一进程忽略接收到的信号,不做任何处理,象未发生过一样样¾¾SIGKILLSIGKILL和和SIGSTOPSIGSTOP信号不能忽略信号不能忽略捕获信号捕获信号捕获信号捕获信号¾¾类似中断处理程序,进程本身可在系统中为需要处理的类似中断处理程序,进程本身可在系统中为需要处理的信号定义信号处理函数信号定义信号处理函数¾¾一旦相应信号发生,执行对应的信号处理函数一旦相应信号发生,执行对应的信号处理函数缺省操作缺省操作缺省操作缺省操作¾¾信号由内核的默认处理程序处理信号由内核的默认处理程序处理¾¾LinuxLinux为每种信号都定义默认操作为每种信号都定义默认操作11¾¾LinuxLinux为每种信号都定义默认操作为每种信号都定义默认操作¾¾进程可通过进程可通过signal()signal()来指定进程对某个信号的处理行为来指定进程对某个信号的处理行为信号生命周期信号生命周期信号生命周期信号生命周期信号诞生信号注册信号注销信号处理函数执行完毕信号诞生信号诞生¾¾指触发信号的事件发生指触发信号的事件发生信号处理函数执行完毕信号注册信号注册¾¾将信号值加入到进程的未决信号集,并将信号所携带的信息保存到未决信将信号值加入到进程的未决信号集,并将信号所携带的信息保存到未决信号信息链的某个号信息链的某个sigqueuesigqueue结构中结构中gqgq99对于实时信号,不管该信号是否已经在进程中注册,都会被再注册一对于实时信号,不管该信号是否已经在进程中注册,都会被再注册一次次99对非实时信号,如果该信号已经在进程中注册,则该信号将被对非实时信号,如果该信号已经在进程中注册,则该信号将被丢弃丢弃信号注销信号注销信号注销信号注销¾¾目标进程每次目标进程每次从核心空间返回到用户空间从核心空间返回到用户空间时都会检测是否有信号等待处理时都会检测是否有信号等待处理¾¾如果存在未决信号等待处理且该信号没有被进程阻塞,把信号在未决信号如果存在未决信号等待处理且该信号没有被进程阻塞,把信号在未决信号链中占有的结构卸掉(对实时进程只删除一个链中占有的结构卸掉(对实时进程只删除一个sigqueuesigqueue结构)结构)链中占有的结构卸掉(对实时进程只删除一个链中占有的结构卸掉(对实时进程只删除一个sigqueuesigqueue结构)结构)信号生命终止信号生命终止¾¾执行相应的信号处理函数执行相应的信号处理函数12taskstructtaskstruct中与信号处理相关的成员中与信号处理相关的成员task_structtask_struct中与信号处理相关的成员中与信号处理相关的成员structstructsigpendingsigpendingpendingpendinggpggpgpgpg¾¾维护本进程中的未决信号,包括当前挂起的信号及当前维护本进程中的未决信号,包括当前挂起的信号及当前阻塞的阻塞的信号信号13信号处理函数信号处理函数信号处理函数信号处理函数信号安装函数信号安装函数¾¾signal(),sigaction()signal(),sigaction()信号发送函数信号发送函数信号发送函数信号发送函数¾¾kill(),raise(),alarm(),setitimer(),pause()kill(),raise(),alarm(),setitimer(),pause()信号操作函数信号操作函数信号操作函数信号操作函数¾¾sigemptyset(),sigfillset(),sigaddset(),sigdelset(),sigemptyset(),sigfillset(),sigaddset(),sigdelset(),sigismember()sigismember()sigismember()sigismember()14信号安装函数信号安装函数——signal()signal()信号安装函数信号安装函数signal()signal()原型定义原型定义¾¾void(*signal(intsignum
本文标题:第3章 传统的进程间通信
链接地址:https://www.777doc.com/doc-319158 .html