如果我理解正确的话,32 位操作系统(Ubuntu)只能寻址 4GiB 内存,因此大于 4Gib 的 RAM 本身只能使用 4Gib,其余的都浪费了。
我现在对 RAM 的这种情况感到困惑,虚拟内存和交换的情况也类似。
- 虚拟内存为swap+RAM,如果虚拟内存大小超过4Gib,对于32位OS来说,超出的部分是不是就浪费了?
如果我现在必须选择交换分区的大小,是否要考虑 32 位操作系统只能寻址 4GiB 内存这一因素?交换大小是否必须根据 4Gib 寻址限制进行选择?超过 4GiB 的交换总是浪费吗?
虚拟内存等于 RAM 和交换吗?或者虚拟内存可以使用交换分区之外的硬盘空间吗?
感谢致敬!
答案1
CPU 的 32 位特性仅适用于进程内存和物理内存;操作系统维护其自己的独立于 CPU 的结构,用于将交换映射到各个进程。无论 CPU 的位深度如何,都可以使用操作系统可以处理的尽可能多的交换。
严格来说,“虚拟内存”是进程可以访问的空间。其中一些可以通过以下方式映射到交换或存储:mmap(2)
。
答案2
交换不会无法处理 4GB 以上的地址,该限制适用于映射物理内存,即使在 32 位环境中也是如此(它不是以相同的方式寻址)。
至于数量关于交换,有一种普遍的误解认为它应该是物理 RAM 大小的两倍,但这根本不是真正需要的——在 512MB RAM 成为标准的时代,交换是一个更为关键的组件,但现在它更多地发挥了“后座”的作用,如果你想这样称呼它的话。如果你使用休眠,你应该确保你至少有物理 RAM + 一点(如果你想谨慎一点,可能超过 512MB)。
话虽如此,谨慎总比后悔好。如果您有空闲空间,请考虑使用中等大小的交换空间(可能是物理空间的 1.5 倍)。
答案3
如果我理解正确的话,32 位操作系统(Ubuntu)只能寻址 4GiB 内存,因此大于 4Gib 的 RAM 本身只能使用 4Gib,其余的都浪费了。
这不对。您说得对,32 位操作系统一次只能寻址 4GiB 的虚拟内存。但这与物理内存无关。32 位操作系统可以使用 PAE 等寻址超过 4GiB 的物理内存。
虚拟内存为swap+RAM,如果虚拟内存大小超过4Gib,对于32位OS来说,超出的部分是不是就浪费了?
虚拟内存是一种创建看起来像内存但实际上并不映射到物理 RAM 的东西的技术。在 32 位操作系统上,映射的虚拟内存不能超过 4GiB。但是,可以使用窗口化来允许寻址超过 4GiB 的虚拟内存,尽管不能一次全部寻址。
如果我现在必须选择交换分区的大小,是否要考虑 32 位操作系统只能寻址 4GiB 内存这一因素?交换大小是否必须根据 4Gib 寻址限制进行选择?超过 4GiB 的交换总是浪费吗?
不,因为 32 位操作系统的限制是关于它可以一次处理的虚拟内存量。假设您正在运行八个进程,每个进程都希望使用 1GiB 的虚拟内存。这很好,没有任何限制,但这可能需要超过 4GiB 的交换空间。
虚拟内存等于 RAM 和交换吗?或者虚拟内存可以使用交换分区之外的硬盘空间吗?
虚拟内存受限于一些问题,这些问题与你有多少 RAM 或交换无关。映射文件是虚拟内存。分页使用交换分区外的空间来存储干净页面,使用交换分区中的空间来存储脏页面。理想情况下,系统可以分页干净页面和脏页面,因为这给了它最大的灵活性。