diff --git a/notes/计算机操作系统.md b/notes/计算机操作系统.md
index 04ece479..42a2d317 100644
--- a/notes/计算机操作系统.md
+++ b/notes/计算机操作系统.md
@@ -10,8 +10,8 @@
* [进程状态的切换](#进程状态的切换)
* [调度算法](#调度算法)
* [进程同步](#进程同步)
- * [进程通信](#进程通信)
* [经典同步问题](#经典同步问题)
+ * [进程通信](#进程通信)
* [三、死锁](#三死锁)
* [死锁的必要条件](#死锁的必要条件)
* [死锁的处理方法](#死锁的处理方法)
@@ -160,14 +160,14 @@ Linux 系统的系统调用有以下这些:
-- 就绪状态(ready):等待 CPU 时间
+- 就绪状态(ready):等待被调度
- 运行状态(running)
- 阻塞状态(waiting):等待资源
应该注意以下内容:
- 只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。
-- 阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU 时间,缺少 CPU 事件会从运行态转换为就绪态。
+- 阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU 时间,缺少 CPU 时间会从运行态转换为就绪态。
## 调度算法
@@ -385,44 +385,6 @@ begin
end;
```
-## 进程通信
-
-
-
-### 1. 管道
-
-写进程在管道的尾端写入数据,读进程在管道的首端读出数据。管道提供了简单的流控制机制,进程试图读空管道时,在有数据写入管道前,进程将一直阻塞。同样地,管道已经满时,进程再试图写管道,在其它进程从管道中移走数据之前,写进程将一直阻塞。
-
-Linux 中管道通过空文件实现。
-
-管道有三种:
-
-1. 普通管道:有两个限制,一是只能单向传输;二是只能在父子进程之间使用;
-2. 流管道:去除第一个限制,支持双向传输;
-3. 命名管道:去除第二个限制,可以在不相关进程之间进行通信。
-
-### 2. 信号量
-
-信号量是一个计数器,可以用来控制多个进程对共享资源的互斥访问,主要作为进程间以及同一进程内不同线程之间的同步手段。
-
-### 3. 消息队列
-
-消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
-
-### 4. 信号
-
-信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
-
-### 5. 共享内存
-
-共享内存就是映射一段能被其它进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。
-
-共享内存是最快的 IPC 方式,它是针对其它 IPC 运行效率低而专门设计的。它往往与其它通信机制(如信号量)配合使用,来实现进程间的同步和通信。
-
-### 6. 套接字
-
-套接字也是一种进程间通信机制,与其它通信机制不同的是,它可用于不同机器间的进程通信。
-
## 经典同步问题
生产者和消费者问题前面已经讨论过了。
@@ -535,6 +497,59 @@ void test(i) { // 尝试拿起两把筷子
}
```
+## 进程通信
+
+### 1. 进程同步与进程通信的区别
+
+- 进程同步:控制多个进程按一定顺序执行;
+- 进程通信:进程间传输信息。
+
+进程通信是一种手段,而进程同步是一种目的。也可以说,为了能够达到进程同步的目的,需要让进程进行通信,传输一些进程同步所需要的信息。
+
+在进程同步中介绍的信号量也属于进程通信的一种方式,但是属于低级别的进程通信,因为它传输的信息非常小。
+
+### 2. 进程通信方式
+
+#### 2.1 消息传递
+
+操作系统提供了用于通信的通道(Channel),进程可以通过读写这个通道进行通信。
+
+
+
+ **(1)管道**
+
+写进程在管道的尾端写入数据,读进程在管道的首端读出数据。管道提供了简单的流控制机制,进程试图读空管道时,在有数据写入管道前,进程将一直阻塞。同样地,管道已经满时,进程再试图写管道,在其它进程从管道中移走数据之前,写进程将一直阻塞。
+
+Linux 中管道通过空文件实现。
+
+管道有三种:
+
+1. 普通管道:有两个限制,一是只能单向传输;二是只能在父子进程之间使用;
+2. 流管道:去除第一个限制,支持双向传输;
+3. 命名管道:去除第二个限制,可以在不相关进程之间进行通信。
+
+
+
+ **(2)消息队列**
+
+消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
+
+
+
+ **(3)套接字**
+
+套接字也是一种进程间通信机制,与其它通信机制不同的是,它可用于不同机器间的进程通信。
+
+
+
+#### 2.2 共享内存
+
+操作系统建立一块共享内存,并将其映射到每个进程的地址空间上,进程就可以直接对这块共享内存进行读写。
+
+共享内存是最快的进程通信方式。
+
+
+
# 三、死锁
## 死锁的必要条件
diff --git a/pics/037c3a0b-332d-434d-a374-f343ef72c8e1.jpg b/pics/037c3a0b-332d-434d-a374-f343ef72c8e1.jpg
new file mode 100644
index 00000000..68950556
Binary files /dev/null and b/pics/037c3a0b-332d-434d-a374-f343ef72c8e1.jpg differ
diff --git a/pics/699b4f96-d63f-46ea-a581-2b3d95eceb6a.jpg b/pics/699b4f96-d63f-46ea-a581-2b3d95eceb6a.jpg
new file mode 100644
index 00000000..313b0f92
Binary files /dev/null and b/pics/699b4f96-d63f-46ea-a581-2b3d95eceb6a.jpg differ
diff --git a/pics/7be0abf9-687c-4451-becd-626b0be7ec22.jpg b/pics/7be0abf9-687c-4451-becd-626b0be7ec22.jpg
new file mode 100644
index 00000000..002f50ac
Binary files /dev/null and b/pics/7be0abf9-687c-4451-becd-626b0be7ec22.jpg differ
diff --git a/pics/7f642a65-b167-4c8f-b382-8322c6322b2c.jpg b/pics/7f642a65-b167-4c8f-b382-8322c6322b2c.jpg
new file mode 100644
index 00000000..27751a37
Binary files /dev/null and b/pics/7f642a65-b167-4c8f-b382-8322c6322b2c.jpg differ
diff --git a/pics/d49466db-fdd3-4d36-8a86-47dc45c07a1e.jpg b/pics/d49466db-fdd3-4d36-8a86-47dc45c07a1e.jpg
new file mode 100644
index 00000000..c4c7a915
Binary files /dev/null and b/pics/d49466db-fdd3-4d36-8a86-47dc45c07a1e.jpg differ