mirror of
https://github.com/CodePanda66/CSPostgraduate-408.git
synced 2023-05-21 21:49:33 +08:00
add OS_2_2
This commit is contained in:
@@ -1,6 +1,171 @@
|
||||
---
|
||||
title: 处理器调度
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 1、处理器的三级调度
|
||||
|
||||
### 1.1、处理器的三级调度
|
||||
|
||||
在多道程序环境下,一个作业从提交到执行,通常都要经历多级调度,如高级调度,中级调度和低级调度。
|
||||
|
||||

|
||||
|
||||
1. 高级调度(作业调度、宏观调度、长程调度)
|
||||
|
||||
按照一定的原则,从外存上处于后备状态的作业中,选择一个或者多个,给他们分配内存输入输出设备的必要资源,并建立相应的进程。以使该作业具有获得竞争处理器的权利。调用频率较低。
|
||||
作业调度每次要接纳多少个作业进入内存取决于多道程序的并发程度。应该选择哪些作业从外存调入内存取决于所才取得调度算法(先来先服务调度算法等。)。
|
||||
|
||||
2. 中级调度(中程调度、交换调度)
|
||||
|
||||
按照给定的原则和策略,将处于外存对换区中具备运行条件的进程调入内存,并将其状态修改为就绪状态,挂在就绪队列上等待,或者将处于内存中的暂时不能运行的进程交换到外层对换区,此时进程状态称为挂起状态。
|
||||
|
||||
中级调度主要涉及内存管理和扩充
|
||||
|
||||
3. 低级调度(进程调度、微观调度、短程调度)
|
||||
|
||||
按照某种策略和方法,从就绪队列中选取一个进程,将处理器分配给它。
|
||||
|
||||
进程调度的运行频率很高,一般几十毫秒就要运行一次。
|
||||
|
||||
作业调度与进程调度的区别:
|
||||
|
||||
+ 作业调度的结果是为作业创建进程,而进程调度的结果是进程被执行。
|
||||
+ 作业调度频率小,进程调度频率高。
|
||||
+ 在某些系统中,可以没有作业调度,但进程调度必须有。
|
||||
|
||||
## 2、调度的基本原则
|
||||
|
||||
1. CPU 利用率(越高越好)
|
||||
|
||||
2. 系统吞吐量
|
||||
|
||||
系统吞吐量表示单位时间内cpu完成作业的数量。长作业占用 CPU 时间长会导致系统吞吐量下降。
|
||||
|
||||
3. 响应时间
|
||||
|
||||
从用户角度看,调度策略要保证尽量短的响应时间,使响应时间在用户的接受范围内。
|
||||
|
||||
4. 周转时间
|
||||
|
||||
1. 周转时间
|
||||
|
||||
周转时间是指作业从提交到完成的时间间隔
|
||||
|
||||
作业周转时间=作业完成时间-作业提交时间
|
||||
|
||||
2. 平均周转时间
|
||||
|
||||
是指n个作业周转时间的平均值。$T=(T_1+T_2+\cdots+T_n)/n$
|
||||
|
||||
3. 带权周转时间
|
||||
|
||||
作业周转时间与运行时间的比。$W_i=T_i/$作业 i 的运行时间
|
||||
|
||||
4. 平均带权周转时间
|
||||
|
||||
n 个作业的带权周转时间的平均值
|
||||
|
||||
## 3、进程调度
|
||||
|
||||
### 3.1、进程调度的功能
|
||||
|
||||
+ 记录系统中所有进程的有关情况及状态特征。
|
||||
+ 选择获得处理器的进程。
|
||||
+ 处理器分配。
|
||||
|
||||
### 3.2、引起进程调度的原因
|
||||
|
||||
+ 当前运行进程运行结束。因任务完成而正常结束,或者因为出现错误而异常结束。
|
||||
+ 当前运行进程因某种原因,比如 io 请求、P 操作,阻塞原语等,从运行状态进入阻塞状态。
|
||||
+ 执行完系统调用的系统程序后,返回用户进程,这时可看做系统进程执行完毕,从而可以调度一个新的用户进程。
|
||||
+ 在采用抢占调度方式的系统中,一个具有更高优先级的进程要求使用处理器,则使当前运行进程进入就绪队列。(与调度方式有关)
|
||||
+ 在分时系统中分配给该进程的时间片已用完。(与操作系统类型有关)
|
||||
|
||||
## 3.3、不能进行进程调度的情况
|
||||
|
||||
+ 处理中断的过程。
|
||||
+ 在操作系统内核程序临界区中。
|
||||
+ 其他需要完全屏蔽中断的原子操作过程。
|
||||
|
||||
### 3.4、进程调度的方式
|
||||
|
||||
+ **抢占方式**(可剥夺方式):当一个进程正在处理器上执行时,若有某个优先级更高的进程进入就绪队列,则立即暂停正在执行的进程,将处理器分配给新进程
|
||||
+ **非抢占方式**(不可剥夺方式):当某一个进程正在处理器上执行时,即使有某个优先级更高的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程完成或因发生某种事件而进入完成或阻塞状态时,才将处理器分配给新进程。
|
||||
|
||||
## 4、常见调度算法
|
||||
|
||||
### 4.1、先来先服务调度算法(作业调度、进程调度)
|
||||
|
||||
按照进程进入就绪队列的先后次序来分配处理器。有利于长进程,不利于短进程。非抢占式。
|
||||
|
||||
### 4.2、短作业优先调度算法(作业调度、进程调度)
|
||||
|
||||
把处理器分配给最快完成的作业(进程)。对长进程不利,会产生**饥饿现象**。
|
||||
|
||||
饥饿现象是指在一段时间内,进程得不到调度执行,或得不到所需资源。
|
||||
|
||||
### 4.3、优先级调度算法(作业调度、进程调度)
|
||||
|
||||
把处理器分配给优先级最高的进程。
|
||||
|
||||
进程的优先级用于表示进程的重要性及运行的优先性。进程优先级通常分为两种:
|
||||
|
||||
+ **静态优先级**:
|
||||
|
||||
在创建进程时确定的,确定之后,在整个进程运行期间不再改变。确定静态优先级的依据有:
|
||||
|
||||
+ **按进程类确定**:通常系统中有两类进程,系统进程和用户进程。系统中各进程的运行速度以及自系统资源的利用率,在很大程度上依赖于系统进程。所以系统进程的优先级应高于用户进程。
|
||||
+ **按作业资源要求确定**:进程所申请的资源越多,估计的运行时间越长,进程的优先级越低。
|
||||
+ **按用户类型和要求确定**。
|
||||
|
||||
+ **动态优先级**:
|
||||
|
||||
在创建进程时,根据进程的特点以及相关情况确定一个优先级,在进程运行过程中,再根据情况的变化调整优先级。确定动态优先级的依据有以下几种:
|
||||
|
||||
+ **根据进程占用cpu时间的长短来决定**。一个进程占用cpu时间越长,则优先级越低,再次获得调度的可能性越小。一个进程占用cpu时间越短,则优先级越高,再次获得调度的可能性越大。
|
||||
+ 根据就绪进程等待cpu时间的长短来决定。一个就绪进程在就绪队列中等待的时间越长,则优先级越高,获得调度的可能性越大。反之一个就绪进程在就绪队列中等待的时间越短,则优先级越低,获得调度的可能性越小。
|
||||
|
||||
基于优先级的调度算法还可以按调度方式的不同分为**非抢占优先级调度算法和抢占优先级调度算法**,参考前面[进程调度的方式](#_3-4、进程调度的方式)。
|
||||
|
||||
在优先级相同的情况下,通常按照先来先服务或短作业优先的顺序执行。
|
||||
|
||||
### 4.4、时间片轮转调度算法 (进程调度)
|
||||
|
||||
在分时系统中,进程调度通常采用时间片轮转调度方法。系统将所有就绪进程按到达时间的先后次序排成一个队列。进程调度程序总是选择队列中第一个进程执行,并规定执行一段时间,称为时间片。当该进程用完这一时间片时,即使进程并未执行结束,系统都将其送至就绪队列队尾。再把处理器分配给下一个就绪进程执行。这样,处于就绪队列中的进程可以依次轮流获得一个时间片的处理时间,然后重新回到队列尾部等待执行,如此不断循环,直至完成。
|
||||
|
||||
影响时间片大小的因素:
|
||||
|
||||
+ 系统的响应时间: $T=Nq$,其中 T 为系统响应时间,q为时间片大小,N 为就绪队列中的进程数。
|
||||
+ 就绪队列中的进程数。
|
||||
+ 系统处理能力。
|
||||
|
||||
### 4.5、高响应比优先调度算法(作业调度)
|
||||
|
||||
每次进行作业调度时,先计算就绪队列中每个作业的响应比,选择响应比最高的作业执行。响应比计算公式为:
|
||||
|
||||
响应比=作业响应时间/估计运行时间=(作业等待时间+估计运行时间)/估计运行时间
|
||||
|
||||
高响应比优先调度算法考虑了作业的等待时间和作业运行时间两个因素,综合了先来先服务和短作业优先两种调度算法的特点。但由于要计算每个后备作业的响应比,因此增加了系统开销。
|
||||
|
||||
### 4.6、多级队列调度算法(进程调度)
|
||||
|
||||
根据进程的性质或类型,将就绪队列划分为若干个独立的队列,每个进程固定地分属一个队列,每个队列采用一种调度算,不同的队列可以采用不同的调度算法。
|
||||
|
||||
### 4.7、多级反馈队列调度算法(进程调度)
|
||||
|
||||
<img src="https://picbed.kimyang.cn/202108120223602.png" alt="下载" style="zoom:200%;" />
|
||||
|
||||
首先,应设置多个就绪队列,并为每个队列赋予不同的优先级,第一个队列的优先级最高地。其余队列的优先级逐次降低。
|
||||
|
||||
其次,每个队列中的进程,执行时间,片的大小也各不相同。进程所在队列的优先级越高,其相应的时间片越短。
|
||||
|
||||
再次,当一个新进程进入系统时,应先将其放入第一个队列末尾按**先来先服务原则**,等待调度。当轮到该进程执行时,如能在此时间片完成,便可撤销进程。如果在一个时间片结束,尚未完成调度程序,便将该进程转入第二个队列的末尾。再同样按照先来先服务原则,等待调度执行。如此下去,最后一个队列中使用**时间片轮转调度算法**。
|
||||
|
||||
多级反馈队列调度算法是时间片轮转调度算法和优先级调度算法的综合与发展。通过动态调节进程优先级和时间片的大小,多级反馈队列调度算法可兼顾多方面的系统目标。如:
|
||||
|
||||
+ 为提高系统吞吐量和缩短平均周转时间而照顾短进程。
|
||||
+ 为获得较好的IO设备利用率和缩短响应时间而照顾IO型进程。
|
||||
+ 不必事先估计进程的执行时间。
|
||||
|
||||
@@ -2,5 +2,7 @@
|
||||
title: 同步与互斥
|
||||
---
|
||||
|
||||
一片荒芜,期待你贡献出你的笔记~ 🥰
|
||||
|
||||
## 1、进程同步的基本概念
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user