首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >国家进程

国家进程
EN

Stack Overflow用户
提问于 2022-07-13 06:50:14
回答 1查看 38关注 0票数 0

我了解到,当中断发生时,进程会进入就绪队列,而不是经过阻塞的队列。但是,在这张图片中,被中断的进程已经移动到阻塞的队列(这是一个粉红色的圆圈)。我搞不懂哪种情况属于就绪队列,哪种情况属于阻塞队列。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-14 03:27:05

一般来说,流程管理要比这复杂得多。一个任务通常被绑定到一个特定的处理器核心。多个任务被绑定到同一个处理器核心上,这些任务中的每一个都可能被阻止,等待IO。这意味着,任何任务都可以被设备控制器触发的中断在任何时候中断,即使当前运行在核心上的任务与该特定中断无关。

因此,图表是不完整的。它没有考虑到完整的过程生命周期。在您的关系图中,如果进程正在等待IO (在syscall (如read()之后,进程就会进入阻塞队列。如果它被内核抢占,那么它就会进入就绪队列,以便让另一个进程在该核心上有一些时间。

我认为人们经常误解,每一个过程都会一直运行到完成。不可能是这样,否则大多数进程都无法在任何核心上获得时间。相反,如果进程的数量高于内核的数量,内核使用每个核心本地APIC的定时器(本地APIC在x86-64上,但在每个体系结构上都有类似的机制)来给与该核心相关联的每个进程一个时间段。当某个进程被调度到某个内核时,内核用它的时间片启动定时器。当时间片过去时,本地APIC触发一个中断,让内核知道应该在该核心上调度另一个进程。这就是进程在执行过程中可以被抢占的原因。该进程仍被认为已准备好运行。只是它的时间片已经耗尽了,所以内核决定给另一个进程一些时间。先发制人的进程将在稍后得到更多的定时器。由于从人的角度来看,每个进程的时间片段非常短,它给人的印象是,每个进程在没有中断的情况下都持续运行,而实际上并非如此。(顺便说一下,这个关系图是非常特定于Linux内核的)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72961999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档