一、区分:
- CPU调度 = 短期调度 = 狭义的进程调度
- 作业调度 = 长期调度
- 中期调度
- 广义的进程调度 = 长期调度 + 短期调度 + 中期调度(也就是概念中除了内存管理的全部调度过程)
- 内存管理
这里的狭义的进程调度和广义的进程调度,是这样理解。在教材中,是在进程调度的讲解中,说“长期调度,中期调度,短期调度都属于进程调度”,而其他资料中,是将cpu调度也就是短期调度叫做进程调度。所以就出现了两个进程调度的概念,又存在包含关系,就用狭义和广义进行区分。
二、进程调度
首先给出一个最简洁的区分这些概念的图(注意图中的箭头方向)
然后再给两个比较详细的图
进程调度分为:
长程调度,又称作业调度,用于决定把外存上处于后备队列中的哪些作业调入内存,并为它们创建进程、分配必要的资源,然后,再将新创建的进程排在就绪队列上,准备执行。
短程调度,又称进程调度和cpu调度,用来决定就绪队列中的哪个进程应获得cpu,然后再由分派程序把处理机分配给该进程的具体操作。常见的cpu调度算法有先到先服务调度(FCFS)、最短作业优先调度(SJF)、优先级调度(priority scheduling)、轮转法调度(RR)、多级队列调度、多级反馈队列调度、最短响应比优先算法(HRRN)。这些调度算法的执行可以参考这两个链接:CPU Scheduling CPU调度 - CSDN博客和
CPU调度算法总结
,这些调度算法,可以通过参考链接1的题目练习一下,会对调度的执行有个概观。
中程调度,从就绪挂起到就绪,从阻塞挂起到阻塞,引入中程调度的主要目的,是为了提高内存利用率和系统吞吐量。(这里就涉及一个何为就绪挂起,何为阻塞挂起的概念。简单的讲,“挂起”就是把已经在内存的进程从内存中调出到外存,因为进程的内存的状态分为就绪和阻塞,所以有就绪挂起和阻塞挂起。)
三、内存管理
说完进程调度,来说说内存管理,内存管理也是在内存和外存之间进行调度,但是它们调度的对象不同。进程调度的对象是进程/线程,而内存管理的对象是页(或者是段),内存管理是和进程调度协作进行的,当进程调度(中期和长期调度)决定哪些进程进入内存之后,这些进程实际分配到内存中的页数和位置(涉及到虚拟内存的概念)就是由内存管理来进行页面置换算法的执行。
参考链接: