CPU Study-Virtual Memory Part1

参考来源:《超标量处理器设计》—— 姚永斌

虚拟地址常见的优点如下:

  1. 降低物理存储器的容量需求
  2. 实现对程序的保护
  3. 实现不同程序之间的共享
    Virtual Memory System

Address Translation

虚拟内存地址空间划分单位:Page 页。
物理内存地址空间划分单位:Frame 帧,大小和Page 页相等。
程序开始运行时,会将当前需要的内容从磁盘复制到物理内存中,每次搬运的单位为一个Page 页的大小。

对于一个虚拟地址VA(Virtual Adress)而言,VA[11:0]用于表示页内位置 Page Offset。VA剩余部分用于表示哪个页 VPN Virtual Page Number。

对于一个物理地址PA(Physical Address)而言,PA[11:0]用于表示Frame 帧内位置Frame Offset。PA剩余部分表示哪一帧 PFN Physical Frame Number。

例子:假设处理器为16位,寻址空间为0~0xFFFF(64KB)。
如果Page 页大小为4KB,则一共有16页。
假设物理内存Frame 帧大小为32KB,共有8帧。
当一个大于32KB程序运行时,部分虚拟地址被映射到物理地址。
地址转换
对于地址转换来说,只是对VPN进行操作,页内偏移并不会修改,也就是常说的 Page 页是地址转换的最小单位。

单级页表

页表用于存储虚拟地址到物理地址的对应关系(VPN to PFN)。
页表一般放在物理内存,每个程序都有自己的页表。
为了指示一个程序的页表在物理内存中的位置,一般会通过页表寄存器PTR记录。
PTR寄存器会存储程序页表在物理内存中的位置信息,也有一个有效位显示是否已经映射到物理内存。如果访问显示这个有效位没有asserted,就会出现page fault异常。
通过页表进行地址转换
真正的寻址页表并不是虚拟地址的所有位数,以32位为例:
低12位寻址一个页内容(4KB),高中0位用于寻址哪一个Page 页。
页表中的entry也不是整个物理地址信息,只是PFN信息。
从上图看PFN只占用18位和一个valid有效位,剩余的人位信息用于表示页面属性信息(可读可写等权限)。

对处理器而言,一个程序对应的页表,连同PC和通用寄存器一起,组成了程序的状态。
一个程序被执行时,需要操作系统为其分配物理内存空间,创建页表和堆栈等。
当一个进程被切换需要进行状态保存时,并不需要保存这个进程的整个页表,只需要保存页表对应的页表寄存器PTR信息即可。
因为每个进程都拥有整个虚拟存储器的空间,所以只需要将保存映射信息的页表信息保存就可以。

但是由于页表信息存放在物理内存,如果要得到一个虚拟地址对应的数据就需要访问两次物理内存(地址+存放在地址里的数据)。
因此后面引入了TLB和Cache。

32位处理器中,Page Size为4KB,Entry表项数量为4GB/4KB=1M。
每个程序需要占用的页表空间为1M*4B=4MB连续空间大小。
当系统运行多个程序时,就会有大量的空间占用,并且大部分程序很难用完整个4GB虚拟空间,导致大部分页表实际内容为空。
为了提高页表利用效率,减少一个进程页表对存储空间的过多占用,常用的解决方法-多级页表出现了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值