进程切换
进程切换的代价:首先用户态且换到内核态,包括在进程表中的存储寄存器值以便以后重新装载,在许多系统中,内存映像也必须保存,接着运行调度算法选定一个新进程;之后将新进程内存映像重新装入mmu;新程序开始执行。
1. 调度介绍
当有两个或更多进程处于就绪状态时,如果只有一个cpu可用,就必须选择下一个运行的进程,完成选择工作的这一部分称为调度程序,使用的算法为调度算法。
1.1 何时调度
新建进程
需要决定运行的是父进程还是运行子进程。
进程退出
当一个进程退出时必须做出决策,一个进程不在运行,必须从就绪进程集合选择另外进程
进程阻塞
当一个进程阻塞在i/o和信号量时或由于其他原因导致的阻塞时,必须选择另一个程序运行。
i/o中断
在一个io中断发生时(中断指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程),就必须做出调度决策
1.2 调度算法分类
1.2.1 运行环境分类
-
批处理
一般为后台进程 例如:编译程序,数据库搜索引擎
-
交互式
需要和用户交互的程序,反应太慢影响体验,例如:shell
-
实时
有很强的调度需要的程序 例如:音频视频程序
区别:
-
批处理进程和交互式进程,实则都属于普通进程,内核无法直接区分这两者。
-
实时进程和普通进程,内核是可以直接区分的。
原因在于优先级,实时进程的优先级要比所有普通进程都高。
1.2.2 调度算法的目标
-
所有系统
公平——给每个进程公平的cpu份额
平衡——保持系统的所有部分都忙碌 -
批处理系统
吞吐量——每小时最大作业数
周转时间——从提交到终止间的最小时间
cpu利用率——保持cpu始终忙碌 -
交互式系统
响应时间——快速响应请求
均衡性——满足用户的期望 -
实时系统
满足截止时间——避免用户数据丢失
可预测性——在多媒体系统中避免品质降低
2 系统调度
2.1 批处理系统调度
先来先服务
最简单的非抢占式调度算法的设计就是 先来先服务(first-come,first-serverd)。当第一个任务从外部进入系统时,将会立即启动并允许运行任意长的时间。它不会因为运行时间太长而中断。当其他作业进入时,它们排到就绪队列尾部。当正在运行的进程阻塞,处于等待队列的第一个进程就开始运行。当一个阻塞的进程重新处于就绪态时,它会像一个新到达的任务,会排在队列的末尾,即排在所有进程最后。
最短作业优先服务
这是适用于运行时可以预知所需时间的另一个非抢占式的批处理调度算法
最短剩余时间优先
最短作业优先的抢占版本,这个算法,调度程序总是选择运行时间最短的进程进行运行。
2.2交互式系统
轮转调度
是一种最古老,简单,使用最广泛的算法
每个进程被分配一个时间段即时间片,(允许改进程运行的时间),如果时间片结束时该进程还在运行,将剥夺cpu并分配给另一个进程。
注意:时间片设的过短 会导致过多的进程切换,降低了cpu效率;设的太长会引起对于短的交互请求的响应时间,将时间片设为20ms——50ms比较合理
优先级调度
-
每个进程被赋予一个优先级,允许优先级最高的可运行进程先运行。
-
为了防止高优先级进程,无休止运行,调度程序可以再时钟中断降低其优先级或者每个进程被赋予一个允许运行的最大时间片,这个时间片用完,下一个优先级进程获取机会
多级队列
-
多级反馈队列调度算法是一种根据先来先服务原则给就绪队列排序,为就绪队列赋予不同的优先级数,不同的时间片,按照优先级抢占CPU的调度算法。
-
高优先级所分配的时间片时间较短,低优先级时间长
最短进程优先
- 根据进程过去的行为进行推测并执行估计运行时间最短
保证调度
- 一种完全不同的调度方法是对用户做出明确的性能保证。一种实际而且容易实现的保证是:若用户工作时有 n 个用户登录,则每个用户将获得 CPU 处理能力的 1/n。类似地,在一个有 n 个进程运行的单用户系统中,若所有的进程都等价,则每个进程将获得 1/n 的 CPU 时间。
彩票调度
- 其基本思想是向进程提供各种系统资源的彩排哦,一旦需要作出一项调度决策时就随机抽出一张彩票,拥有该彩票的进程获得该资源。
公平分享调度
- 为了考虑系统在调度处理之前考虑谁拥有进程的因素,,在这个模式中,每个用户分配到cpu时间的一部分。 如果有两个用户则分配到50%CPU时间,那么无论一个用户有多少进程,每个用户都会获得相应的cpu份额。
2.3 实时系统
- 实时系统(real-time) 是一个时间扮演了重要作用的系统。实时系统可以分为两类,硬实时(hard real time) 和 软实时(soft real time) 系统,前者意味着必须要满足绝对的截止时间;后者的含义是虽然不希望偶尔错失截止时间,但是可以容忍。