一个进程需要同时做多件事,从而引入了线程
引入了线程之后,线程成为了程序执行流的最小单位,线程是基本的CPU执行单元
引入线程后进程是资源分配的基本单位,而线程是调度的基本单位
线程的属性
每个线程都有一个线程ID,线程控制块(TCB),线程几乎不拥有系统资源,所有的系统资源都在进程那里
调度
- 确定某种规则来决定处理多个任务的顺序
高级调度(也称作业调度)
- 外存与内存之间的调度,因为内存空间有限,不能马上执行的作业存放在外存上的后备队列中
引入虚拟的存储技术后,可将暂时不能运行的进程调度到外存等待(挂起)【在这个过程中PCB并不一起被调到外存,而是一直留在内存中,并且记录所有有关进程的信息,如进程在外存中所处位置信息等】,等它重新具备运行处理机且内存有空间,重新调入内存
中级调度(也称内存调度)
- 决定将哪个处于挂起的进程重新调入内存
低级调度(也称进程调度)
- 按照某种方法和策略从就绪队列中还原一个进程,将处理机分配给它。
进程调度的时机
进程调度
- 按照某种算法从就绪队列中选择一个进程为其分配处理机
需要进行进程调度与切换的情况
- 当前运行的进程主要放弃处理机(中断/异常/主动阻塞)
- 当前运行的进程被动放弃处理机(时间片到/IO中断/优先级)
不能进行进程调度与切换的情况
- 在处理中断的过程中,因为中断处理很复杂
- 进程在操作系统内核临界区中
- 在原子操作的进程中
临界资源
- 一个时间段内只允许一个进程使用的资源,各进程需要互斥地访问临界资源
临界区
- 访问临界资源的那串代码
内核程序临界区一般是用来访问某种内核数据结构的。 例如:就绪队列
进程调度的方式
- 非剥夺调度方式(也称非抢占式方式):进程主动放弃处理机
- 剥夺调度方式(也称抢占式方式):进程被动放弃处理机,适用于分时操作系统和实时操作系统
进程的切换与过程
- 狭义的进程调度是指从就绪队列中选中一个要运行的进程
- 进程切换指一个进程让出处理机,另一个进程占用处理机的过程
- 广义的进程调度是:包含进程调度和进程切换
进程切换过程要完成
- 对原来运行进程各种数据进行保存
- 对新进程各种数据的恢复
- 但是进程切换所需时间与空间的代价
CPU利用率
指CPU"忙碌"时间与总时间的比例
系统吞吐量
- 单位时间内完成作业的数量=总完成作业数量/总花费时间
周转时间
- 从作业被提交给系统开始到作业完成为止这段时间间隔
平均周转时间
- 各作业周转时间之和/作业数
作业时间长短不尽相同,因此在相同周转时间内给用户的体验感是不同的
带权周转时间
- 作业周转时间/作业实际运行时间
- 结果>=1
平均带权周转时间
- 各作业带权周转时间/作业数
等待时间
- 各作业/进程处于等待处理机状态时间之和
- 对于进程,等待时间是指进程被建立以后等待被服务的时间之和,在等待IO完成期间进程其实是被服务的
- 对于作业,不考虑进程等待时间,还要加上一个作业在外存后备队列中等待的时间
响应时间
- 从用户提交请求到首次连接产生响应所用时间
调度算法
Tips对于各种调度算法的学习思路
- 算法的思想
- 算法的规则
- 用于进程调度还是作业调度
- 进程调度方式
- 算法的优缺点
- 是否会产生饥饿
先来先服务(FCFS,first come first serve)
-
从公平的角度去考虑,等待时间最少的优先
-
按照作业/进程到达的先后顺序进行服务
-
- 进程调度:考虑到达就绪队列的先后顺序
- 作业调度:考虑到达后备队列的先后顺序
-
非抢占式
-
- 优点:公平,算法实现简单
- 缺点:对运行时间长的体验较好,对运行时间短的体验差,因为大多时间都在等待的过程中
-
不会导致饥饿
饥饿:就是指长期得不到服务
抢占式的最短剩余时间优先算法SRTN
每当有进程加入,就绪队列改变时就需要调度,如果新到达的进程剩余时间较之当前正在运行的进程剩余时间更短,则新进程抢占处理机,当前运行的进程回到就绪队列等待。另外当一个进程完成也需要进程调度
高响应比优先(HRRN,highest response ratio next)
-
综合考虑等待时间和服务时间
-
在每次进行进程调度时,先计算各个进程/作业的响应比,选择响应比最高的为其服务
- 响应比=(等待时间+要求服务的时间)/ 要求服务的时间
- 结果是>=1
-
作业、进程都适用
-
非抢占式
以上的几个都是早期的多道批处理系统用的
时间片轮转法(RR,Round-Robin)
- 按照各进程到达就绪队列的顺序,轮流让各个进程运行一个时间片,若进程未在一个时间片内完成,则剥夺处理机,将进程重新放回就绪队列尾部重新排序,继续执行下一个进程
- 常用于分时操作系统,更注重“响应时间”
- 若时间片大,使得每个进程都在一个单独的时间片内就完成,就变成了FCFS并且会增大进程响应时间,所以不能太大
- 若时间片太小,又会导致进程切换过度频繁,在保存与恢复进程的运行环境会花费太大的时间与空间代价,所以也不宜太小
- 一般来说,时间片要让切换进程的开销占比 不超过1%
优先级调度算法
一般用于实时操作系统,根据进程需要执行的紧急程度不同,指定不同的优先级,调度时选择优先级最高的进程去执行
既有抢占式的也有非抢占式的
优先级又可以分为动态优先级与静态优先级
下列有几种常见的优先级比较
- 系统进程 > 用户进程
- 前台进程 > 后台进程
- 操作系统更偏好于IO型进程(或称IO繁忙型进程)
- 注:与IO型相对的是计算型进程(或 称CPU繁忙型进程)
IO设备可以与CPU并行工作,如果 设IO繁忙型进程的优先工作的话,则越有可能让IO设备更早进入工作状态,这样会资源的利用率和系统的都会得到提升
多级反馈队列调度算法
- 设置多级就绪队列,优先级从高到低,并且为每个就绪队列都确定时间片 ,时间片从小到大
- 新进程到达时先进入1级队列,按FCFS调度,若单个时间片内还未处理完就进入主下一级就绪队列队尾
- 只有k级队列为空时,才会为k+1级队列分配时间片用于进程调度
- 抢占式
,这样会资源的利用率和系统的都会得到提升==**
多级反馈队列调度算法
- 设置多级就绪队列,优先级从高到低,并且为每个就绪队列都确定时间片 ,时间片从小到大
- 新进程到达时先进入1级队列,按FCFS调度,若单个时间片内还未处理完就进入主下一级就绪队列队尾
- 只有k级队列为空时,才会为k+1级队列分配时间片用于进程调度
- 抢占式