系统相关
首页 > 系统相关> > linux-应用程序可以使用的最大内存空间等于(物理内存交换空间)吗?

linux-应用程序可以使用的最大内存空间等于(物理内存交换空间)吗?

作者:互联网

post开始,我知道交换空间与物理内存相关.因此,假设物理内存和交换空间均为4 GB.尽管从理论上讲,64位应用程序的内存空间接近2 ^ 64(当然,内核会占用一些空间),但是据我了解,该应用程序可以使用的实际内存仅为8 GB.

所以我的问题是:对于在Unix / Linux上运行的应用程序,它可以使用的最大内存空间等于(物理内存交换空间)吗?

解决方法:

这是一个复杂的问题.

首先,64位系统的理论虚拟内存空间为2 ^ 64.但是实际上,OS和CPU都不支持如此大的虚拟内存空间或物理RAM.

当前的x86-64 CPU(又名AMD64和Intel当前的64位芯片)实际上使用48位地址线(AMD64)和42位地址线(Intel),理论上允许256 TB的物理RAM.

Linux在x86-64上每个进程允许128TB虚拟内存空间,理论上可以支持64TB物理RAM.

对于您的问题,在理想情况下,Linux进程可以使用的最大虚拟内存空间仅仅是上述虚拟内存空间的Linux限制.即使您的系统用完了所有交换空间,仅留下了100MB的可用RAM,您的进程也可以利用整个内存空间.

但是您的系统可能对虚拟内存空间请求(malloc,调用brk / sbrk syscall)有一些限制.例如,Linux具有vm.overcommit_memory和vm.overcommit_ratio选项,以确定malloc是否将在进程中拒绝.参见http://www.win.tue.nl/~aeb/linux/lk/lk-9.html.

但是,虚拟内存空间不是真正的RAM交换.考虑到真正的RAM交换,您的看法是正确的:一个进程将永远不会使用比系统更多的真正RAM交换.但是在大多数情况下,您的系统中将存在很多进程,因此您的进程可以使用的RAM交换会减少.如果所有物理RAM交换都将用尽,则OOM杀手将选择某些进程来杀手.

标签:operating-system,memory,unix,linux
来源: https://codeday.me/bug/20191029/1959380.html