auto commit

This commit is contained in:
CyC2018 2018-03-18 09:39:39 +08:00
parent b128772158
commit b1068a7912

View File

@ -52,11 +52,11 @@
### 4. 异步 ### 4. 异步
异步指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。 异步指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。
## 系统调用 ## 系统调用
如果一个进程在用户态需要用到操作系统的一些功能,就需要使用系统调用从而陷入内核,由操作系统代为完成。 如果一个进程在用户态需要用到操作系统的一些功能,就使用系统调用从而陷入内核,由操作系统代为完成。
可以由系统调用请求的功能有设备管理、文件管理、进程管理、进程通信、存储器管理等。 可以由系统调用请求的功能有设备管理、文件管理、进程管理、进程通信、存储器管理等。
@ -120,7 +120,7 @@
<div align="center"> <img src="../pics//1706ce58-a081-4fed-9b36-c3c0d7e22b3a.jpg"/> </div><br> <div align="center"> <img src="../pics//1706ce58-a081-4fed-9b36-c3c0d7e22b3a.jpg"/> </div><br>
阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU缺少 CPU 会让进程从运行态转换为就绪态。 阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU缺少 CPU 会从运行态转换为就绪态。
只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。 只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。
@ -164,7 +164,7 @@ shortest remaining time nextSRTN
将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 分配给队首的进程。 将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 分配给队首的进程。
时间片轮转算法的效率和时间片的大小有很大关系。因为每次进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,进程切换太频繁,在进程切换上就会花过多时间。 时间片轮转算法的效率和时间片的大小有很大关系。因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换太频繁,在进程切换上就会花过多时间。
#### 2.3 多级反馈队列 #### 2.3 多级反馈队列
@ -196,15 +196,15 @@ shortest remaining time nextSRTN
### 2. 同步与互斥 ### 2. 同步与互斥
- 同步多个进程按一定顺序执行; - 同步多个进程按一定顺序执行;
- 互斥多个进程在同一时刻只有一个进程能进入临界区。 - 互斥多个进程在同一时刻只有一个进程能进入临界区。
### 3. 信号量 ### 3. 信号量
**信号量Semaphore** 是一个整型变量,可以对其执行 down 和 up 操作,也就是常见的 P 和 V 操作。 **信号量Semaphore** 是一个整型变量,可以对其执行 down 和 up 操作,也就是常见的 P 和 V 操作。
- **down** : 如果信号量大于 0 ,执行 -1 操作;如果信号量等于 0进程睡眠,等待信号量大于 0 - **down** : 如果信号量大于 0 ,执行 -1 操作;如果信号量等于 0进程睡眠等待信号量大于 0
- **up** :对信号量执行 +1 操作,并且唤醒睡眠的进程,让进程完成 down 操作。 - **up** :对信号量执行 +1 操作,唤醒睡眠的进程让其完成 down 操作。
down 和 up 操作需要被设计成原语,不可分割,通常的做法是在执行这些操作的时候屏蔽中断。 down 和 up 操作需要被设计成原语,不可分割,通常的做法是在执行这些操作的时候屏蔽中断。
@ -536,7 +536,7 @@ void test(i) { // 尝试拿起两把筷子
- C 矩阵:每个进程所拥有的资源数量,每一行都代表一个进程拥有资源的数量 - C 矩阵:每个进程所拥有的资源数量,每一行都代表一个进程拥有资源的数量
- R 矩阵:每个进程请求的资源数量 - R 矩阵:每个进程请求的资源数量
进程 P<sub>1</sub> 和 P<sub>2</sub> 所请求的资源都得不到满足,只有进程 P<sub>3</sub> 可以,让 P<sub>3</sub> 执行,之后释放 P<sub>3</sub> 拥有的资源,此时 A = (2 2 2 0)。P<sub>1</sub> 可以执行,执行后释放 P<sub>1</sub> 拥有的资源A = (4 2 2 2) P<sub>2</sub> 也可以执行。所有进程都可以顺利执行,没有死锁。 进程 P<sub>1</sub> 和 P<sub>2</sub> 所请求的资源都得不到满足,只有进程 P<sub>3</sub> 可以,让 P<sub>3</sub> 执行,之后释放 P<sub>3</sub> 拥有的资源,此时 A = (2 2 2 0)。P<sub>2</sub> 可以执行,执行后释放 P<sub>2</sub> 拥有的资源A = (4 2 2 1) 。P<sub>1</sub> 也可以执行。所有进程都可以顺利执行,没有死锁。
算法总结如下: 算法总结如下:
@ -666,7 +666,7 @@ void test(i) { // 尝试拿起两把筷子
<div align="center"><img src="https://latex.codecogs.com/gif.latex?70120304230321201701"/></div> <br> <div align="center"><img src="https://latex.codecogs.com/gif.latex?70120304230321201701"/></div> <br>
进程运行时,先将 7,0,1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。 进程运行时,先将 7, 0, 1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。
### 2. 先进先出FIFO ### 2. 先进先出FIFO
@ -678,7 +678,7 @@ void test(i) { // 尝试拿起两把筷子
虽然无法知道将来要使用的页面情况但是可以知道过去使用页面的情况。LRU 将最近最久未使用的页面换出。 虽然无法知道将来要使用的页面情况但是可以知道过去使用页面的情况。LRU 将最近最久未使用的页面换出。
可以用栈来实现该算法,栈中存储页面的页面号。当进程访问一个页面时,将该页面的页面号从栈移除,并将它压入栈顶。这样,最近被访问的页面的页面号总是在栈顶,而最近最久未使用的页面的页面号总是在栈底。 可以用栈来实现该算法,栈中存储页面的页面号。当进程访问一个页面时,将该页面的页面号从栈移除,并将它压入栈顶。这样,最近被访问的页面总是在栈顶,而最近最久未使用的页面总是在栈底。
<div align="center"><img src="https://latex.codecogs.com/gif.latex?47071012126"/></div> <br> <div align="center"><img src="https://latex.codecogs.com/gif.latex?47071012126"/></div> <br>
@ -696,7 +696,7 @@ Clock 页面置换算法需要用到一个访问位,当一个页面被访问
当多个进程同时请求访问磁盘时,需要进行磁盘调度来控制对磁盘的访问。磁盘调度的主要目标是使磁盘的平均寻道时间最少。 当多个进程同时请求访问磁盘时,需要进行磁盘调度来控制对磁盘的访问。磁盘调度的主要目标是使磁盘的平均寻道时间最少。
### 1. 先来先服务FCFS, First Come First Serverd ### 1. 先来先服务FCFS, First Come First Served
根据进程请求访问磁盘的先后次序来进行调度。优点是公平和简单,缺点也很明显,因为未对寻道做任何优化,使平均寻道时间可能较长。 根据进程请求访问磁盘的先后次序来进行调度。优点是公平和简单,缺点也很明显,因为未对寻道做任何优化,使平均寻道时间可能较长。