通过交换和终止,我的意思是,如果进程即将被交换到交换空间或终止(由OOM杀手)释放内存。
linux内核遵循什么算法?
例如,进程A需要额外的内存,进程B被选择交换或终止(如果交换空间已经被占用),但是进程B仍然有一个阻塞线程。
a.)进程B是否会被交换或终止,而不管阻塞线程是什么?
b.)若否,这类个案又如何处理?
如果我的例子是一个不太可能的情况,任何见解都将受到赞赏。
发布于 2013-08-15 09:24:15
是的--你需要按照@CL的建议,读一读寻呼的虚拟内存。进程不会全部交换掉并交换!=终止。
如果操作系统需要终止进程,无论是因为特定的API请求,还是由于其OOM算法,操作系统首先会停止其所有线程。阻塞的线程很容易“停止”,因为它们无论如何都不运行--只需更改它们的状态就可以确保它们不再运行。在内核上实际运行的线程/s必须通过内核间通信驱动程序停止,该驱动程序可以硬件中断运行线程的核心。一旦所有线程都没有运行,就可以释放分配给进程的资源,包括所有用户空间内存,并释放OS线程/进程管理结构。这个过程就不再存在了。
https://stackoverflow.com/questions/18248688
复制相似问题