auto commit

This commit is contained in:
CyC2018 2018-06-14 14:26:34 +08:00
parent 2e2d499a45
commit 92e1133d98

View File

@ -8,7 +8,7 @@
* [二、进程管理](#二进程管理)
* [进程与线程](#进程与线程)
* [进程状态的切换](#进程状态的切换)
* [调度算法](#调度算法)
* [进程调度算法](#进程调度算法)
* [进程同步](#进程同步)
* [经典同步问题](#经典同步问题)
* [进程通信](#进程通信)
@ -122,7 +122,7 @@ Linux 的系统调用主要有以下这些:
### 1. 外中断
由 CPU 执行指令以外的事件引起,如 I/O 结束中断,表示设备输入/输出处理已经完成,处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。
由 CPU 执行指令以外的事件引起,如 I/O 完成中断,表示设备输入/输出处理已经完成,处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。
### 2. 异常
@ -179,29 +179,33 @@ Linux 的系统调用主要有以下这些:
- 只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。
- 阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU 时间,缺少 CPU 时间会从运行态转换为就绪态。
## 调度算法
## 进程调度算法
需要针对不同环境来讨论调度算法。
不同环境的调度算法目标不同,因此需要针对不同环境来讨论调度算法。
### 1. 批处理系统中的调度
### 1. 批处理系统
**(一)先来先服务 first-come first-serverdFCFS**
批处理系统没有太多的用户操作,在该系统中,调度算法目标是保证吞吐量和周转时间(从提交到终止的时间)。
调度最先进入就绪队列的作业。
**1.1 先来先服务 first-come first-serverdFCFS**
按照请求的顺序进行调度。
有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又需要执行很长时间,造成了短作业等待时间过长。
**(二)短作业优先 shortest job firstSJF**
**1.2 短作业优先 shortest job firstSJF**
调度估计运行时间最短的作业
按估计运行时间最短的顺序进行调度
长作业有可能会饿死,处于一直等待短作业执行完毕的状态。因为如果一直有短作业到来,那么长作业永远得不到调度。
**(三)最短剩余时间优先 shortest remaining time nextSRTN**
**1.3 最短剩余时间优先 shortest remaining time nextSRTN**
### 2. 交互式系统中的调度
按估计剩余时间最短的顺序进行调度。
**(一)优先级调度**
### 2. 交互式系统
**优先级调度**
除了可以手动赋予优先权之外,还可以把响应比作为优先权,这种调度方式叫做高响应比优先调度算法。
@ -209,13 +213,13 @@ Linux 的系统调用主要有以下这些:
这种调度算法主要是为了解决短作业优先调度算法长作业可能会饿死的问题,因为随着等待时间的增长,响应比也会越来越高。
**(二)时间片轮转**
**时间片轮转**
将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 时间分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 时间分配给队首的进程。
时间片轮转算法的效率和时间片的大小有很大关系。因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换得太频繁,在进程切换上就会花过多时间。
**(三)多级反馈队列**
**多级反馈队列**
<div align="center"> <img src="../pics//042cf928-3c8e-4815-ae9c-f2780202c68f.png"/> </div><br>
@ -223,7 +227,7 @@ Linux 的系统调用主要有以下这些:
每个队列优先权也不同,最上面的优先权最高。因此只有上一个队列没有进程在排队,才能调度当前队列上的进程。
### 3. 实时系统中的调度
### 3. 实时系统
实时系统要求一个服务请求在一个确定时间内得到响应。