auto commit

This commit is contained in:
CyC2018
2019-11-02 12:07:41 +08:00
parent 182e1440a4
commit bb6e0df82d
784 changed files with 7545 additions and 2827 deletions

View File

@ -1,30 +1,4 @@
<!-- 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-套接字)
<!-- GFM-TOC -->
[TOC]
# 进程与线程
@ -36,7 +10,7 @@
下图显示了 4 个程序创建了 4 个进程 4 个进程可以并发地执行
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/a6ac2b08-3861-4e85-baa8-382287bfee9f.png"/> </div><br>
![](pics/a6ac2b08-3861-4e85-baa8-382287bfee9f.png)
## 2. 线程
@ -46,7 +20,7 @@
QQ 和浏览器是两个进程浏览器进程里面有很多线程例如 HTTP 请求线程事件响应线程渲染线程等等线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时浏览器还可以响应用户的其它事件
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/3cd630ea-017c-488d-ad1d-732b4efeddf5.png"/> </div><br>
![](pics/3cd630ea-017c-488d-ad1d-732b4efeddf5.png)
## 3. 区别
@ -68,7 +42,7 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
# 进程状态的切换
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/ProcessState.png" width="500"/> </div><br>
<img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/ProcessState.png" width="500"/>
- 就绪状态ready等待被调度
- 运行状态running
@ -116,7 +90,7 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
- 因为进程切换都要保存进程的信息并且载入新进程的信息如果时间片太小会导致进程切换得太频繁在进程切换上就会花过多时间
- 而如果时间片过长那么实时性就不能得到保证
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/8c662999-c16c-481c-9f40-1fdba5bc9167.png"/> </div><br>
![](pics/8c662999-c16c-481c-9f40-1fdba5bc9167.png)
**2.2 优先级调度**
@ -134,7 +108,7 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
可以将这种调度算法看成是时间片轮转调度算法和优先级调度算法的结合
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/042cf928-3c8e-4815-ae9c-f2780202c68f.png"/> </div><br>
![](pics/042cf928-3c8e-4815-ae9c-f2780202c68f.png)
## 3. 实时系统
@ -453,7 +427,7 @@ void reader()
## 2. 哲学家进餐问题
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/a9077f06-7584-4f2b-8c20-3a8e46928820.jpg"/> </div><br>
![](pics/a9077f06-7584-4f2b-8c20-3a8e46928820.jpg)
五个哲学家围着一张圆桌每个哲学家面前放着食物哲学家的生活有两种交替活动吃饭以及思考当一个哲学家吃饭时需要先拿起自己左右两边的两根筷子并且一次只能拿起一根筷子
@ -547,7 +521,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>
![](pics/53cd9ade-b0a6-4399-b4de-7f1fbd06cdfb.png)
## 2. FIFO
@ -561,7 +535,7 @@ int mkfifoat(int fd, const char *path, mode_t mode);
FIFO 常用于客户-服务器应用程序中FIFO 用作汇聚点在客户进程和服务器进程之间传递数据
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/2ac50b81-d92a-4401-b9ec-f2113ecc3076.png"/> </div><br>
![](pics/2ac50b81-d92a-4401-b9ec-f2113ecc3076.png)
## 3. 消息队列
@ -586,10 +560,3 @@ FIFO 常用于客户-服务器应用程序中FIFO 用作汇聚点,在客户
## 6. 套接字
与其它通信机制不同的是它可用于不同机器间的进程通信
<div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/githubio/公众号二维码-1.png"></img></div>