操作系统那些事儿之CPU和进程调度

一、多级反馈队列调度算法(Multilevel Feedback Queue Scheduling,简称 MLFQ)是一种用于进程调度的算法,主要目的是提高系统效率,合理分配 CPU 时间给不同的进程。

工作原理:

  1. 多个队列:系统中有多个“就绪队列”,每个队列的优先级不同,队列越高,优先级越高。每个队列可能使用不同的调度策略(比如时间片轮转、先来先服务等)。

  2. 时间片轮转:进程被分配到不同的队列时,会有一个时间片。如果进程在规定时间内没有完成,它会被移到优先级更低的队列,给其他进程更多机会。

  3. 动态调整:进程根据其行为动态地在队列之间迁移。例如:

    • 如果进程一直使用短时间片(快速运行),它会留在高优先级队列。
    • 如果进程运行时间很长,它可能会被移到低优先级队列,这样可以让其他进程更快执行。

简单总结:

多级反馈队列调度算法通过多个优先级队列和动态调整,确保既能快速响应短小的进程,也能合理处理较长的进程。
它的目标是公平地分配 CPU 时间,既避免低优先级进程长时间得不到执行,也避免高优先级进程占用过多时间。

这种调度算法在实际应用中非常常见,尤其是操作系统中。
在设计多级反馈队列调度算法(Multilevel Feedback Queue, MLFQ)时,以下因素都非常关键:

就绪队列的数量(I):不同数量的队列代表不同的优先级等级,是设计的基本参数。

就绪队列的优先级(II):各队列的优先级决定了进程调度的优先顺序。

各就绪队列的调度算法(III):比如高优先级队列使用时间片轮转,低优先级可能使用先来先服务等。

进程在就绪队列间的迁移条件(IV):如进程运行完一个时间片是否下移,是否因响应等待而上升等。

这些都是 MLFQ 调度策略必须要考虑的关键要素
二、分时系统中的时间片轮转调度需要通过以下几个部分来实现:

进程控制块(I):记录每个进程的状态、优先级、CPU 使用时间等信息,是进行调度时必不可少的数据结构。

时钟中断处理程序(II):在时间片到期时,时钟中断会触发,通知操作系统进行进程切换。这是时间片轮转调度中的关键机制。

进程就绪队列(III):用于存储所有准备好接受 CPU 时间的进程,时间片轮转调度在这里进行。调度器会从就绪队列中选择一个进程来运行。

进程阻塞队列(IV):虽然这个队列存储的是当前无法运行的进程(比如等待 I/O 的进程),但在时间片轮转调度中不会直接涉及到。

三、进程调度程序的执行通常由以下事件引起:

中断处理结束(I):当中断处理完成时,操作系统会决定是否进行进程调度,以处理其他中断或切换到其他进程。

进程阻塞(II):进程因等待某些资源(如I/O)而阻塞,操作系统可能会调度另一个进程来使用 CPU。

进程执行结束(III):进程执行完成后,操作系统会执行进程调度,决定是否需要清理资源或切换到其他进程。

进程的时间片用完(IV):在时间片轮转调度中,进程的时间片用完后,操作系统会进行调度,切换到下一个进程。

因此,所有这四个事件都有可能触发进程调度程序的执行
四、在支持分页式存储管理的系统中,进程切换时,操作系统需要进行以下操作:

更新程序计数器的值(I):程序计数器指向进程的下一条指令,进程切换时,需要保存当前程序计数器的值,并在恢复时重新加载。

更新栈基址寄存器的值(II):栈基址寄存器指向进程的栈区域,进程切换时,需要保存当前进程的栈基址,并加载新进程的栈基址。

更新页表基地址寄存器的值(III):在分页系统中,每个进程都有自己的页表,用于虚拟地址到物理地址的映射,进程切换时,需要更新页表基地址寄存器,指向新进程的页表。

因此,进程切换时,操作系统需要执行 I、II 和 III 三项操作
这是一个非常好的问题。我们来用简单直观的方式解释这三个值的作用,它们都是在进程切换时非常关键的系统控制信息。


✅ 1. 程序计数器的值(Program Counter,简称 PC)

  • 作用:指向当前正在执行的指令的地址。
  • 通俗理解:就像一本书读到哪一页,就在那一页夹上书签。程序计数器就是那个“书签”。
  • 为什么要保存/更新:切换到别的进程时,要保存当前进程的“书签”;等它再次运行时,就可以从上次的位置继续执行。

✅ 2. 栈基址寄存器的值(Stack Base Register)

  • 作用:指向当前进程的栈的起始位置。
  • 通俗理解:每个进程都有自己的“小抽屉”(栈)来临时放东西,比如函数调用参数、局部变量等。栈基址就像写在抽屉上的起始编号。
  • 为什么要保存/更新:每个进程的“抽屉”不一样,切换进程时要告诉系统新的抽屉从哪开始。

✅ 3. 页表基地址寄存器的值(Page Table Base Register,简称 PTBR)

  • 作用:指向当前进程的页表(页表是虚拟地址到物理地址的映射关系)。
  • 通俗理解:就像是每个进程有一张地图,告诉操作系统“我用的地址”实际在“物理内存的哪”。
  • 为什么要保存/更新:不同进程的内存映射不同,切换进程时需要切换到该进程自己的那张“地图”。

🔁 总结:

寄存器 用途 举例/比喻
程序计数器(PC) 记录“执行到哪了” 类似书签,记住读到哪一页了
栈基址寄存器 指定进程的“临时变量区域” 每个进程的“抽屉”的起点
页表基地址寄存器(PTBR) 管理虚拟地址到物理地址的映射 每个进程的“地址转换地图”

这三项都是进程切换时必须保存/加载的重要信息,缺一不可。

posted @ 2025-07-03 20:51  浅影镜心  阅读(79)  评论(0)    收藏  举报