在Linux 如何“杀死”一个进程?解释说 Linux 通过将其内存返回到池中来杀死进程。
在单核机器上,它实际上是如何做到这一点的?它必须需要 CPU 时间来终止一个进程,如果该进程正在执行一些极长时间运行的计算而没有让步,Linux 如何获得对处理器的控制足够长的时间以终止该进程?
Ste*_*itt 43
内核在正常操作中非常频繁地获得控制权:每当进程调用系统调用时,以及每当发生中断时。当硬件需要 CPU 的注意或 CPU 需要内核的注意时会发生中断,并且可以对一个特定的硬件进行编程以定期请求注意(计时器)。因此,内核可以确保,只要系统没有锁定到不再产生中断的程度,就会定期调用它。
其结果,
如果该进程正在执行一些极长时间运行的计算而没有屈服
不是问题:Linux 是一种抢占式多任务操作系统,即它可以在不需要运行程序的合作下进行多任务处理。
当涉及到杀死进程时,无论如何都涉及内核。如果一个进程想要杀死另一个进程,它必须调用内核来这样做,因此内核处于控制之中。如果内核决定杀死一个进程(例如OOM 杀手,或者因为该进程试图做一些它不允许做的事情,例如访问未映射的内存),它也处于控制之中。
请注意,内核可以配置为不控制系统 CPU 本身的子集(使用已弃用的isolcpus内核参数),或者不在某些 CPU 本身上调度任务(使用没有负载平衡的cpuset,它们完全集成在cgroup v1和cgroup 中) v2 ); 但系统中至少有一个 CPU 必须始终由内核完全管理。它还可以配置为减少生成的定时器中断的数量,具体取决于给定 CPU 的用途。
单 CPU(单核等)系统和多 CPU 系统之间也没有太大区别,就内核控制而言,同样的问题适用于两者:每个 CPU 需要定期调用内核,如果它是用于内核控制下的多任务处理。
phu*_*clv 11
Linux 和大多数现代操作系统使用抢占式多任务处理,这意味着内核可以完全控制允许每个进程运行的时间,并且如果进程运行时间过长,它将抢占一个进程,这与协作多任务处理不同,协作多任务处理可以让进程随时传递控制权
基本上,在抢占式多任务处理中,内核将定期从计时器中触发,并且每当内核处于控制状态时(发生计时器中断或调用系统调用时),内核将保存当前进程的上下文,然后切换到下一个进程' 上下文(如有必要)。这称为上下文切换,其中包括所有线程信息、寄存器值...在内的整个进程状态都被保存和恢复,以使进程从它被抢占的确切点继续运行,甚至不知道它没有连续运行。因此会出现很多进程在单个 CPU 内核中同时运行,即使实际上任何时候都只有 1 个进程正在运行。内核也只是一个特殊的进程,完成所有进程和资源处理。它不是从单独的核心运行,只是为了监视其他进程
另请参阅“linux kernel is preemptive”是什么意思?
| 归档时间: |
|
| 查看次数: |
3900 次 |
| 最近记录: |