linux内核和用户地址空间

时间:2014-01-16 22:47:49

标签: linux linux-kernel kernel

在运行linux的4GB RAM系统中,3gb给用户空间和1gb到内核,这是否意味着即使内核使用50MB且用户空间不足,用户也无法使用内核空间?如果不是,为什么?为什么linux不能将他们的页面映射到用户空间?

2 个答案:

答案 0 :(得分:4)

3/1分离是指VIRTUAL记忆。然而,虚拟内存很稀疏。这意味着即使在纸上“1 GB”,实际上也会使用少于该值的LOT。只要有可能,“虚拟”内存由物理页面支持(意味着,如果您的虚拟内存占用空间为50MB,那么您使用的是50 MB物理内存),直到没有更多物理内存为止,其中你要么A)溢出来交换,要么B)系统遇到低内存条件并通过杀死进程来解决内存困难问题。

它变得更复杂。在实际使用之前,虚拟内存并未真正使用(已提交)。这意味着当你为所有人创建内存时,你会获得内存的“IOU”或“promise”,但只有当你真正使用内存时才会消耗内存,就像写一些值一样。但总的来说,你是正确的,因为在内核和用户模式之间存在硬件级别的隔离。换句话说,在4GB可寻址(假设为32位)中,前1GB(即使它位于您的地址空间中)是您无法访问的,并且实际上属于内核。 (4 GB的限制来自32位指针 - 对于64位,它实际上是48,这意味着256TB,btw,128TB用户,128TB内核)。此外,作为内核的1GB空间在其他进程中也是相同的。因此,当您“调用内核”(即系统调用)时,无论您处理哪个进程都无关紧要,您最终会进入前1GB,这在所有进程之间共享。

同样,关键点在于1GB并未完全使用。内核的实际内存占用量要小得多 - 几十MB。从理论上讲,内核可以使用UP到1GB,但这可以假设它可以通过RAM或(很少)交换来备份。你可以看一下/ proc / meminfo。至于上面的答案,关于更改3/1 - 它实际上可以更改(在Windows中它就像boot.ini中的内核命令行选项一样简单,在Linux中它需要重新编译)。

答案 1 :(得分:2)

进程空间中的3GB / 1GB拆分是固定的。无论实际使用多少RAM,都无法改变它。