【VM】关于Virtual Memory地址翻译的一些问题(1)

Virutal Memory在系统相关的课程、书本中一直都占据很大一个part. 最近在给ICS出期中卷子,自己也在写JOS的lab,整理了一下思路,收获还是不小的。

该篇为基本知识

====================================

I. 什么是Virutal Memory

1. virtual memory and physical memory

首先说一说物理内存,就是一般的thinkpad电池附近的一块板子,在电脑配件贩卖处经常会听到的4G内存100+元……这个就是物理内存了。一个程序想要被执行,就必须要在物理内存里。

那什么是虚拟内存呢?CSAPP上是这样定义的:

In order to manage memory more efficiently and with fewer errors, modern systems provide an abstraction of main memory known as virtual memory (VM).

还要说到很久很久以前,程序员在写大程序的时候,物理内存不够用,还得自己动手一块块地把代码加载到物理内存中,剩下的就放在磁盘上。后来机智的程序员在一定硬件的帮助下用更大的程序实现了自动将一块块代码从磁盘加载到物理内存里。而程序员所接触到的内存是一个绝对够用的逻辑地址,也就是虚拟地址。程序员不需要再继续关心这个逻辑地址里面的东西到底在不在内存里,VM会帮助程序员完成这些工作把程序需要的东西加载到物理内存里面。


2. virtual pages

我们平常经常会提到说32位机器、64位机器。这些32、64一方面描述了word size, 另一方面说明了Virtual Memory的大小。 假设word size是w-bit,那么virtual memory的大小就是(2 ^ w) byte.因为w-bit能够表示[0, 2^w)的数字,每一个数字映射一个虚拟地址。

虚拟内存将(2^w) byte的地址空间分割为固定大小的块(通常为4KB),叫做Virutal Page。相应的,物理内存也被分割为同样大小的页,叫做Physical Page.当然在这里我们会想到Physical Frame. Physical Frame同样是描述物理内存的,那么和Physical page有什么区别?我们可以把Physical Frame考虑为物理内存上的一个容器,他们每个都有相同的固定的大小,以及有各自的位置;而Physical Page可以被看成这个容易里面装的东西,可以被拿进拿出修改。

II.Virutal Memory地址翻译

程序员、程序锁接触的地址为虚拟地址,但是机器在处理资源时并不认识这个地址,所以我们需要用硬件MMU(memory manegement unit)和一个被OS放在物理内存中的Page Table翻译为物理地址。

1. Page Table

Page Table是一个PTE(page table entry)的数组。而每一个virtual page在Page Table中都有一个PTE, 在每一个virtually address上都有一段表示该地址所在页在Page Table中的偏移量。

在现在实际的操作系统中,OS会选择使用多级的page table来映射虚拟地址和物理地址。比如一个2级page table,level1的page table中的entry都指向level2的page table,而level2的page table中的entry指向物理页。

如下图所示,将虚拟地址分割为多段,VPNi将表示所对应的PTE在i级页表中的偏移量,而该偏移量所对应的值将是下一级页面(或Physical Page)的基地址。


2. TLB

在MMU中,存在一个TLB(translation lookaside buffer), 作为一个Page Table的缓存。先根据TLBI在TLB中找到index,再通过TLBT比对,找到PPN。省略掉通过Page Table查找的步骤。



3. PTBR

对于每一个进程,CPU中的一个寄存器(CR3)将存储指向一级页表的指针(PTBR)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值