当前位置: 技术问答>linux和unix
物理内存足够小,且都被内核使用,当用户态程序需要换入的时候,怎么办?
来源: 互联网 发布时间:2017-04-30
本文导语: 物理内存足够小,且都被内核态使用,当用户态需要换入的时候,怎么办? 这时在调用do_pages_fault的时候会发生什么? | 当没有物理内存的时候,必须要杀死,不能让其睡眠。 原因很简单,如果我写了...
物理内存足够小,且都被内核态使用,当用户态需要换入的时候,怎么办?
这时在调用do_pages_fault的时候会发生什么?
这时在调用do_pages_fault的时候会发生什么?
|
当没有物理内存的时候,必须要杀死,不能让其睡眠。
原因很简单,如果我写了个程序,把所有内存都耗尽了,当其他任务需要内存的时候,让我们都睡眠,显然是不公平的。
这种情况下使得对服务器的攻击易如反掌,拼命申请内存就能使其他用户的其他任务无法工作。
所以,无内存必杀,没有悬念的。
但是怎么杀,就是一个问题了,理论上来说,应该按照用户权限和内存消耗量综合考虑。
如果要杀普通用户的进程,理论上内核是不需要重启的。(我不确定内核是否有相关配置参数,关于杀进程策略)
原因很简单,如果我写了个程序,把所有内存都耗尽了,当其他任务需要内存的时候,让我们都睡眠,显然是不公平的。
这种情况下使得对服务器的攻击易如反掌,拼命申请内存就能使其他用户的其他任务无法工作。
所以,无内存必杀,没有悬念的。
但是怎么杀,就是一个问题了,理论上来说,应该按照用户权限和内存消耗量综合考虑。
如果要杀普通用户的进程,理论上内核是不需要重启的。(我不确定内核是否有相关配置参数,关于杀进程策略)
|
如果这样的系统真的启动起来,并运行了用户进程,并且需要换入了,就会杀掉用户进程,如果没有用户进程,那么就没有需要换入的了。
|
如果内核真的用完了内存,这个时候内核还在运行,那么用户层将无内存可用。因为内核的页是不会交换出去的。那么内存缺页后拿不到页面。
|
可以说内核态的权限高于用户态的!
不足的时候,先满足内核态,再考虑用户态的!所以如果只有够内核态的话,就不会考虑用户态
不足的时候,先满足内核态,再考虑用户态的!所以如果只有够内核态的话,就不会考虑用户态