假设调度程序在单核 CPU 系统上为某个进程分配了 CPU,并且该进程有 10 个线程。谁来决定这 10 个线程中的哪一个获得 CPU?
换句话说,操作系统中是否存在两个独立的调度程序?一个用于进程,一个用于线程?
答案1
在 Windows 中,调度程序负责调度线程。也就是说,所有关于“接下来应该运行什么”的决定实际上都是“接下来应该运行哪个线程”,并且是根据线程的属性(其优先级、其亲和性设置、(有时)距离上次运行的时间等)做出的。而不是进程的属性。
是的,任务管理器允许您更改进程的优先级或亲和性。但这些更改只会传播到(即由其所有线程继承)。并且线程的优先级、亲和性等可以从其从进程继承的内容中更改。
由于线程是进程的一部分,并且正在运行的线程必须映射其进程,因此独立调度进程是没有意义的。
当调度程序选择一个新线程执行时,如果新线程所在的进程与之前在“切换”的处理器上运行的进程不同,则进程上下文切换将作为线程上下文切换的一部分进行。这就是进程被“调度”的程度。
顺便说一下,改变进程上下文只涉及将新进程的顶级页表的物理页码加载到 CR3 寄存器中。