这是我的第一篇文章。我想问一下虚拟内存与分页和分段的关系如何。我在互联网上搜索了几天,但仍然无法正确处理这些信息。这是到目前为止我所知道的:
我们可以讨论内存中的地址(可以说是内存抽象级别):
物理级别(CPU与内存控制器对话,“嘿,给我地址0xFFEABCD的内容”,这些地址是RAM中单元的地址,因此单元0xABCD的物理地址为0xABCD。内存控制器只能使用物理地址,因此,如果地址不是物理地址,则必须将其更改为物理地址。
逻辑级别。这是对物理地址的抽象。在此处理是否要求内存(假定成功分配)的地址,该地址与RAM中的单元没有直接关系。我们可以说这些地址与物理地址来自不同的池(世界?)。如前所述,内存控制器仅了解物理地址,因此要使用逻辑地址,我们需要将其转换为物理地址。操作系统可以通过两种方式创建逻辑地址:
分段-程序分为称为分段的部分。段的大小不是固定的,因此不同的段可能具有不同的大小。程序分为几个部分,每个部分在RAM(物理)存储器中都有自己的位置。因此,一个线段(称为sementA)和另一个线段(称为sementB)可能彼此不靠近。换句话说,segmentA不必将segmentB作为邻居。
内部碎片-当属于进程的内存未100%使用时。因此,如果进程要使用2个字节,则OS需要分配总页数大于或等于程序请求的内存量的页面。页面的典型大小为4KB。 OS为其提供内存以供处理的单位是页面。因此它不能少于4KB。因此,如果我们使用2个字节,则会浪费4KB-2B = 4094个字节(内存与我们的进程相关联,因此其他进程无法使用它。只有我们可以使用它,但我们只需要2B)。
外部碎片-当分配的内存块彼此相邻时,但是它们之间有一个小孔。它是免费的,因此其他程序也可以使用它,但它非常小,因为它很小。高概率的漏洞将被浪费。更多的漏洞-浪费的内存。
分页可能会导致内部碎片的影响。分段可能会导致外部分段的影响。
虚拟级别-虚拟内存中使用的地址。这是逻辑内存级别的扩展。现在,程序甚至不需要在RAM中拥有所有已分配的页面即可开始执行。可以使用以下技术来实现:
将它们结合起来对两种解决方案都具有积极意义。
我所读到的有关虚拟内存利弊的内容:
PROS :
缺点:
所以我们来到了我不太了解的部分:
为什么在某些源中将逻辑地址和虚拟地址描述为同义词?我有什么问题吗?
虚拟内存真的在为进程提供保护吗?我的意思是,例如,在分段中,还检查进程是否不访问其他内存(如果这样做会导致segfault),分页在页表中也有一个保护位,所以保护不是来自简单地扩展了逻辑级地址?如果VM(虚拟内存)具有扩展保护功能,它们是什么以及它们如何工作?换句话说:确实为每个进程创建了单独的地址空间,带来了扩展的内存保护。如果是这样,没有VM不能进行分页?
分页分段与分段分页之间的真正区别是什么。我知道这两者之间的区别将是地址的构造方式(页码,段号等),但是我想这不足以开发两种策略。这个原因无可厚非。我读到分段分页的弹性较小,这就是为什么很少使用它的原因。但是为什么它的弹性较小?这样做的原因是,在程序中您只能有几个段而不是很多页面。如果这样的话,分页确实允许更好的“粒度”。
如果VM为每个进程分配单独的地址空间,是否意味着没有VM的页面调度使用“一个池”中的逻辑地址(在这种情况下,每个逻辑地址是否全局唯一)?
在该主题上的任何帮助将不胜感激。
编辑:#1
好。我终于明白,按需分页也是虚拟内存。我只是发现一些澄清有助于理解该主题。以下是我为可视化差异而制作的图像的链接。感谢您的帮助。
答案 0 :(得分:0)
为什么在某些来源中将逻辑地址和虚拟地址描述为同义词?我有什么问题吗?
许多来源将逻辑和虚拟内存转换混合在一起。在过去,逻辑地址转换是在没有虚拟地址转换的情况下进行的,因此处理器文档将它们视为相同。
现在,我们拥有使用逻辑内存转换而没有虚拟内存的大型内存系统。
虚拟内存真的在为进程提供保护吗?
这是实现页面保护的逻辑内存转换。
分页分段与分段分页之间的真正区别是什么。
您实际上可以忽略细分。 1970年后没有设计合理设计的处理器体系结构使用细分市场,而这些细分市场最终将消失。
如果VM为每个进程分配了单独的地址空间,这是否意味着没有VM的页面调度会使用“一个池”中的逻辑地址
它是逻辑存储器,为每个进程创建单独的地址空间。分页是虚拟内存。你不能一无所有。