From 05c8f700f192139640354da995e578d09566267a Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Thu, 21 Jun 2018 13:46:58 +0800 Subject: [PATCH] auto commit --- notes/计算机操作系统.md | 56 +++++++++++------- pics/2ac50b81-d92a-4401-b9ec-f2113ecc3076.png | Bin 0 -> 19456 bytes pics/53cd9ade-b0a6-4399-b4de-7f1fbd06cdfb.png | Bin 0 -> 11264 bytes 3 files changed, 33 insertions(+), 23 deletions(-) create mode 100644 pics/2ac50b81-d92a-4401-b9ec-f2113ecc3076.png create mode 100644 pics/53cd9ade-b0a6-4399-b4de-7f1fbd06cdfb.png diff --git a/notes/计算机操作系统.md b/notes/计算机操作系统.md index 2cb0616c..873545cb 100644 --- a/notes/计算机操作系统.md +++ b/notes/计算机操作系统.md @@ -819,49 +819,59 @@ void test(i) { // 尝试拿起两把筷子 进程通信是一种手段,而进程同步是一种目的。也可以说,为了能够达到进程同步的目的,需要让进程进行通信,传输一些进程同步所需要的信息。 -### 1. 信号量 +### 1. 管道 -在进程同步中介绍的信号量也属于进程通信的一种方式,但是属于低级别的进程通信,因为它传输的信息非常小。 +管道是通过调用 pipe 函数创建的,fd[0] 用于读,fd[1] 用于写。 -### 2. 消息传递 +```c +#include +int pipe(int fd[2]); +``` -操作系统提供了用于通信的通道(Channel),进程可以通过读写这个通道进行通信。 +它具有以下限制: -

+- 只支持半双工通信(单向传输); +- 只能在父子进程中使用。 -**(一)管道** +

-写进程在管道的尾端写入数据,读进程在管道的首端读出数据。管道提供了简单的流控制机制,进程试图读空管道时,在有数据写入管道前,进程将一直阻塞。同样地,管道已经满时,进程再试图写管道,在其它进程从管道中移走数据之前,写进程将一直阻塞。 +### 2. FIFO -Linux 中管道通过空文件实现。 +也称为命名管道,去除了管道只能在父子进程中使用的限制。 -管道有三种: +```c +#include +int mkfifo(const char *path, mode_t mode); +int mkfifoat(int fd, const char *path, mode_t mode); +``` -- 普通管道:有两个限制,一是只能单向传输;二是只能在父子进程之间使用; -- 流管道:去除第一个限制,支持双向传输; -- 命名管道:去除第二个限制,可以在不相关进程之间进行通信。 +FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户进程和服务器进程之间传递数据。 -

+

-**(二)消息队列** +### 3. 消息队列 -消息队列克服了信号量传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 +相比于 FIFO,消息队列具有以下优点: -

+- 消息队列可以独立于读写进程存在,从而避免了 FIFO 中同步管道的打开和关闭时可能产生的困难; +- 避免了 FIFO 的同步阻塞问题,不需要进程自己提供同步方法; +- 读进程可以根据消息类型有选择地接收消息,而不像 FIFO 那样只能默认地接收。 -**(三)套接字** +### 4. 信号量 -套接字也是一种进程间通信机制,与其它通信机制不同的是,它可用于不同机器间的进程通信。 +它是一个计数器,用于为多个进程提供对共享数据对象的访问。 -

+### 5. 共享存储 -### 3. 共享内存 +允许多个进程共享一个给定的存储区。因为数据不需要在进程之间复制,所以这是最快的一种 IPC。 -操作系统建立一块共享内存,并将其映射到每个进程的地址空间上,进程就可以直接对这块共享内存进行读写。 +需要使用信号量用来同步对共享存储的访问。 -共享内存是最快的进程通信方式。 +多个进程可以将同一个文件映射到它们的地址空间从而实现共享内存。另外 XSI 共享内存不是使用文件,而是使用使用内存的匿名段。 -

+### 6. 套接字 + +与其它通信机制不同的是,它可用于不同机器间的进程通信。 # 三、死锁 diff --git a/pics/2ac50b81-d92a-4401-b9ec-f2113ecc3076.png b/pics/2ac50b81-d92a-4401-b9ec-f2113ecc3076.png new file mode 100644 index 0000000000000000000000000000000000000000..173ce970ba95b63da7fb431f2001a32a873425eb GIT binary patch literal 19456 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 Px25`@8tVU7_5XhWe`19` literal 0 HcmV?d00001 diff --git a/pics/53cd9ade-b0a6-4399-b4de-7f1fbd06cdfb.png b/pics/53cd9ade-b0a6-4399-b4de-7f1fbd06cdfb.png new file mode 100644 index 0000000000000000000000000000000000000000..2666f9c20941464ba722f5bb4c1b6b48eea9dddc GIT binary patch literal 11264 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