第9章.虚拟内存_16g内存最佳虚拟内存「建议收藏」

第9章.虚拟内存_16g内存最佳虚拟内存「建议收藏」物理和虚拟地址1.物理寻址主存被组织成一个由M个连续的字节大小的单元组成的数组

物理和虚拟地址

1.物理寻址

主存被组织成一个由M个连续的字节大小的单元组成的数组。每字节都有一个唯一的物理地址(physical address, PA)。第一个字节的地址为0,接下来的字节地址为1,再下一个为2,以此类推。使用物理地址访问内存,称为物理寻址。

在这里插入图片描述
上图是CPU使用物理寻址,读取从物理地址4开始的4个字节。CPU生成一个有效物理地址,通过内存总线,把它传递给主存。主存取出4字节字,返回给CPU。CPU将它存放在一个寄存器里。

2. 虚拟寻址

在这里插入图片描述CPU生成一个虚拟地址(virtual address VA)来访问主存,虚拟地址传送到内存之前会先被转化为物理地址。这个转化过程称为地址翻译。和异常一样,地址翻译需要硬件和操作系统的紧密合作。CPU芯片上的内存管理单元(MMU),是完成地址翻译的专用硬件,它利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容由操作系统管理。

地址空间

地址空间是一个非负整数地址的有序集合:
{ 0 , 1 , 2 , . . . } \{0, 1, 2, …\} {
0,1,2,...}
如果地址空间中的整数是连续的,称为线性地址空间。我们假设使用的是线性地址空间。

CPU从一个有 N = 2 n N=2^n N=2n个地址的地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间:
{ 0 , 1 , 2 , . . . , N − 1 } \{0, 1, 2, …, N-1\} {
0,1,2,...,N
1}
一个地址空间的大小是由表示最大地址所需要的位数(也就是n)来决定的。现代系统通常支持32位或者64位虚拟地址空间。

一个系统还有一个物理地址空间,对应于系统中物理内存的M个字节:
{ 0 , 1 , 2 , . . . , M − 1 } \{0, 1, 2, …, M-1\} {
0,1,2,...,M
1}
这里M其实不要求是2的幂,但是为了简化讨论,假设 M = 2 n M=2^n M=2n

允许每个数据对象有多个独立的地址,其中每个地址都选自一个不同的地址空间。这就是虚拟内存的基本思想。主存中每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。

虚拟内存作为缓存的工具

概念上而言,虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。每个字节都有一个唯一的虚拟地址,作为到数组的索引。
和存储器层次结构中其他缓存一样,磁盘上数组的内容被缓存在主存中。磁盘上的数据被分割成块,这些块作为磁盘和主存之间的传送单元。VM系统将虚拟内存分割为大小固定的块,这个块叫做虚拟页。每个虚拟页的大小为 P = 2 p P=2^p P=2p字节。同样,物理内存被分割成物理页,大小也为 P P P字节。物理页也被称为页帧。

虚拟页面的集合被分为三个不相交的子集:

  • 未分配的: VM系统还未创建的页。未分配的块没有任何数据和它们相关联,因此也就不占用任何磁盘空间。
  • 缓存的:当前已缓存在物理内存中的已分配页。
  • 未缓存的:未缓存在物理内存中的已分配页。

在这里插入图片描述

9.3.1 DRAM的缓存结构

DRAM不命中需要从磁盘中读取,所以成本是比较高的。由于大的不命中处罚和访问第一个字节的开销,虚拟页往往也很大。由于大的不命中处罚,DRAM是全相联的(也就是只有一个组,地址中没有组索引),所以任何虚拟页都可以放置在任何的物理页中。由于对磁盘的访问时间很长,DRAM采用写回,而不是直写

9.3.2 页表

页表将虚拟页映射到物理页。每次地址翻译硬件将一个虚拟内存页转换为物理地址时,都会读取页表。操作系统负责维护页表的内容,以及在DRAM和磁盘之间来回传送页。

在这里插入图片描述
页表是页表条目(page table entry PTE)的数组。虚拟地址空间中的每个页在页表中一个固定偏移量处都有一个PTE。假设每个PTE由一个有效位和一个n位地址字段组成。
如果有效位是1,那么地址字段就表示DRAM中相应的物理页的起始位置(虚拟内存到物理内存的映射)。如果有效位是0,那么一个空地址表示这个虚拟页未分配;否则这个地址就指向虚拟页在磁盘上的起始位置(虚拟内存地址到实际磁盘地址的映射)。

上图中,VP1、VP2、VP4和VP7缓存在了DRAM中,VP0和VP5未分配(页表中PTE0和PTE5的地址是null,虚拟内存中没有VP0和VP5),而VP3和VP6已经被分配了,但是当前未缓存。注意,由于DRAM缓存是全相联的,所以任意物理页都可以包含任意虚拟页

9.3.3 页命中

在这里插入图片描述
读VP2时,地址翻译硬件将虚拟地址作为一个索引来定位PTE2,由于设置了有效位,所以知道VP2已经缓存在了内存中。所以它使用PTE中的物理内存地址(该地址指向PP1中缓存页的起始位置),构造出这个字的物理地址。

9.3.4 缺页

在虚拟内存的习惯说法中,DRAM缓存不命中称为缺页

在这里插入图片描述
比如引用VP3中的一个字,页表中的PTE3的有效位是0,说明未缓存在物理内存中,触发一个缺页异常,调用内核中的缺页异常处理程序。该程序会选择一个牺牲页,这里就是存放在PP3中的VP4。首先要将PTE4的有效位置0,说明VP4已经不在物理内存中了;如果此前曾经有过对VP4的写,还要把VP4复制回磁盘(这就是前面所说的写回)。然后,从磁盘中将VP3复制到内存中的PP3,随后缺页处理程序返回。

当异常处理程序返回,它会重新启动导致缺页的指令,该指令会把导致缺页的虚拟地址重新发送到地址翻译硬件。这时候就页命中了。

在这里插入图片描述
上图是替换后页表的状态。

虚拟内存系统和SRAM缓存不同的术语。块被称为页。磁盘和内存之间传送页的活动叫做交换或者页面调度。页从磁盘换入(或者页面调入)DRAM和从DRAM换出(或者页面调出)磁盘。一直等待,直到最后时刻,也就是当有不命中发生时,才换入页面的这种策略叫做按需页面调度

<

今天的文章第9章.虚拟内存_16g内存最佳虚拟内存「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86235.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注