系统调用格式msgrcvmsgqidmsgpsizetypeflag参数定义-武汉大学.PPT

系统调用格式msgrcvmsgqidmsgpsizetypeflag参数定义-武汉大学.PPT

系统调用格式msgrcvmsgqidmsgpsizetypeflag参数定义-武汉大学

LINUX原理及应用 武汉大学计算机学院 郑鹏 Email:pzheng51@163.com 第3章 Linux进程间通信 Linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来。 Unix进程间通信包括: 信号 管道 System V IPC。System V IPC又包括: 消息队列 信号量 共享内存区 第3章 Linux进程间通信 Linux支持多种通信机制,常用的有:信号(signal)、管道(pipe)以及与SYSTEM V兼容的消息队列(message queue)、信号量(semaphore)和共享内存(shared memory)。Linux还支持用于不同机器之间的进程间通信套接字(socket)。 (1)信号机制 信号是Unix系统中的最古老的进程间通信方式,也是Linux最基本的进程通讯机制,用于通知接收进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身。信号机制的一个主要特点是它的异步特性,这表现在进程在执行期间可随时接收到信号,甚至可能当进程正在执行系统调用时接收信号。 Linux除了支持Unix早期信号语义函数signal外,还支持语义符合POSIX.1标准的信号函数sigaction。 (2)管道机制 管道是实现进程间大容量信息传送的机构。管道用于连接一个读进程和一个写进程,是实现二者之间通信的共享文件。管道可分为 匿名管道(anonymous pipe)。匿名管道可用于具有亲缘关系进程间的通信,它实际是由固定大小的高速缓冲区构成。 有名管道(named pipe)。有名管道克服了管道没有名字的限制,是一个按名存取的文件,该文件可长期存在,任意进程都可按通常的文件存取方法存取有名管道。有名管道除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。 (3)System V的进程通信机制 Linux支持三种SystemV进程通信机制:消息机制、信号量机制和共享内存机制。Linux对三种机制的实施大同小异。其中最快的一种形式是共享内存。 消息队列:消息队列是消息的链接表。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。 信号量:主要作为进程间以及同一进程不同线程之间的同步手段。 (4)套接字(Socket) 套接字是更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上。Linux和System V的变种都支持套接字。 3.1 信号 系统中有一组被详细定义的信号类型,这些信号可以由内核或者系统中其它具有适当权限的进程产生。信号可以发给一个或多个进程,也可以在某些系统错误发生时产生。信号还被shell进程用来向其子进程发送任务控制命令。为区别于硬件中断,又称为软中断。 信号事件的发生有两个来源: 硬件来源,比如按下了键盘或者其它硬件故障; 软件来源,最常用发送信号的系统函数是kill,raise,alarm和setitimer以及sigqueue函数,软件来源还包括一些非法运算等操作。 3.1 信号 信号生命周期是从信号发送到相应的信号处理函数执行完毕。对于一个完整的信号生命周期来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画: 信号诞生:指的是触发信号的事件发生; 信号在进程中注册完毕; 信号在进程中的注销完毕; 信号处理函数执行完毕。 相邻两个事件的时间间隔构成信号生命周期的一个阶段。 3.1 信号 信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。 可以从两个不同的分类角度对信号进行分类: (1)可靠性方面:可靠信号与不可靠信号; (2)与时间的关系上:实时信号与非实时信号。 3.1 信号 进程可以通过三种方式来响应一个信号: 忽略信号,即对信号不做任何处理,其中,有两个信号不能忽略:SIGKILL及SIGSTOP; 捕捉信号。定义信号处理函数,当信号发生时,执行相应的处理函数; 执行缺省操作,Linux对每种信号都规定了默认操作。注意,进程对实时信号的缺省反应是进程终止。 Linux究竟采用上述三种方式的哪一个来响应信号,取决于传递给相应API函数的参数。 3.1 信号 信号与中断的相似点: (1)采用了相同的异步通信方式; (2)当检测出有信号或中断请求时,都暂停正在执行的程序而转去执行相应的处理程序; (3)都在处理完毕后返回到原来的断点; (4)对信号或中断都可进行屏蔽。 信号与中断的

文档评论(0)

1亿VIP精品文档

相关文档