【Computer Organization笔记21】虚拟存储器:段式存储,页式存储

本次笔记内容:
P43 计算机组成原理(43)
P44 计算机组成原理(44)

我的计组笔记汇总:计算机组原理成笔记

视频地址:计算机组成原理 清华大学刘卫东 全58讲 国家精品课程 1080P 更完

幻灯片见我的 GitHub 仓库:计算机组成原理 src/slides

本节课幻灯片:组成原理34 vm.pptx

内容提要

  • 虚拟存储器的目的:给所有程序提供相同的虚拟地址空间,方便操作系统,链接器装载器设计;给程序员提供比实际主存大得多的地址空间
  • 虚拟存储器的管理:段式管理、页式管理、段页式管理
  • 段页式管理的地址映射
  • x86的虚拟存储管理

《Orange’s 自己动手写操作系统》第三章

存储管理

单道程序:

  • 单一用户程序使用计算机资源
  • 操作系统进行简单管理

如上,

多道程序:

  • 操作系统及若干用户程序同时运行
  • 程序员编程使用的空间与程序运行空间相互独立
  • 操作系统对存储进行管理
    • 地址空间转换和映射
    • 内存共享
    • 内存保护
  1. 程序员编程时需要知道存储空间的使用情况;
  2. 无法实现存储空间的复用。

存储容量需求

应用需求:

  • 海量数据处理
    • 天气预报、地震预测、石油勘探…
  • 多媒体信息处理
    • 语音、图形、图象…

软件需求:

  • Nathan软件第一定律:软件是一种可以膨胀到充满整个容器的气体。

技术需求:

  • 多进程、多道程序

给程序员一个比实际内存大得多的编址空间。

提高存储器容量

两个思路。

降低主存储器成本,在同样成本下,可以获得更大的主存容量。

  • 主存的价格到今天也是依然比较昂贵
  • 程序对主存的“胃口”的增加和主存价格的降低速度几乎一样的快。

采用虚拟存储器

  • 只在确实需要的时候才把程序和数据装入到主存中
    • 交换的粒度
    • 地址转换
    • 共享及保护

虚拟存储器

  • 提供一种容量非常大的存储器
    • 多个任务所需存储器的总和大于实际存储器空间
    • 单个程序的地址空间超过了实际存储器
  • 使得可利用的物理存储器得到更好地利用
  • 简化存储器的管理
  • 地址空间:
    • 虚拟地址:程序员编程使用的地址
    • 虚拟地址空间:虚拟地址的集合
    • 存储器地址:物理存储器的地址,也称物理地址(Physical Address)或实地址(Real Address)
    • 逻辑地址:程序员使用的地址

独立的逻辑地址空间

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储
通过页表将虚地址转换为实地址。

实现内存的保护

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储
页表中存放有访问权限:通过硬件来保证权限(操作系统的“陷阱”操作)。

虚拟存储器的目的

  • 容量:获得运行比物理存储器更大空间程序的能力
  • 存储管理:内存的分配以及虚实地址转换
  • 保护:操作系统可以对虚拟存储空间进行特定的保护. . .
  • 灵活:程序的某部分可以装入主存的任意位置
  • 提高存储效率:只在主存储器中保留最重要的部分
  • 提高并行度:在进行段页替换的同时可以执行其它进程
  • 可扩展:为对象提供了扩展空间的能力

虚存与Cache的比较

虚存 Cache
“主存——辅存层次”,主要目的是解决存储容量的问题。 Cache主要目的是解决存储速度问题,使存储器的访问速度不太影响CPU的运行速度。
单位时间内数据交换次数较少,但每次交换的数据量大,达几十至几千字节。 单位时间内数据交换的次数较多,每次交换的数据量较小,只有几个到几十个字节。
克服存储容量的不足 解决主存储器与CPU性能的差距
获得对主存储器管理的便利 获得最小粒度的访问
由操作系统管理 由硬件实现

虚拟存储器管理

  • 逻辑地址与物理地址的对应关系:逻辑地址与物理地址如何转换
  • 主存和辅助存储器数据交换
    • 进行数据管理和调度
    • 提高命中率
    • 保护和共享

分为:

  • 段式存储管理
  • 页式存储管理

段式存储管理

段(Segment):

  • 程序模块化设计的结果
  • 过程、函数、数组、…
  • 逻辑上相对独立
  • 共享和保护的最小单元

段式存储管理:

  • 以段作为存储管理的对象
  • 容易实现共享、保护
  • 容易产生碎片

段式存储管理的实现

设置段表进行管理:

  • 段表基地址
  • 段起始地址
  • 段长
  • 装入位
  • 保护、共享等标志

段式管理地址转换

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储

  • 段的分界与程序和数据的自然分界相对应
  • 易于编译、管理、修改和保护,便于多道程序共享
  • 段长动态可变
  • 段起点、终点不定
  • 空间分配困难,容易产生碎片

用户来决定、上层应用程序来决定,不太靠谱,因此引出页式存储管理。

页式存储管理

  • 将主存和虚存划分为固定大小的页
  • 以页为单位进行管理和数据交换
  • 虚地址=虚页号+页内地址
  • 实地址=实页号+页内地址
  • 通过页表进行管理
    • 页表基地址寄存器
    • 实页号
    • 控制位

页表内容和页式管理

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储
在主存中,有设置页表,完成虚地址与实地址之间的转换。

页表大小跟谁相关?跟虚页号相关直接。

页表大小

页表大小与虚页数直接相关,但是:

  • 虽然理论上每个进程的逻辑空间很大,但其实大部分应该是不活跃的
  • 实际调入到内存的内容不可能超过物理存储空间

如何减少页表本身所占的空间?

  • 而且还要实现简单
    • 页表访问频繁

两种途径:

  • 层次页表(hierarchical page table)
  • 反转页表(inverted page table)

页式虚拟存储器的访问过程

  1. 得到程序给出的虚地址;
  2. 由虚地址得到虚页号;
  3. 访问页表,得到对应的实页号;
  4. 若该页已在内存中,则根据实页号得到实地址,访问内存;
  5. 否则,启动输入输出系统,读出对应页装入主存,再进行访问。

增加由硬件实现的快表,提高访问速度。

给页表专门做一个 ‘Cache’ ,叫做快表。

页表内容和页式管理

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储

转换旁路缓冲(TLB)

访问频繁:速度是第一位的

TLB 缺失将造成:

  • 流水线停止
  • 通知操作系统
  • 读页表
  • 将表项写入 TLB
  • 返回到用户程序
  • 重新访问

因此,应尽量减少缺失:

  • 多路组相连
  • 再尽量提高TLB的容量

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储
和普通 cache一样, TLB 可以组织成全相连,组相连或直接映射方式。

TLBs 通常为容量较小,甚至在高端计算机上也一般不超过128 - 256 个表项。

这样,可以使用全相连映射方式。在大多数中档计算机上,一般采用N路组相连映射方式。

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储

页面大小的选择

  • 减少内部碎片
  • 缩小页面大小可以减少内部碎片
  • 但是:需要更大的页表
  • 趋势:增大页面大小
    • RAM价格下降,内存储器容量增大
    • 内存和外存性能差距增大
    • 程序员需要更大的地址空间
  • 目前:页面大小为4K左右? (1MB, 2MB, 4MB, 1GB)

页面替换算法

最近最少使用(LRU):将页帧按照最近最多使用到最近最少使用进行排序,再次访问一个页帧时,将该页帧移到表头,替换时将表尾的页帧换出。(由程序局部性,使用 LRU ;并且,该算法是在软件层面的实现

一点改进:替换出其中一个“干净”的页帧。

地址转换

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储

页失效处理

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储

段页式虚拟存储管理

是段式虚拟存储器和页式虚拟存储器的综合。它先把程序按逻辑单位分为段再把每段分成固定大小的页。操作系统对主存的调入调出是按页面进行的,但它又可以按段实现共享和保护,可以兼取页式和段式系统的优点。其缺点是需要在地址映射过程中多次查表。其地址映射通过一个段表和一组页表来进行。

x86的虚存管理

不分段也不分页模式:在这种模式下,虚拟存储的地址空间和物理存储空间大小相同,可以用在复杂度较低但对性能有较高要求的场合。

页式管理模式:这种模式将主存分成固定长度的页,通过页进行存储保护和管理。

段式管理模式:段式管理模式按程序本身的逻辑段来划分主存空间,与页式管理相比,段的长度可变。

段页式管理模式:为了兼容旧的模式,在x86中段式内存管理和页式内存管理都是支持的。程序地址首先经过段式内存转换,再通过页式内存转换,最终转换为物理地址。

32位x86虚实地址的转换

虚地址(逻辑地址):程序员给出的虚拟地址,格式为段号+段内偏移(16位+32位),每段大小不超过4GB,一共不超过2的14次方段。(段号中有两位用来表示段优先级)

实地址:32位的实际内存地址。

段号和段表的格式

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储

段地址转换

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储

两级页表

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储

分页机制

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储

x86逻辑地址转换

【Computer Organization笔记21】虚拟存储器:段式存储,页式存储

虚拟存储器

  • 虚拟存储器:提高程序员可以使用的地址空间大小。由操作系统进行管理。
  • 管理模式:段式、页式、段页式。
  • 虚实地址转换。
  • 使用快表提高地址转换的速度。