陕西建设工程信息网站,erp企业管理系统软件开发,系统开发流程图,androidapp开发入门目录
编辑
一.什么是进程之间的通信
二.进程之间的通信所访问的数据
三.进程之间的通信是如何做到的
四.基于内存文件级别的通信方式——管道 1.什么是管道 2.管道的建立过程——匿名管道 a.什么是匿名管道 b.匿名管道特点#xff1a; c.使用匿名管道的… 目录
编辑
一.什么是进程之间的通信
二.进程之间的通信所访问的数据
三.进程之间的通信是如何做到的
四.基于内存文件级别的通信方式——管道 1.什么是管道 2.管道的建立过程——匿名管道 a.什么是匿名管道 b.匿名管道特点 c.使用匿名管道的四种情况
五.具有血缘关系的进程之间的通信的代码实现
六.使用匿名管道实现简易版本的进程池
七.匿名管道和我们之前在bash命令行中使用的 | 有什么关系
八.命名管道
九.使用命名管道通信并完成程序日志的打印
十.通过system V 共享内存实现的进程之间的通信 1.什么是system V 共享内存 2.从共享内存的申请到共享内存的使用 3.共享内存的释放 4.问题 一.什么是进程之间的通信 定义两个或多个进程之间实现数据层面的交互。 进程之间的通信实现的成本是很高的因为我们都知道在操作系统中进程之间的是有独立性的。 二.进程之间的通信所访问的数据 1.基本数据 2.发送命令 3.某种协议 4.通知 三.进程之间的通信是如何做到的 1.进程之间的通信必须让不同的进程之间看到同一份“资源”。 2.这个“资源”是指特定形式的存储空间。 3.这个特定形式的存储空间是谁来提供的 假设a如果这个特定的存储空间是由进行通信的双方的其中一方提供的。 那么这个资源属于谁 属于该进程独有的。 那么此时我们在进行进程之间的通信那么势必会破会进程之间的独立性这是个万万不可以的。 假设b如果这个特定的存储空间是又操作系统提供的。 在两个进程要发生进程之间的通信时操作系统会为两者开辟一段第三方空间来满足进程通信的需要。 那么访问这个空间进行通信本质就是访问操作系统进程代表的就是用户“资源”从创建到使用到释放这一系列过程都是由操作系统来提供系统级别的调用接口的。 从底层设计从接口设计 都是要由操作系统独立设计的。 一般的操作系统都是有一个独立的通信模块-隶属于文件系统-----IPC通信模块 4.关于进程通信是有标准的system V 本机内部的通信 posix网络之间的通信。 四.基于内存文件级别的通信方式——管道 1.什么是管道 管道是Linux由Unix那里继承过来的进程间的通信机制它是Unix早期的一个重要通信机制。其思想是在内存中创建一个共享文件从而使通信双方利用这个共享文件来传递信息。由于这种方式具有单向传递数据的特点所以这个作为传递消息的共享文件就叫做“管道”。 2.管道的建立过程——匿名管道 a.什么是匿名管道 这种使带有血缘关系的进程之间可以通信的管道称匿名管道。 b.匿名管道特点 只能用于具有共同祖先的进程具有亲缘关系的进程之间进行通信通常一个管道由一个进程创建然后该进程调用fork此后父、子进程之间就可应用该管道。 管道提供流式服务。 一般而言进程退出管道释放所以管道的生命周期随进程。 一般而言内核会对管道操作进行同步与互斥。 在读取管道的数据后会将对应的数据变为可覆盖的数据。 管道是半双工的数据只能向一个方向流动需要双方通信时需要建立起两个管道。 c.使用匿名管道的四种情况 读写端正常管道如果为空读端就会被阻塞。 读端慢写端快 会一瞬间将管道文件写满此时写端会被阻塞然后读端在自己的用户级缓存区没满的前提下有多少读多少。 管道文件的是有大小的使用 ulimit -a 指令可以查看重要文件的规定。 其中可以看到这个里面表明管道的大小是4kb但是实际的管道大小是4kb吗 我们将读端关闭然后此时一直向管道写入一个字符 我们发现 此时管道文件的大小是64kb。不同的内核平台下这个大小不同 如何查看Linux的内核是什么版本uname -r 那么我们上面查到的4kb是什么实际上在我们进行读写时有一个大小是PIPE_BUF 这个大小是4kb如果单次写入时写入的数据是小于PIPE_BUF的那么此时读写就是原子的此时即使管道有数据但是写端还没有写完读端也不会从管道中读取数据。 读写端不正常 读正常写不正常 此时读文件时文件中没有数据read接口会识别到文件的结尾所以什么都不会读到。 写端正常但是读端关闭 此时写端在向管道文件中写入数据是没有意义的而其操作系统也不会允许友这样的行为存在此时操作系统会像进程发送型号使进程退出。 五.具有血缘关系的进程之间的通信的代码实现 Linux-模拟实现基于内存级文件的单向进程通信-CSDN博客 六.使用匿名管道实现简易版本的进程池 Linux-使用管道实现简易版本的进程池-CSDN博客 七.匿名管道和我们之前在bash命令行中使用的 | 有什么关系 egcat test.txt | head -10 | tail -5 此时这里使用的管道就是匿名管道这三个指令在启动为进程后都有同样的父进程bash。 八.命名管道 1.什么是命名管道 命名管道就是创建在当前工作目录的一个系统级文件。 命名管道是用于没有血缘关系的进程之间的通信也是单向通信。 2.如何定义命名管道 使用mkfifo 加管道名称就可以创建一个命名管道。 命名管道和匿名管道除了适用对象不同其他的基本相同。 九.使用命名管道通信并完成程序日志的打印 Linux-实现小型日志系统-CSDN博客 十.通过system V 共享内存实现的进程之间的通信 1.什么是system V 共享内存 共享内存就是由操作系统为进程之间想要通信在物理内存上所开辟的一段存储空间。 2.从共享内存的申请到共享内存的使用 a.进程向操作系统发出请求希望操作系统为它开辟一段共享内存以满足它通信的需求。 b.操作系统接收进程发来的请求完成对共享内存的开辟。 c.操作系统将在物理内存中开辟好的共享内存通过页表和发出请求的进程的进程地址空间进行建立链接。 d.为了使发出请求的进程可以使用操作系统开辟好的共享内存在建立关联时操作系统还会将共享内存在进程地址空间中的启始虚拟地址返回给进程。 3.共享内存的释放 首先因该先去关联然后在使用系统调用接口来释放共享内存。 4.问题 a.从共享内存的创建到共享内存的管理都是又操作系统来完成的为什么不能是进程自己完成。 因为共享内存如果是由进程之间创建的话因为进程有独立性的原因其他的进程是没有办法去访问它的空间的此时就没有办法实现进程间的通信了。 b.系统中会开辟很多的共享内存来实现不同进程之间的通信的需要所以操作系统会将它们管理起来。 先描述在组织。 5.代码实现通过system v共享内存实现的进程间的通信 Linux-代码实现通过system v共享内存实现的进程间的通信-CSDN博客 6.共享内存的特点 a.共享内存没有同步和互斥的特点。 b.共享内存是所有的进程之间通信速度最快的。 c.共享内存中的数据由用户自己管理。