1、三级调度:
- 高级调度(作业调度):根据调度算法从后备队列中合适的作业装入内存(外存-->内存),为其分配资源、建立进程。发生的频率最低。
- 中级调度(内存调度):在调度过程中,操作系统会将暂时不用的进程调至外存等待,直到内存空闲在调回。中级调度就是解决选择哪个进程调回内存的问题。(外存-->内存)
- 低级调度(进程调度):从就绪队列中选择一个进程为其分配CPU使之运行(内存-->CPU)。发生频率最高。
2、进程调度算法:
进程调度算法就是解决选择哪一个进程为其分配处理机的问题。
- 先来先服务:选择就绪队列中存在时间最长的进程分配处理机
- 时间片轮转:适合分时系统。选择就绪队列中的一个进程使之运行一个时间片,如果没有这个进程没有结束,就进入就绪队列队尾
- 短作业优先:选择运行时间最短的进程
- 优先级调度:
- 高响应比优先:响应比=1+(等待时间/运行时间)
多级反馈队列:设置多个就绪队列,优先级递减,时间片大小按指数递增。当有一个新的进程进入内存后,将其放到第一级队列的末尾,按照先来先服务的算法等待调度。如果在时间片内该进程运行完成,就离开。如果没有完成,就进入下一级队列的末尾。在下一级队列中,如果在时间片内能够完成.........依次进入下一级队列,直到到达最后一级队列,按时间片轮转的方式运行。当且仅当第一级队列为空时,进程调度才调度下一级队列。
3、页面置换算法:
为什么要有页面置换算法?
在地址映射过程中,如果要访问的页面不在内存,会产生缺页中断,此时需要将该页面调入内存。如果此时内存中已经没有空闲页面了,则操作系统会选择一个页面将其移出内存,以便调入需要的页面。这个选择的过程,就是页面置换算法,即选择哪一页淘汰。
- 最佳置换算法(OPT):选择以后不再使用或最长时间内不再访问的页面调出内存。这是一种理想置换算法,但是很难实现。
- 先进先出置换算法(FIFO):淘汰驻留主存时间最长(先进入主存)的页面。可能发生BeLady异常。
- 最近最久未使用置换算法(LRU):淘汰最近最长时间未访问过的页面。利用局部性原理,认为过去一段时间里未访问过的页面在将来也不会被访问。
- 时钟置换算法(CLOCK):给每一帧关联一个使用位,当某页首次装入内存时,使用位置为1。当该页随后被访问时,使用位也置为1。当某一页被替换时,该指针被设置成指向缓冲区中的下一帧。当需要替换一页时,操作系统扫描缓冲区,查找使用位被置为0的一帧。每当遇到一个使用位为1的帧时,操作系统就将该位重新置为0;如果在这个过程开始时,缓冲区中所有帧的使用位均为0,则选择遇到的第一个帧替换;如果所有帧的使用位均为1,则指针在缓冲区中完整地循环一周,把所有使用位都置为0,并且停留在最初的位置上,替换该帧中的页。
4、磁盘调度算法:
- 先来先服务(FCFS):
- 最短寻道时间优先(SSTF):依次选择距离当前磁头最近的进程
- 扫描算法(SCAN):固定磁头运行方向,当磁头到达该方向的最后一个磁道或该方向上最后一个请求所在的磁道时,开始向内扫描(假如开始时,磁头向外扫描)。
- 循环扫描(CSCAN):扫描方向一致,当磁头到达该方向的最后一个磁道或该方向上最后一个请求所在的磁道时,磁头回到最内层的磁道请求位置,继续开始向外扫描(假如开始时,磁头向外扫描)。
5、动态分区分配算法:
在进程装入或换入主存时,如果内存存在多个空闲块,操作系统就要确定分配哪个内存块给进程使用,即动态分区分配算法。
- 首次适应算法:空闲区以地址递增的顺序链接,分配时顺序查找,找到大小满足要求的第一个空闲分区分配给进程。
- 最佳适应算法:空闲区以容量大小递增链接,顺序查找到大小满足要求的第一个空闲分区分配给进程。
- 最坏适应算法:空闲区以容量大小递减链接,顺序查找到大小满足要求的第一个空闲分区分配给进程。
- 邻近适应算法:又称为循环首次适应算法,在首次适应算法的基础上,分配时从上次查找结束的位置开始继续查找,而不用回到开始位置。