一、首先,什么是调度?
- 我们的计算机中,进程数量往往多于处理机的个数,不能把某个处理机专门给一个进程独享
- 处理机调度是对处理机进行分配,也就是从就绪队列中按照一定的算法,公平、高效地给每个进程合理分配,让计算机处理速度最大化。
二、调度的层次
- 作业调度(高级调度):是面向作业的,发生频率最低,让进程从无->创建态->就绪态
- 内存调度(中级调度):是面向进程的,让进程从挂起态->就绪态
- 进程调度(低级调度):发生频率最高,让进程从就绪态->运行态
- 注:作业是一个具体的任务
三、经典的调度算法
(1)先来先服务算法(First Come First Serve)
- FCFS算法只要关注,谁先来,就先给谁服务,会从就绪队列中选择最先进入队列的进程,直到结束或者是中断。
- FCFS算法属于不可剥夺的算法,但是,如果出现一个长作业,就要在处理机上运行很久很久,对后面晚来的短作业很不公平。
- e.g.比如,在买奶茶的时候,你只点了一杯,按理来说应该很快拿到并喝上,但是万万没想到前面有一个人公司团建买了100杯!!
- FCFS算法效率低,对长作业有利,对短作业的相应比太低了
- FCFS算法有利于CPU繁忙型作业,不利于IO繁忙型作业
-
(2)短作业优先算法(Short Job First)
- 顾名思义,这个算法就是让短作业优先,从就绪队列中选一个运行时间可能是最短的。
- e.g.上厕所的时候,小便优先,肚子痛的人只能慢慢排队,直到所有小号的人结束任务,设想一下,有没有可能一直有很多来上小号的人,导致大号的人一直等一直等,实在等不动了...这就是饥饿现象(不是上厕所时的饥饿hhhhh)
-
(3)优先级调度算法
- 从就绪队列中选择一个优先级最高的若干个作业
- 可能使得一些优先级不高的作业,产生饥饿现象
- 非剥夺式优先级调度算法:只有进程自己想放弃,才会让出处理机,否则一直霸占着处理机,俗称老顽童式算法
- 剥夺式优先级调度算法:是抢占式算法,如果来了一个更重要的进程(优先级更高),就会杯抢走处理机,俗称恶霸式算法
- 系统进程优先级>用户进程;交互性进程>非交互性进程;IO型>计算型
剩下高响应比、时间片轮转、多级反馈队列等,下次再说