03 进程通信

什么是进程通信

进程通信是指在进程间传输数据(交换信息)。进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立,而且为了保证安全,一个进程不能直接访问另外一个进程的地址空间。进程通信分为三种方式:共享内存模式、消息传递模式、共享文件模式。

共享内存

进程通信采用共享内存方式时,操作系统会在内存中开辟一块共享空间,允许通信进程对其互斥的访问(即 同一时间只允许一个进程访问该共享空间,互斥访问可以通过操作系统提供的工具实现)。

共享存储方式还分为了两种,分别是基于数据结构的共享、基于存储区的共享。

基于数据结构的共享

共享空间的数据格式有所限制,如 共享空间只能放一个长度为10的数组。这种共享方式速度慢、限制多、是一种低级通信方式

基于存储区的共享

数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,是一种高级通信方式

管道通信

管道是指用于连接读写进程的一个共享文件,又名pipe文件。进程通信采用管道通信方式时,操作系统会在内存中开辟的一个大小固定的缓冲区,进程需要按照"管道通信规则"进行通信。

管道通信规则

1 一条管道只能实现半双工通信,即 某一时间段内只能实现单向的数据传输。
2 各个进程只能互斥的访问管道,即 当一个进程在写的时候,另外一个进程不能读,反之亦然。
3 数据会以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将会被阻塞,直到读进程将数据取走;当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞。
4 如果没写满,就不允许读;如果没读空,就不允许写。

消息传递

进程通信采用消息传递方式时,进程间的数据交换会以格式化的信息 (Message) 为单位。进程通过操作系统提供的"发送消息/接受消息"两个原语进行数据交换。

posted @ 2021-02-08 20:53  数大招疯-公众号同名  阅读(128)  评论(0编辑  收藏  举报