auto commit

This commit is contained in:
CyC2018
2020-11-17 00:32:18 +08:00
parent f5ad47b470
commit 7e61fc1360
380 changed files with 2371 additions and 46715 deletions

View File

@ -1,34 +1,36 @@
# 计算机操作系统 - 进程管理
<!-- GFM-TOC -->
* [进程与线程](#进程与线程)
* [1. 进程](#1-进程)
* [2. 线](#2-线)
* [3. 区别](#3-区别)
* [进程状态的切换](#进程状态的切换)
* [进程调度算法](#进程调度算法)
* [1. 批处理系统](#1-批处理系统)
* [2. 交互式系统](#2-交互式系统)
* [3. 实时系统](#3-实时系统)
* [进程同步](#进程同步)
* [1. 临界区](#1-临界区)
* [2. 同步与互斥](#2-同步与互斥)
* [3. 信号量](#3-信号量)
* [4. 管程](#4-管程)
* [经典同步问题](#经典同步问题)
* [1. 哲学家进餐问题](#1-哲学家进餐问题)
* [2. 读者-写者问题](#2-读者-写者问题)
* [进程通信](#进程通信)
* [1. 管道](#1-管道)
* [2. FIFO](#2-fifo)
* [3. 消息队列](#3-消息队列)
* [4. 信号量](#4-信号量)
* [5. 共享存储](#5-共享存储)
* [6. 套接字](#6-套接字)
* [计算机操作系统 - 进程管理](#计算机操作系统---进程管理)
* [程与线](#程与线)
* [1. ](#1-)
* [2. 线程](#2-线程)
* [3. 区别](#3-区别)
* [进程状态的切换](#进程状态的切换)
* [进程调度算法](#进程调度算法)
* [1. 批处理系统](#1-批处理系统)
* [2. 交互式系统](#2-交互式系统)
* [3. 实时系统](#3-实时系统)
* [进程同步](#进程同步)
* [1. 临界区](#1-临界区)
* [2. 同步与互斥](#2-同步与互斥)
* [3. 信号量](#3-信号量)
* [4. 管程](#4-管程)
* [经典同步问题](#经典同步问题)
* [1. 哲学家进餐问题](#1-哲学家进餐问题)
* [2. 读者-写者问题](#2-读者-写者问题)
* [进程通信](#进程通信)
* [1. 管道](#1-管道)
* [2. FIFO](#2-fifo)
* [3. 消息队列](#3-消息队列)
* [4. 信号量](#4-信号量)
* [5. 共享存储](#5-共享存储)
* [6. 套接字](#6-套接字)
<!-- GFM-TOC -->
# 进程与线程
## 进程与线程
## 1. 进程
### 1. 进程
进程是资源分配的基本单位
@ -38,7 +40,7 @@
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/a6ac2b08-3861-4e85-baa8-382287bfee9f.png"/> </div><br>
## 2. 线程
### 2. 线程
线程是独立调度的基本单位
@ -48,7 +50,7 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/3cd630ea-017c-488d-ad1d-732b4efeddf5.png"/> </div><br>
## 3. 区别
### 3. 区别
拥有资源
@ -66,7 +68,7 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
线程间可以通过直接读写同一进程中的数据进行通信但是进程通信需要借助 IPC
# 进程状态的切换
## 进程状态的切换
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/ProcessState.png" width="500"/> </div><br>
@ -79,11 +81,11 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
- 只有就绪态和运行态可以相互转换其它的都是单向转换就绪状态的进程通过调度算法从而获得 CPU 时间转为运行状态而运行状态的进程在分配给它的 CPU 时间片用完之后就会转为就绪状态等待下一次调度
- 阻塞状态是缺少需要的资源从而由运行状态转换而来但是该资源不包括 CPU 时间缺少 CPU 时间会从运行态转换为就绪态
# 进程调度算法
## 进程调度算法
不同环境的调度算法目标不同因此需要针对不同环境来讨论调度算法
## 1. 批处理系统
### 1. 批处理系统
批处理系统没有太多的用户操作在该系统中调度算法目标是保证吞吐量和周转时间从提交到终止的时间
@ -103,7 +105,7 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
最短作业优先的抢占式版本按剩余运行时间的顺序进行调度 当一个新的作业到达时其整个运行时间与当前进程的剩余时间作比较如果新的进程需要的时间更少则挂起当前进程运行新的进程否则新的进程等待
## 2. 交互式系统
### 2. 交互式系统
交互式系统有大量的用户交互操作在该系统中调度算法的目标是快速地进行响应
@ -136,15 +138,15 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/042cf928-3c8e-4815-ae9c-f2780202c68f.png"/> </div><br>
## 3. 实时系统
### 3. 实时系统
实时系统要求一个请求在一个确定时间内得到响应
分为硬实时和软实时前者必须满足绝对的截止时间后者可以容忍一定的超时
# 进程同步
## 进程同步
## 1. 临界区
### 1. 临界区
对临界资源进行访问的那段代码称为临界区
@ -156,12 +158,12 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
// exit section
```
## 2. 同步与互斥
### 2. 同步与互斥
- 同步多个进程因为合作产生的直接制约关系使得进程有一定的先后执行关系
- 互斥多个进程在同一时刻只有一个进程能进入临界区
## 3. 信号量
### 3. 信号量
信号量Semaphore是一个整型变量可以对其执行 down up 操作也就是常见的 P V 操作
@ -188,7 +190,7 @@ void P2() {
}
```
<font size=3> **使用信号量实现生产者-消费者问题** </font> </br>
\<font size=3\> **使用信号量实现生产者-消费者问题** \</font\> \</br\>
问题描述使用一个缓冲区来保存物品只有缓冲区没有满生产者才可以放入物品只有缓冲区不为空消费者才可以拿走物品
@ -228,7 +230,7 @@ void consumer() {
}
```
## 4. 管程
### 4. 管程
使用信号量机制实现的生产者消费者问题需要客户端代码做很多控制而管程把控制的代码独立出来不仅不容易出错也使得客户端代码调用更容易
@ -302,11 +304,11 @@ begin
end;
```
# 经典同步问题
## 经典同步问题
生产者和消费者问题前面已经讨论过了
## 1. 哲学家进餐问题
### 1. 哲学家进餐问题
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/a9077f06-7584-4f2b-8c20-3a8e46928820.jpg"/> </div><br>
@ -386,7 +388,7 @@ void check(i) {
}
```
## 2. 读者-写者问题
### 2. 读者-写者问题
允许多个进程同时对数据进行读操作但是不允许读和写以及写和写操作同时发生
@ -530,7 +532,7 @@ void reader()
```
# 进程通信
## 进程通信
进程同步与进程通信很容易混淆它们的区别在于
@ -539,7 +541,7 @@ void reader()
进程通信是一种手段而进程同步是一种目的也可以说为了能够达到进程同步的目的需要让进程进行通信传输一些进程同步所需要的信息
## 1. 管道
### 1. 管道
管道是通过调用 pipe 函数创建的fd[0] 用于读fd[1] 用于写
@ -555,7 +557,7 @@ int pipe(int fd[2]);
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/53cd9ade-b0a6-4399-b4de-7f1fbd06cdfb.png"/> </div><br>
## 2. FIFO
### 2. FIFO
也称为命名管道去除了管道只能在父子进程中使用的限制
@ -569,7 +571,7 @@ FIFO 常用于客户-服务器应用程序中FIFO 用作汇聚点,在客户
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/2ac50b81-d92a-4401-b9ec-f2113ecc3076.png"/> </div><br>
## 3. 消息队列
### 3. 消息队列
相比于 FIFO消息队列具有以下优点
@ -577,11 +579,11 @@ FIFO 常用于客户-服务器应用程序中FIFO 用作汇聚点,在客户
- 避免了 FIFO 的同步阻塞问题不需要进程自己提供同步方法
- 读进程可以根据消息类型有选择地接收消息而不像 FIFO 那样只能默认地接收
## 4. 信号量
### 4. 信号量
它是一个计数器用于为多个进程提供对共享数据对象的访问
## 5. 共享存储
### 5. 共享存储
允许多个进程共享一个给定的存储区因为数据不需要在进程之间复制所以这是最快的一种 IPC
@ -589,13 +591,6 @@ FIFO 常用于客户-服务器应用程序中FIFO 用作汇聚点,在客户
多个进程可以将同一个文件映射到它们的地址空间从而实现共享内存另外 XSI 共享内存不是使用文件而是使用内存的匿名段
## 6. 套接字
### 6. 套接字
与其它通信机制不同的是它可用于不同机器间的进程通信
<div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/githubio/公众号二维码-2.png"></img></div>