有人可以在我的寻呼(虚拟内存)上解释这个图吗?

时间:2015-11-24 09:56:17

标签: memory-management operating-system paging virtual-memory

我一直在努力理解虚拟内存,但是当我深入了解它的真实细节时,我感到很困惑。我理解(或者我觉得我这样做)虚拟内存是进程“认为”它有一定量内存分配给它的一种方式。虚拟地址空间被划分为相等大小的页面,物理存储器被划分为相等大小的帧,并且页面映射到帧。

但是......如果这发生了什么?在此图中,CPU正在运行程序P.这意味着P的一部分已经在物理内存中,对吗? (因为cpu只能访问物理/主内存)。那么CPU究竟指出了什么?我看到它是虚拟内存空间中的一个页面,所以就像这个页面代表什么?这是一个指令吗?我们是否正在将指令从虚拟内存移动到物理内存,以便更多的程序在物理内存中(直到那时才需要)?我离开了吗?有人可以向我解释一下吗?

enter image description here

3 个答案:

答案 0 :(得分:4)

该图显示了将虚拟地址转换为物理地址的过程。

Program P到CPU的胖箭头表示程序被“送入”CPU。 1

CPU“指向”指令用来寻址程序P中的内存位置的虚拟地址。它分为两部分:

  • 页面表索引p):虚拟地址包含页面表的索引,该页面将页面映射到页面框架({{ 1}})。有关该机制的描述(包括多级分页),请阅读this
  • 偏移f):如您所见,偏移量直接添加到物理地址,因为分页的最小可寻址单位是,不是字节

最后,计算出的地址用于处理物理内存中的内存位置。

1 “fed”表示从二级存储器读取(发音为 red )到RAM并通过指令执行程序指令“。

答案 1 :(得分:1)

我不打算尝试理解该图表,因为它没有任何意义。

标题为" Paging"但该图表根本没有显示分页。

您缺少的是有两个步骤。首先是逻辑内存转换(图表有点,sorta)显示。

物理内存以一些固定大小的PAGE FRAMES排列(例如,1K,4K)。

每个进程都有一个LOGICAL ADDRESS SPACE,由与页面框架大小匹配的PAGES组成。

逻辑地址空间由操作系统管理的PAGE TABLE定义。页表将逻辑页面映射到物理页面框架。

如果有两个进程(X和Y),则进程X中的逻辑地址Q和地址Y在大多数情况下映射到不同的物理页面帧。

通常会有一系列分配给SYSTEM ADDRESS SPACE的逻辑地址。这些逻辑页面映射到所有进程的同一物理页面。

进程仅处理逻辑页面。不了解物理页面。程序计数器寄存器始终指逻辑地址。 CPU自动将逻辑页面转换为物理页面帧。翻译对流程完全透明。操作系统是唯一具有物理页面框架知识的东西,但它只管理页面表格; CPU进行翻译。

分页是不同但相关的。

当程序访问存储器地址时,CPU会尝试将其转换为页框内的物理地址。发生了几个步骤。

  1. CPU找到所请求页面的页表条目。 页面可能根本没有页面表条目。该图显示了连续的逻辑到物理映射。这很少发生。逻辑地址空间通常具有有效页面的集群,它们之间存在间隙。如果地址没有页表条目,则CPU会触发异常。

  2. CPU读取页表条目以确定它是否引用了有效的页框。 页面的条目可能尚未映射到逻辑地址空间(例如,第一页通常不映射到陷阱空指针错误)。如果页面尚未映射,则会触发异常。

  3. CPU检查当前处理器模式是否允许访问。 可以为页面设置读/写/执行保护,并且可以通过模式限制访问(内核模式,用户模式或某些处理器中的某些其他模式)。 如果不允许访问,则CPU会触发异常。

  4. [这里是分页的来源] CPU检查页面是否已映射到物理页面框架。如果不是,CPU将触发PAGE FAULT。操作系统通过查找页面存储在页面文件中的位置,将页面表映射到物理页面框架,将页面文件中的数据加载到内存中,然后重新启动指令来进行响应。

答案 2 :(得分:0)

我猜你的混淆的大部分来自于上图有点 被误导 这一事实。

请注意,缺少 IP寄存器 以及一些额外的文本@两个'Tables'都是有问题的。其余的都没问题。

我向您展示了相同但 已修复 图表,这更有意义。

enter image description here

正如其他人已经告诉你的那样,上图只是CPU用于 获取 地址 的转换方案> 实际说明&来自 P的虚拟地址空间 的操作数。你看见了吗?这都是关于地址而不是别的什么!!!

它向您展示了如何通过CPU(在分页方案中)管理 虚拟地址 ,以便从 使用 物理地址 的实际 物理内存。

对'Downvoter'的解释很有用,所以不需要添加任何其他内容。