Linux0.11笔记——进程间通信之管道机制

本文深入解析Linux中的管道机制,一种用于进程间通信的方法。管道通过内存页实现,具备文件属性,支持读写进程间的双向数据交换。文章详细介绍了管道的工作原理、如何在内存中为管道分配空间以及操作系统如何管理和维护管道。
摘要由CSDN通过智能技术生成

    Linux0.11设计了两套机制来实现进程间通信的合理要求。一套是管道机制,另一套是信号机制。今天主要讲的是管道机制,在管道机制中,每个管道允许两进程交互数据,一个进程向管道输入数据,另一个进程从管道中输出数据,如下图所示:


    操作系统在内存中为每个管道开辟一页内存,给这页内存赋予了文件的属性。这一页由两个进程共享,但不会分配给任何进程,只由内核掌控。本质上,管道是一页内存。但进程要以操作文件的方式操作管道,这要求管道具备一些文件属性减少页属性。

    文件属性:创建管道相当于创建文件,管道文件是为了两个进程使用而创建的,因此需要将两进程的*filp[20]与file_table[64](在上一篇博客介绍文件系统中有提到)的两项挂接,进程想要具备操作管道文件的能力,还要建立管道文件i节点与file_table[64]的关系。系统申请一个空闲内存页面,并将该页面地址载入i节点,并将i节点引用计数设为2,一个是读进程,一个数写进程。将file_table[64]的两个空闲项都指向这个管道文件,并将第一个空闲项的文件模式设为读,第二个设为写。最后返回管道文件的两个句柄给用户进程。

    减少页属性:页内存毕竟要当个文件使用,那么要求进程不能像访问自己数据一样访问它,因此不能映射到进程的线性地址空间。再如,两个进程操作这个页,也不能产生写时复制,否则无法共享管道。

    管道文件操作:读管道执行时,若管道中有未读数据,就读取数据,若无未读数据,则读管道操作挂起,这样就不会读取垃圾数据。写管道执行时,若有剩余空间,就写入数据,没有剩余空间则挂起,这样就不会覆盖尚未读取的数据。另外,管道大小只有一个页面,所以写或读到页面尾端后,读写指针要能回滚到页面首端以便继续操作。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值