计算机体系结构——操作系统——虚拟内存管理

现代操作系统中普遍采用虚拟内存管理,该部分即让软件运行在“虚地址”上,与真正访问存储的“实地址”(物理地址)相隔离。

1. 存储管理

存储管理构建虚拟的内存地址,通过MMU(存储管理单元)将虚拟地址转换为物理地址,从而达到隐藏和保护存储器特定页内容,为程序分配连续的存储空间,扩展地址空间,通过合理映射节约物理内存的作用;且各进程不必担心自己使用的地址范围会不会和别的进程冲突,比如两个进程都使用了虚拟地址0x0800,操作系统可以设置MMU的映射项把它们映射到不同的物理地址,它们通过同样的虚拟地址访问不同的物理页面,就不会冲突了

  1. 页式存储管理
    操作系统将内存空间分为若干个固定大小的页,并维护虚拟页地址和物理页地址的映射关系(即页表)。虚拟内存地址可表示为虚拟页地址和页内偏移两部分,通过通过查表,即可得到相应物理内存地址。
    在32位系统中,若采用4KB页时,单个完整页表需要1M项,对每个进程维护页表需要相当可观的空间代价,因此页表只能存储于内存中。
     
  2. PTE和页表
    PTE由页表中的页和一些有效位组成,也就是说一张张PTE的页组成了页表。
    页是一系列地址的集合,页表是整个虚拟存储器的地址集合。
     
  3. MMU
    所有数据请求都需经过MMU来决定存放在RAM内还是大容量存储器内。同时MMU可以控制存储器存取允许,MMU关闭时,虚地址直接输出到物理地址总线。内部包含虚实地址转换单元和从虚实地址的匹配表(即TLB)。
     
  4. TLB
    转换旁置缓冲区。若每次进行地址转换时都要先到内存中查询页表,会对CPU性能产生影响,此时可采用TLB实现快速的虚实地址转换。
    TLB也称为页表缓存或快表,借助局部性原理,存储当前处理器中最经常访问的页表,相当于页表的Cache。
    存储的内容包括虚拟地址,物理地址和保护位
     

2. 虚地址转换方法

可根据地址段属性不同分为查表转换和直接转换

  • 查表转换
    应用程序使用的主要方式,CPU在访存指令时,根据操作系统给出的映射表来完成虚地址到物理地址的转换

转换过程为:
处理器用地址空间标识符(ASID)和虚拟页号(v*n)在TLB中进行查找匹配;
若命中,则读出其中的物理帧号(PFN)和标志位(Flag),PFN用于和页内偏移组成物理地址,标志位用于判断该访问是否合法,即是否可读,可写,可执行,若非法则发出非法访问异常。
若未命中,则产生TLB缺失异常,此时需要将页表中内容从内存中取出并填入TLB中,即为TLB充填(硬件或软件皆可实现)
计算机体系结构——操作系统——虚拟内存管理

  • 直接映射
    该方式与直接使用物理地址差别不大,用户态应用程序无法使用直接映射方式