Nex*_*ist 17 linux cpu process-management
我正在阅读 Linux 文档项目中的 Linux 进程:https : //www.tldp.org/LDP/tlk/kernel/processes.html
进程总是在进行系统调用,因此可能经常需要等待。即便如此,如果一个进程一直执行直到它等待,那么它仍然可能使用不成比例的 CPU 时间,因此 Linux 使用抢占式调度。在这个方案中,每个进程被允许运行一小段时间,200 毫秒,当这段时间结束时,另一个进程被选择运行,原始进程等待一段时间,直到它可以再次运行。这一小段时间称为时间片。
我的问题是,这个时间是如何被跟踪的?如果进程当前是唯一一个占用 CPU 的进程,那么实际上没有检查时间是否已过期,对吗?
我知道进程会跳转到系统调用,而那些会跳转回调度程序,因此在这方面如何“交换”进程是有道理的。但是 Linux 如何能够跟踪进程在 CPU 上占用了多少时间?只能通过硬件定时器实现吗?
小智 25
简短的回答是肯定的。所有实用的抢占方法都将使用某种 CPU 中断跳回特权模式,即 linux 内核调度程序。
如果你看看你的,/proc/interrupts
你会发现系统中使用的中断,包括定时器。
请注意,linux 有几种不同类型的调度程序,很少使用经典的周期性计时器样式 - 来自Completely Fair Scheduler (CFS) 文档:
CFS 使用纳秒级粒度计算,不依赖于任何 jiffies 或其他 HZ 细节。因此,CFS 调度程序没有前一个调度程序那样的“时间片”概念,也没有任何启发式方法。
此外,当程序发出系统调用(通常通过软件中断 - “陷阱”)时,内核也能够抢占调用程序,这在系统调用等待来自其他进程的数据时尤为明显。
归档时间: |
|
查看次数: |
1935 次 |
最近记录: |