### 1. 多进程是操作系统的基本图像
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200308203650363-599927674.png)
### 2. 是否可以资源不动而切换指令序列
两个函数共享同一份数据的时候,可以用线程来运行它们,想java里面的多线程就行
把进程的切换分成两个部分,一个是指令的切换,一个是映射表(内存)的切换,现在只需知道指令的切换,也就是线程的切换
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200308203727573-124423399.png)
### 3. 切换线程是否实用?
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200308203740763-629986297.png)
### 4. 如何实现(重点)
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200308203754275-1467523620.png)
主要靠Yield来实现切换
**其作用是当前线程“放弃”执行,让操作系统调度另一线程继续执行**
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200308203806321-1166642670.png)
**重点**
用户级线程需要我们自己安排线程之间的切换
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200308204112893-543606508.png)
**每个线程都要有自己独有的栈,即线程栈**
**根据TCB(进程控制块)来进行切换栈**
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200308204128273-1358461723.png)
Create:
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200308204137123-1326626132.png)
### 5. 将所有的东西组合在一起
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200308204149796-817948353.png)
### 6. 为什么说用户级线程---Yield是用户程序
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200308204201062-1912277772.png)
### 7. 核心级线程
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200308204239272-1285733014.png)