在Linux中,当一个进程即将被交换或终止时,它的线程应处于什么状态?

时间:2013-08-15 08:12:49

标签: linux multithreading process linux-kernel

通过交换和终止,我的意思是,如果进程即将被交换到交换空间或终止(被OOM杀手)以释放内存。

Linux内核遵循什么算法?

例如,进程A需要额外的内存,并且已选择进程B进行交换或终止(如果交换空间已占用,则为),但进程B仍然有阻塞线程。

a。)无论阻塞线程如何,进程B都会被交换或杀死吗?

b。)如果没有,这种情况是如何处理的?

如果我的例子不太可能,那么任何见解都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

是的 - 您需要按照@CL的建议阅读分页虚拟内存。进程不会完全换出并交换!=终止。

如果操作系统需要终止进程,无论是由于特定的API请求还是由于其OOM算法,操作系统都会首先停止其所有线程。被阻塞的线程很容易“停止”,因为它们无论如何都没有运行 - 只需要改变它们的状态以确保它们永远不会再运行。实际在核心上运行的线程必须通过核心间通信驱动程序停止,该驱动程序可以硬件中断运行线程的核心。一旦所有线程都没有运行,就可以释放分配给进程的资源,包括所有用户空间内存,并释放OS线程/进程管理结构。然后该过程不再存在。