【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理

本次笔记内容:
29.虚存概念初步
30.MIPS内存管理

注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库

本节课对应幻灯片:汇编语言程式设计-MIPS.pdf,第92页起。

这是课程主体内容的最后一部分。周四老师会出一套模拟题,题量为正式考试的70%。

虚存设计背景

虚存时操作系统给你的“承诺”,但是实际上是一个假象。

  • 将物理内存作为磁盘数据的“缓存”:因为进程的地址空间可能会超过物理内存的大小
  • 简化程序的内存管理:多个进程同时运行,每个都有自己的地址空间
  • 存储保护功能:某进程不能访问其它进程的空间,一个进程的不同空间区域具有不同的访问权限

虚存其实很难,当年老师把虚存上OS时,出现了大量问题,调试工作很重。

虚存的概念与工作流程

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
所有的程序中的地址都是“假”的,都要通过页表进行一次映射。

有一种情况:在 Page Table 中有效位是 0 ,但是其没被装载到内存中,在磁盘中,如上。这是页缺失,这是一个复杂的过程,把页装载,需要控制权在OS中转换,还要读 disk 的数据到 Memory ,此外,还可能要进行内存中内容的卸载。

以页为单位

页缺失(Page Fault)

页表项记录某虚存地址(以页为单位)是否在物理内存中。

如果不是,那么出发“页缺失”异常,由异常处理代码将所需数据从外部存储(硬盘)读入内存。

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理

简化程序的内容管理

  • 虚拟空间与物理空间都划分成相同大小的内存块(称为页)
  • 每个进程都有其私有的虚拟地址空间
  • 进程虚拟空间映射到物理空间

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
对于一些多进程共享的、只读的数据,可以在物理内存中装一个,然后映射到多个虚存空间中去。

存储保护功能

  • 页表项也记录该页的访问控制信息;
  • 一般由硬件来完成访问控制。

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理

虚存地址转换

命中

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理

页缺失

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
页缺失后,工作流程如上。

页表结构

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
如上,页表结构。
【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
具体的地址的产生如上。

使用快表 TLB 来加速

页表其实在内存中放不下,有时,可能去取页表,导致再读一次磁盘。
【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
将 Page Table 的一个子集 SubSet 放在 TLB 内(CPU 内部,与芯片是同频工作的)。

因此,注意对比,以下是两码事:

  • TLB miss ,地址映射(表项)是否在 CPU 内部的 TLB 内;
  • 页表的 valid ,内容是否在内存上,否在在磁盘上。

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
TLB 结构如上。数据量更小,但是很快。

MIPS 32 处理器的内存管理

x86 是段式内存管理后,再使用段+页式内存管理。

基于TLB实现的MMU

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
MIPS处理器在执行单元和访存部件(包括缓存)间设计了存储管理单元(MMU):

  • 是基于TLB实现的
  • 基本功能是将数据/指令的虚拟地址送到TLB转换成物理地址

在 MIPS 中,TLB其实也是分层的,上面的是 ITLB 与 DTLB ,下面的是 JTLB 。ITLB 与 DTLB 不暴露给软件,是硬件自动实现的。

工作流程

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
其具体的工作流程如上。

MIPS 32 工作模式

  • 用户模式(User Mode):用户模式经常用在应用程序
  • 核心模式(Kernel Mode):核心模式主要用于例外处理和特权操作系统功能(包括CP0管理和I/O设备访问。
  • 调试模式(Debug Mode)*:调试模式主要用于软件调试,经常用在软件开发工具中。

地址转换依赖于处理器的操作模式。在不同模式下,虚拟存储空间的划分是不同的,在将虚拟地址转换成物理地址时必须考虑到操作模式。

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
如上,Unmapped 段:

  • 非映射段不使用TLB进行虚拟地址到物理地址的转换:系统启动后首先进入非映射的存储段是非常重要的(why? 因为这时TLB还没有初始化);
  • Kseg1总是不缓存的(Uncached),Kseg0是否缓存是由CP0的寄存器Config中的k0字段决定。

Mapped 段:

  • 映射段使用TLB进行虚地址和物理地址的转换。
  • 映射段转换是以页为基础的,包含是否能缓存(Cacheable)以及页的保护特性。

用户态

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理

  • 单一的连续2G bytes虚拟地址空间;
  • 系统通过TLB实现访问。在转换前,虚拟地址加上8位ASID(进程标识符)产生一个唯一的虚拟地址。

TLB结构(MIPS 4KC处理器)

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
JTLB:

  • 全相联JTLB映射32位虚拟地址到相应的物理地址。
  • JTLB包括16对奇偶项,每项包含的页的大小从4Kbytes 到 16Mbytes 。

为什么 v*n2 是 19位?而 PPN 是 20位?老师从手册上截了几张图。
【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
一个虚页可以对应两个或多个实页。

操作JTLB:

  • 软件通过TLBWI和TLBWR指令填充JTLB的某个入口
  • 在填充TLB之前,首先用CP0指令更新和TLB相关的CP0寄存器,然后用相关CP0寄存器的内容填充TLB入口的不同字段

ITLB & DTLB :

  • 硬件管理,对软件透明。
  • 如果虚拟地址在ITLB或者DTLB中缺失,则由JTLB在下一个周期处理;后者如果成功,则将相应表项复制到ITLB(或者DTLB)。

虚拟地址到物理地址的详细转换流程

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
不做要求。实验时可能用到。
【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理

相关的异常

TLB缺失和多匹配:如果TLB项没有匹配(TLB缺失),异常发生

  • 软件从驻留在内存中的页表重填TLB。
  • 软件可以写一个选定的TLB项或者利用硬件机制写到一个随机的项里(CP0的Random寄存器选择哪个TLB项用于TLBWR)

通过TLB写比较机制来保证多TLB项匹配不能发生:

  • 在TLB写操作中,要写的v*n2域与TLB中的所有其它项比较。如果有一个匹配发生,处理器引发一个机器检查例外(machine-check exception)

TLB操作指令

【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
一共只有四条。