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

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

1. 存储管理

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

  • 地址空间
    页偏移的位数决定了页的大小,虚拟地址可寻址的页数和物理地址可寻址的页数可以不同,拥有比物理页数多得多的虚页数是描述一个没有容量限制的虚拟存储器的假象的基础。
  1. 虚拟地址空间
    供给用户程序使用的虚拟地址,虚拟地址被分为虚拟页号(virtual page number, VPN)页偏移(page offset)
  2. 物理地址空间
    内存物理地址的集合,物理地址被分为物理页号(physical page number, PPN)和页偏移(page offset)。
  • 相关概念
  1. 页式存储管理
    操作系统将内存空间分为若干个固定大小的页,并维护虚拟页地址和物理页地址的映射关系(即页表)。虚拟内存地址可表示为虚拟页地址和页内偏移两部分,通过通过查表,即可得到相应物理内存地址。
    在32位系统中,若采用4KB页时,单个完整页表需要1M项,对每个进程维护页表需要相当可观的空间代价,因此页表只能存储于内存中。
  2. MMU
    所有数据请求都需经过MMU来决定存放在RAM内还是大容量存储器内。同时MMU可以控制存储器存取允许,MMU关闭时,虚地址直接输出到物理地址总线。内部包含虚实地址转换单元和从虚实地址的匹配表(即TLB)。
  3. 页、页表
    虚拟存储器和物理存储器都被划分成页。存储器中的页类似于cache中的块概念,每个页中含有一个地址。地址映射就是一个虚页映射到物理页的过程。一张张页组成了页表。页表是保存着虚拟地址和物理地址之间转换关系的表。

    从空间上来算,若一台机器为32bit,虚拟页号为高20bit,页偏移位为12bit,则页大小为4KB,虚拟空间为2^{20}*4 KB=4GB,则该进程的页表大小为2^{20}*4 B=4MB
  4. PTE
    每个进程都有一个单独的页表,每个进程的虚实地址映射根据该单独页表发生。
    综上,页由ASID、虚拟页号、物理页号和一些Flag组成,而其中页表中的物理页号和一些有效位组成了PTE。
  5. TLB
    转换旁置缓冲区。若每次进行地址转换时都要先到内存中查询页表,会对CPU性能产生影响,此时可采用TLB实现快速的虚实地址转换。
    TLB也称为页表缓存或快表,借助局部性原理,存储当前处理器中最经常访问的页表,相当于页表的Cache。
    存储的内容包括虚拟地址,物理地址和保护位
     

2. 虚地址转换方法

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

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

转换过程为:

  1. 操作系统会跟踪那个进程在占用内存空间,然后选择该进程的页表
  2. MMU从虚拟地址中提取虚拟页号,例如虚拟地址的高20bit
  3. 用虚拟页号在页表中查找物理页号,即用地址空间标识符(ASID)和虚拟页号(VPN)在页表的TLB中进行查找匹配;
  4. 若命中,则读出其中的物理页号(PFN)和标志位(Flag),物理页号用于和虚拟地中的页内偏移组成物理地址
    若未命中,则产生TLB缺失异常,此时需要将页表中内容从内存中取出并填入TLB中,即为TLB充填(硬件或软件皆可实现)

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

你可能感兴趣的:(计算机结构)