目录
1.先来先服务(FCFS调度算法): 保护长作业。FCFS为非抢占式调度算法。
3.优先级调度算法(SRTF调度算法):类型有抢占式和非抢占式 / 剥夺式和非剥夺式。
4.高响应比优先调度算法(HRRF调度算法):对长作业和短作业发挥出自己动态调整的优势。
5.时间片轮转(RR调度算法):就是分时的思想,给每一个作业给予规定的时间,绝对的公平公正。
6.多级反馈队列调度算法(MFQ调度算法):一级一级反馈下来,融合了前面的一些算法,将整个算法分成了好几个层级。
一.处理机调度
1.1 处理机调度的概念
概念 : 是对处理机进行分配,即从就绪队列中按照一定算法(公平,高效)选择一个进程并将处理机 / CPU分配给它运行,以实现进程并发的执行。
1.2 处理机调度的分类
- 高级调度(指的是作业调度)
- 中级调度(指的是内存对换)
- 低级调度(指的是进程调度)
1.3 处理机调度的方式
- 调度方式 : 剥夺式和非剥夺式 / 抢占式和非抢占式
1.4 处理机调度的调度准则
- CPU利用率:越高越好
- 系统吞吐量:越高越好
- 周转时间 = 等待时间 + 运行时间
- 等待时间:越短越好
- 响应时间:越短越好
二.进程调度算法
- 先来先服务(FCFS调度算法)
- 短作业优先(SJF调度算法)
- 优先级调度算法(SRTF调度算法)
- 高响应比优先调度算法(HRRF调度算法)
- 时间片轮转(RR调度算法)
- 多级反馈队列调度算法(MFQ调度算法)
1.先来先服务(FCFS调度算法): 保护长作业。FCFS为非抢占式调度算法。
2.最短作业优先(SJF调度算法):保护短作业。
3.优先级调度算法(SRTF调度算法):类型有抢占式和非抢占式 / 剥夺式和非剥夺式。
- 优先级调度算法的关键是如何确定进程的优先级,进程的优先级可以分为:
- 静态优先级:一旦确定不能改变
- 动态优先级:可以实时改变
4.最高响应比优先调度算法(HRRF调度算法):对长作业和短作业发挥出自己动态调整的优势。
5.时间片轮转 / 分时(RR调度算法):就是分时的思想,给每一个作业给予规定的时间,绝对的公平公正。
6.多级反馈队列调度算法(MFQ调度算法):融合了前面的一些算法,将整个算法分成了好几个层级,一级一级反馈下来的。
- 先来先服务调度算法(FCFS调度算法):保护长作业。FCFS为非抢占式调度算法。 先来先服务调度算法按照进程到达的先后顺序进行调度,先到的进程就先被调度,然后进程会一直运行,直到线程退出或被阻塞,才会选择下一个进程接着运行。当一个长作业先运行了,那么后面的短作业等待时间就会很长。
- 最短作业优先调度算法(SJF调度算法) :保护短作业。 短作业优先调度算法每次调度时选择当前已到达的且运行时间最短的进程,如果一直由短作业到来,那么长作业永远得不到调度,对长作业不友好。
- 最高优先级调度算法(SRTF调度算法): 最高优先级调度算法,为每个进程分配一个优先级,从就绪队列中选择最高优先级的进程进行运行,为了防止低优先级的进程永远得不到调度,可以随着时间的推移增加等待进程的优先级。
优先级调度算法的关键是如何确定进程的优先级,进程的优先级可以分为:
- 静态优先级:一旦确定不能改变
- 动态优先级:可以实时改变
最高优先级调度算法有两种类型:抢占式和非抢占式 / 剥夺式和非剥夺式。
非抢占式 / 非剥夺式:当优先级没有剥夺式时当就绪队列中出现优先级高的进程,就先运行完当前进程,再选择优先级高的进程。
抢占式 / 剥夺式:当优先级有剥夺式时, 当就绪队列中出现优先级高的进程,当前进程挂起,调度优先级高的进程运行。
- 最高响应比优先调度算法(HRRF调度算法):对长作业和短作业发挥出自己动态调整的优势。 高响应比优先调度算法每次进行进程调度时,先计算响应比优先级,为响应比最高的进程分配CPU。响应比 = (等待时间 + 要求服务时间) / 要求服务时间 或 响应比 = (等待时间 + 运行时间) / 运行时间 = 1 + (等待时间 / 运行时间)响应比跟等待时间成正比,跟运行时间成反比,响应比越大,优先级越高!
- 时间片轮转 / 分时调度算法(RR调度算法):就是分时的思想,给每一个作业给予规定的时间,绝对的公平公正。 时间片轮转调度算法为每个进程分配一个时间片,每个进程运行的时间片都是一样的,绝对的公平公正,你用10min,我用10min,允许进程在该时间片内运行,如果时间片用完,进程还在运行,那么将会把此进程从CPU释放出来,并把CPU分配给另外一个进程。对用户来看是进程,但对CPU处理机 / 操作系统的层面来看它是一个作业又一个作业,每一个作业 / 进程都是对应的执行时间的。
- 多级反馈队列调度算法(MFQ调度算法): 多级反馈队列调度算法有多个队列,每个队列优先级从高到低,同时优先级越高,时间片越短,如果有新的进程加入优先级高的队列时,立刻停止当前正在运行的进程,转而去运行优先级高的队列。说白了就是融合了前面的一些算法,将整个算法分成了好几个层级,一级一级反馈下来的。 比如第一个层级时间片轮转,第二个层级先来先服务,第三个层级高响应比优先,就这样一级一级反馈下来。