实验六进程间通信.ppt
《实验六进程间通信.ppt》由会员分享,可在线阅读,更多相关《实验六进程间通信.ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验六进程间通信 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望实验六 进程间通信 v预备知识Linux进程间通信进程软中断通信管道和消息队列v实验指导软中断通信函数管道通信的使用消息队列的应用v实验目的、内容1.1 Linux进程间通信v实现数据传输、数据共享、事件通知、资源共享和进程控制等vLinux的进程间通信方式管道(Pipe)和有名管道(Named Pipe)信号(Signal)消息(Message)队列共享内存信号量(Semaphore)套接口(Soc
2、ket)1.1 Linux进程间通信管道和有名管道v管道用于具有亲缘关系进程间的通信管道是半双工的,数据只能单向流动(双方通信需建立两个管道)管道只能用于父子进程或兄弟进程之间管道对于管道两端的进程而言就是一个文件,并单独构成一种文件系统,存在于内存中写管道的内容添加在管道缓冲区的末尾,读管道则从缓冲区头部读出v有名管道在普通管道具备功能基础上,通过给管道命名的方法变成管道文件,允许无亲缘关系进程间通过访问管道文件进行通信1.1 Linux进程间通信信号v在一个或多个进程之间传递异步信号v类似于Windows下的消息,用于通知接收进程有某种事件发生v当某个信号出现时,系统有三种处理方式:忽略信
3、号:大多数信号使用,但SIGKIL和SIGSTOP不能被忽略捕捉信号:通知内核在某种信号发生时,调用一个用户函数执行系统默认动作:异常终止(abort)、退出(exit)、忽略(ignore)、停止(stop)或继续(continue)1.1 Linux进程间通信消息队列v也叫报文队列,是消息的链接表v有两种类型的消息队列:POSIX消息队列和系统V消息队列v运行于同一台机器上的进程间通信,与管道类似v消息内存可根据需要自行定义,可忽略信号承载信息量少、管道只能承载无格式字节流以及缓冲区大小受限等缺点v可以用流管道或套接口方式取代1.1 Linux进程间通信共享内存v在系统内核分配一块缓冲区,
4、多个进程都可以访问该缓冲区v效率高:进程可以直接读写内存,不需任何数据拷贝,避免了内核空间与用户空间的切换v同步和协议都不受程序员控制,必须确保将句柄传递给子进程和线程,需与其它通信机制结合使用,来达到进程间的同步及互斥v多用于存储应用程序的配置信息1.1 Linux进程间通信信号量v也称信号灯,用来协调不同进程间的数据对象v提供对进程间共享资源访问控制的手段,用来保护共享资源v还可用于进程间及同一进程不同线程间的进程同步v两种类型二值信号灯:取值只能为0或1,类似于互斥锁计算信号灯:取值可以为任意非负值(受内核本身约束)1.1 Linux进程间通信套接口v也称套接字,用于不同机器之间的进程间
5、通信v通信域是用来说明套接口通信的协议,创建套接口时要指明它的通信域v常见的有:UNIX域套接口、网际通信域v系统的网络编程接口,以文件的形式实现(属于sockfs特殊文件系统)1.2 进程软中断通信v即信号,提供一种简单的处理异步事件的方法v信号机制是对中断机制的一种模拟,又称为软中断v信号与中断的相似点采用了相同的异步通信方式当检测出有信号或中断请求时,暂停正在执行的程序而转去执行相应的处理程序处理完毕后返回到原来的断点对信号或中断可以进行屏蔽v信号与中断的区别中断有优先级,而信号没有优先级,所有的信号都是平等的信号处理程序在用户态下运行,而中断处理程序在核心态下运行中断响应是及时的,而信
6、号响应通常都有较大的时间延迟1.2 进程软中断通信信号机制的功能v发送信号发送进程把信号送到指定进程信号域的某一位上,如目标进程正在一个可被中断的优先级上睡眠,核心便将其唤醒v预置对信号的处理方式进程处于核心态时,即使受到软中断也不予理睬;只有当它返回到用户态后,才处理软中断信号v收受信号的进程按事先规定完成对相应事件的处理1.3 管道和消息队列无名管道int pipe(int fd2);一般的文件I/O函数都可用v读数据规则若管道的写端不存在,读出字节数为0写端存在时,若请求字节数大于PIPE_BUF,则返回管道中的现有数据;否则返回请求的字节数v写入规则不保证写入的原子性,若有空闲区域,写
7、进程就会试图写入管道,若读进程不读走数据,则写操作将一直阻塞管道读端存在时,写入数据才有意义;否则,写进程将收到内核传来的SIFPIP信号,应用程序处理该信号或忽略(默认终止应用程序)1.3 管道和消息队列命名管道(1)int mkfifo(const char*pathname,mode t_mode);v增加了打开操作:若当前打开操作是为读而打开,若已有进程为写而打开,则打开成功;否则,阻塞直到有相应进程为写而打开(设置了阻塞标识),或成功返回(未设置阻塞标识)若当前打开操作是为写而打开,若已有进程为读而打开,则打开成功;否则,阻塞直到有进程为读而打开(设置了阻塞标识),或返回ENXIO错
8、误(未设置阻塞标识)1.3 管道和消息队列命名管道(2)v约定:如果进程为了从FIFO中读取数据而阻塞打开FIFO,那么称该进程内的读操作为设置了阻塞标志的读操作 如果进程为了向FIFO中写入数据而阻塞打开FIFO,那么称该进程内的写操作为设置了阻塞标志的写操作 v读数据规则若有进程写打开FIFO,且当前FIFO中无数据,则对于设置了阻塞标志的读操作,将一直阻塞;对无阻塞标志的读操作则返回-1读打开的阻塞标志只对本进程第一个读操作施加作用,如果有多个读操作序列,则在第一个读操作被唤醒并完成后,后续的读操作将不再阻塞如果没有进程写打开,则设置了阻塞标志的读操作阻塞1.3 管道和消息队列命名管道(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 进程 通信
限制150内