gpt4 book ai didi

memory-management - 虚拟内存的最大可寻址空间是多少?

转载 作者:行者123 更新时间:2023-12-03 23:40:50 24 4
gpt4 key购买 nike

看到这个问题问了很多遍。但是找不到合理的答案。虚拟内存的限制实际上是什么?

它是CPU的最大可寻址大小吗?例如,如果CPU是32位,则最大为4G?

也有一些文本将其与硬盘区域相关。但是我找不到很好的解释。有人说它是CPU生成的地址。

我们看到的所有地址都是虚拟地址吗?例如,使用GDB调试程序时看到的内存位置。

CPU生成虚拟地址背后的历史原因?一些文本可互换地使用虚拟地址和逻辑地址。有何不同?

最佳答案

不幸的是,答案是“取决于”。您没有提到操作系统,但是在提到GDB时暗指linux。我会尽量完全笼统地回答我。

基本上有三个不同的“地址空间”。

第一个是逻辑地址空间。这是指针的范围。现代(386或更高版本)具有内存管理单元,该内存管理单元允许操作系统使您的实际(物理)内存出现在任意地址处。对于典型的台式机,这需要4KB的块。当程序访问某个地址的内存时,CPU将查找与该逻辑地址对应的物理地址,并将其缓存在TLB(转换后备缓冲区)中。这允许三件事:首先,它允许操作系统为每个进程提供所需的尽可能多的地址空间(最多指针的整个范围-或如果存在允许程序映射/取消映射其地址空间部分的API,则超出此范围) )。其次,它允许通过切换到不同的内存映射来完全隔离不同的程序,从而使一个程序无法破坏另一个程序的内存。第三,它为开发人员提供了调试帮助-随机损坏的指针可能指向根本没有被映射的某个地址,从而导致“分段错误”或“无效页面错误”,或者术语因操作系统而异。

第二个地址空间是物理内存。它只是您的RAM-您的RAM数量有限。可能还有一些具有映射到内存的I / O的硬件-看起来像RAM的设备,但实际上是某些硬件设备,例如PCI卡,或者也许是视频卡上的内存等。

地址的第三种类型是虚拟地址空间。如果您的物理内存(RAM)少于程序所需的内存,则操作系统可以通过给程序一种幻想,即通过仅使一部分内存实际为RAM,而让其具有大量RAM的错觉来模拟在“交换文件”中。例如,假设您的计算机具有2MB的RAM。说一个分配了4MB的程序。操作系统将保留4MB的地址空间。操作系统将尝试将该4MB的最近/最常访问的块保留在实际RAM中。任何不经常/最近访问的节都将复制到“交换文件”中。现在,如果程序接触到的4MB实际不在内存中的一部分,CPU将生成“页面错误”。操作系统将找到一些最近未访问过的物理内存,并在该页面“内页”。它可能必须将该内存页面的内容写出到页面文件中,然后才能分页访问正在访问的数据。这就是为什么它被称为交换文件的原因-通常,当它从交换文件中读取某些内容时,它可能必须先写出一些内容,从而有效地将内存中的内容与磁盘上的内容进行交换。

典型的MMU(内存管理单元)硬件跟踪访问(即读取)和修改(即写入)哪些地址。典型的分页实现通常会在对数据进行分页时将其保留在磁盘上。这使它可以“丢弃”未修改的页面,从而避免在交换时写出该页面。典型的操作系统将定期扫描页表,并保留某种数据结构,使其能够智能,快速地选择未修改的物理内存,并随着时间的推移积累有关哪些内存部分经常更改以及哪些部分需要更改的信息别。

典型的操作系统通常会轻轻地调出不经常更改的页面(这是因为它们不想生成过多的磁盘I / O,而这会干扰您的实际工作)。这样,当交换操作需要内存时,它可以立即丢弃页面。

典型的操作系统将尝试使用所有“未使用”的内存空间来“缓存”(保留副本)被访问的文件。内存比磁盘快数千倍,因此,如果经常读取某些内容,则将其放入RAM的速度将大大提高。通常,虚拟内存的实现将与此“磁盘缓存”结合在一起,作为可以快速回收用于交换操作的内存源。

编写有效的虚拟内存管理器非常困难。它需要动态地适应不断变化的需求。

典型的虚拟内存实现感觉非常慢。当一台机器开始使用更多具有RAM的内存时,整体性能将变得非常非常差。

关于memory-management - 虚拟内存的最大可寻址空间是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7536587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com