虚拟记忆效应以及分页和分段之间的关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟记忆效应以及分页和分段之间的关系相关的知识,希望对你有一定的参考价值。
这是我的第一篇文章。我想问一下虚拟内存与分页和分段有什么关系。我在互联网上搜索了几天,但仍然无法将这些信息整理成正确的顺序。这是我目前所知道的:
我们可以在内存中讨论地址(我们可以说它们是内存抽象级别):
- 物理级别(CPU与内存控制器通信,“嘿给我地址0xFFEABCD的内容”,这些地址是RAM中单元的地址,所以单元0xABCD有物理地址0xABCD。内存控制器只能使用物理地址,所以如果地址不是物理地址它必须改为物理。
- 逻辑层次。这是物理地址的抽象。这里的处理如果要求存储器(假设成功分配)给出的地址与RAM中的单元没有直接关系。我们可以说这些地址来自不同的池(世界?)而不是物理地址。正如我之前所说,内存控制器只能理解物理地址,所以要使用逻辑地址,我们需要将它们转换为物理地址。操作系统有两种方法可以创建逻辑地址: 分页 - 其中物理存储器(RAM)被分成连续的存储器块(称为帧),而逻辑存储器(另一个世界)也被分成相同的长度块(称为页面)。现在OS保留在称为页表的RAM数据结构中。它是一个关联数组(map),它存在的主要目标是将逻辑级地址转换为物理级地址。分页具有以下效果:由RAM中的进程分配的内存(因此在属于程序的物理内存中的帧中)可能不是以令人难以置信的方式(因此内部可能存在漏洞)。 细分 - 程序分为称为细分的部分。细分大小不固定,因此不同的细分可能具有不同的大小。程序分为几个段,每个段在RAM(物理)内存中都有自己的位置。因此,一个段(称为sementA)和另一个段(称为段B)可能彼此不接近。换句话说,segmentA不必将segmentB作为邻居。 内部碎片 - 当属于进程的内存不是100%使用时。因此,如果进程想要使用2个字节,则操作系统需要分配页面/页面,其总大小需要大于或等于程序请求的内存量。页面的典型大小为4KB。 OS为内存处理的单位是页面。所以它不能少于4KB。因此,如果我们使用2个字节,则会浪费4KB-2B = 4094个字节(内存与我们的进程相关联,因此其他进程无法使用它。只有我们可以使用它,但我们只需要2B)。 外部碎片 - 当分配的内存块是一个接近另一个时,但它们之间有一个小漏洞。它是免费的,所以其他程序,可以使用它,但它是不明智的,因为它非常小。那些很有可能的漏洞将被浪费掉。更多漏洞 - 浪费更多内存。 分页可能会导致内部碎片的影响。分段可能会导致外部碎片的影响。
- 虚拟级别 - 虚拟内存中使用的地址。这是逻辑内存级别的扩展。现在程序甚至不需要在RAM中分配所有已分配的页面来开始执行。它可以通过以下技术实现: 分页分段 - 将分段分成页面的方法。 分段分页 - 较少使用的方法,但也是可能的。 将它们结合起来可以从两种解决方 我读到的关于虚拟内存的优缺点: 优点: 进程有自己的地址空间,这意味着如果我们有两个进程A和B,并且它们都有一个指向地址的指针,例如。 17 processA指针将显示到processB中不同于指针的帧。这导致更大的过程隔离。进程是相互保护的(因此,如果一个进程不是共享内存,则一个进程无法处理另一个进程内存,因为在其映射中不存在这样的映射条目),并且OS更受过程保护。 拥有比物理一阶内存(RAM,由于交换到二级内存)更多的内存。 由于以下原因更好地利用内存: 将未使用的程序部分交换到辅助存储器。 使sharings页面成为可能,也可以“复制写入”。 改进的多程序功能(当不需要的程序部分被交换到辅助存储器时,它们在ram中提供了可用于新程序的可用空间。) 提高了CPU利用率(如果你可以将更多的进程加载到内存中,那么你有更大的可能性,而现在有些程序需要做CPU的东西,而不是IO的东西。在这种情况下你可以更好地利用CPU)。 缺点: 虚拟内存有它的开销,因为我们需要两次访问内存(但是这里可以使用TLB缓冲区实现很多改进) 它使OS部分管理内存更复杂。
所以我们来到了一些我不太了解的部分:
- 为什么在某些来源中逻辑地址和虚拟地址被描述为同义词?我弄错了吗?
- 真的是虚拟内存为流程提供保护吗?我的意思是,例如在分段中还检查进程是否不访问其他内存(如果是这样会导致段错误),分页在页表中也有一个保护位,所以保护不是来自简单地扩展抽象逻辑级地址?如果VM(虚拟内存)带来了扩展保护功能,它们是什么以及它们如何工作?换句话说:为每个进程创建单独的地址空间,带来扩展的内存保护。如果是这样,那么无法实现的是没有VM的分页?
- 分段分页的分页分割有多么不同。我知道这两者之间的区别在于如何构建地址(页码,段号,那些东西......),但我认为制定2种策略是不够的。这个理由就像什么都没有。我读到分段分页的弹性较小,这就是它很少使用的原因。但为什么它弹性较小?原因是,在程序中你只能有几个段而不是很多页面。如果是这样,案例分页确实允许更好的“粒度”。
- 如果VM为每个进程创建单独的地址空间,是否意味着,没有VM的分页使用来自“一个池”的逻辑地址(那么在这种情况下每个逻辑地址是全局唯一的吗?)。
任何有关该主题的帮助将不胜感激。
编辑:#1 好。我终于明白,不按需分页也是虚拟内存。我刚发现一些澄清有助于理解这个主题。下面是我为了形象差异所做的图像链接。感谢帮助。
答案
为什么在某些来源中逻辑地址和虚拟地址被描述为同义词?我弄错了吗?
许多来源将逻辑和虚拟内存翻译混为一谈。在这些日子里,逻辑地址转换从未在没有虚拟地址转换的情况下进行,因此处理器文档将它们称为相同。
现在我们有大型内存系统使用逻辑内存转换而没有虚拟内存。
真的是虚拟内存为流程提供保护吗?
它是实现页面保护的逻辑内存转换。
分段分页的分页分割有多么不同。
你真的可以忽略细分。没有合理设计的处理器架构在1970年之后设计使用了细分市场,它们终于消失了。
如果VM为每个进程创建单独的地址空间,这是否意味着,没有VM的分页使用来自“一个池”的逻辑地址
逻辑内存为每个进程创建单独的地址空间。分页是虚拟内存。你不能没有另一个。
以上是关于虚拟记忆效应以及分页和分段之间的关系的主要内容,如果未能解决你的问题,请参考以下文章
操作系统| 虚拟存储器(请求分页和请求分段地址变换详解,页面置换算法先进先出LRUClock虚拟存储器的定义和特征)