抢占式和非抢占式内核与抢占式和非抢占式调度

5
我很难理解“抢占式内核”和“非抢占式内核”以及“抢占式调度”和“非抢占式调度”的区别。
《操作系统概念(第9版)》Silberschatz,Galvin和Gagne的解释如下:
- “抢占式内核”允许进程在运行内核模式时被移除并替换。 - “非抢占式内核”不允许在运行内核模式的进程被抢占;内核模式进程将一直运行,直到退出内核模式、阻塞或自愿放弃CPU控制权。 - 在“非抢占式调度”下,一旦CPU被分配给一个进程,该进程会一直持有CPU,直到它终止或切换到等待状态。 - 对我来说,这似乎是非抢占式内核的确切描述。
“抢占式调度”发生在以下两种情况下:
1. 当进程从运行状态切换到就绪状态时(例如,当中断发生时)。 2. 当进程从等待状态切换到就绪状态时(例如,在I/O完成时)。
该书简单地指出在这种情况下存在选择,但我不确定选择是什么。选择是同一就绪队列中的进程是否可以继续运行,还是应选择就绪队列中的不同进程来运行?
总之,我正在寻求这4个术语的明确解释。
谢谢!

基本上,我正在寻找对这4个术语的明确解释。在Stack Overflow上有许多关于这些术语的问题。它们到底不清楚在哪里?非抢占调度非抢占内核之间的区别在于,非抢占内核允许在进程处于用户模式时抢占该进程,但非抢占调度不允许这样做。 - Tsyvarev
1
找一本更好的书吧。你上面引用的“抢占式调度”内容是一堆误导性的流行语拼凑而成的。 - Martin James
@马丁詹姆斯:哎呀,这不是流行词。它们是关键字,并且实际上有着特定含义。不过你对于其他部分的描述完全正确。 - too honest for this site
@Olaf 如果没有线程状态列表及其含义(即操作系统),那它们就比关键字更加热门:) - Martin James
@MartinJames:谁需要清晰的定义/规范呢?我们有人工智能,让它们来处理思考,我们在Facebook上,通过Twitter和Tinder燃烧理性。 - too honest for this site
1个回答

7
你面临的问题是这些术语没有标准意义。我怀疑你的书是从某个特定操作系统的角度使用它们的(哪一个?——Je ne sais quois)。如果你在互联网上搜索,你肯定会找到不同的解释。
例如,Preemptive scheduling 可以意味着:
1. 调度将中断不放弃 CPU 的运行进程。 2. 调度将在进程时间片到期之前中断正在运行的进程。 3. 你的书显然有另一种定义。我无法从摘录中确定含义。书上可能只是在这一点上混淆了(因为它在很多方面显然都是混淆的)。其中一个问题是进程状态是系统相关的。使用进程状态来定义术语非常令人困惑。
它定义的这部分是有道理的:
在非抢占式调度下,一旦 CPU 分配给进程,该进程将保持 CPU 直到释放 CPU,即通过终止或切换到等待状态。
抢占式定义部分没有意义。
在术语 "preemptive kernel" 的情况下,这是相当标准的,你所给出的描述有些正常。话虽如此,书上的陈述应该更加精细一些,因为每个进程都必须在内核模式下被移除。通常,人们会说类似于“在非抢占式内核中,当进程通过异常进入内核模式时,不能将其删除。”
抢占式内核对于实时处理是必不可少的。
所以你问:
这对我来说似乎是完全相同的非抢占式内核描述。
你有四个理论组合:
1. 抢占式调度 抢占式内核
操作系统几乎可以在任何时候强制切换进程。
2. 非抢占式调度 抢占式内核
此组合不存在。
3. 非抢占式调度 非抢占式内核
进程必须显式地放弃才能允许操作系统切换到另一个进程。
4. 抢占式调度 非抢占式内核
操作系统可以强制切换进程,但当进程在内核模式下执行以处理异常时(在处理中断时也可能存在无法切换进程的情况)除外。

1
谢谢!你所说的四种理论组合是有道理的。对于第二种组合——非抢占调度的抢占内核,这种组合不存在,因为要拥有一个抢占内核,你需要有一个抢占调度,否则就没有意义了。 - Physco111

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接