关于虚拟内存和物理内存的映射和地址转换

· 地址翻译及数据获取
页表存储的是虚拟内存和物理内存之间的一种映射关系,而MMU是实现地址翻译的一个模块。CPU通过虚拟地址请求数据且页面命中的过程大致如下:
(1)CPU生成一个虚拟地址传递给MMU
(2)MMU会根据虚拟地址生成PTE地址,然后到内存中查询PTE
(3)内存返回PTE给MMU
(4)MMU解析PTE,得到物理地址,传送回内存
(5)最后内存将数据传给CPU。
关于虚拟内存和物理内存的映射和地址转换_第1张图片
上图是较为简单的结构,实际上系统会对PTE条目进行缓存,利用高速缓存区或者TLB。
TLB为翻译后备缓存器,包含在MMU中,其中每一行保存一个由单个PTE组成的块。
关于虚拟内存和物理内存的映射和地址转换_第2张图片
·和学习高速缓存一样,下面以一个具体的地址翻译例子,来加深对这部分内容的理解。
假设有以下系统:
· 内存按字节寻址
· 内存访问针对1字节的字(而不是4字节的字)
· 虚拟地址14位
· 物理地址12位
· 页面大小64字节
· TLB四路组相联,共16个条目(4组每组4个条目).
· L1 d-cache是物理寻址,直接映射的。行大小为4字节,共有16个组。

1.先来分析虚拟地址和物理地址中页号和偏移量的占位情况。
(1)虚拟地址14位,即范围为214(16K),又页面大小为64(26)
用2^14 / 2^6 = 2^8,即有256个页,所以需要8位来表示页号。
故页号为8位,偏移量为14-8 = 6
关于虚拟内存和物理内存的映射和地址转换_第3张图片
(2)物理地址中偏移位数与虚拟地址中一致,所以物理地址中物理页偏移位数为6,物理页号位数为12-6 = 6位。
关于虚拟内存和物理内存的映射和地址转换_第4张图片
(3)TLB是通过VPN进行寻址的,四组相联,即组索引为2位(TLBI),标志位8-2 = 6位(TLBT)。
关于虚拟内存和物理内存的映射和地址转换_第5张图片
2.下面给出TLB,高速缓存的存储情况
TLB
TLB中缓存了一部分PTE,目前我们只需要关注该部分,即考虑PTE命中。
关于虚拟内存和物理内存的映射和地址转换_第6张图片
回顾之前学的高速缓存,现在需要将物理地址划分为:标记,组索引,偏移量。
16个组,所以组索引(CI)为4位;行大小为4字节,所以偏移量(CO)需2位;剩下的标记位(CT)12-4-2 = 6位。
关于虚拟内存和物理内存的映射和地址转换_第7张图片
下面给出高速缓存存储情况
关于虚拟内存和物理内存的映射和地址转换_第8张图片
3.寻址
假设CPU要执行一条读地址为0x03d4处字节。
该地址是虚拟地址,先解析出其信息
关于虚拟内存和物理内存的映射和地址转换_第9张图片
即组为3,标记位为03,查表得
关于虚拟内存和物理内存的映射和地址转换_第10张图片
PTE命中,有效位为1,且该页在内存中,页命中。此时获得物理页号,又VPO为0x14,所以PPO也为0x14。将物理页号和PPO连起来
在这里插入图片描述
获得物理地址PA = 0x354,再划分位数,从高速缓冲区获取数据 标记0D,第5组,0偏移量。
关于虚拟内存和物理内存的映射和地址转换_第11张图片
关于虚拟内存和物理内存的映射和地址转换_第12张图片
获得字节数据0x36。

你可能感兴趣的:(操作系统)