虚拟存储器
概述
虚拟存储器是建立在主存与辅存物理结构基础之上,由附加硬件装置以及操作系统存储管理软件组成的存储体系。
作用:解决主存容量不足的问题,为程序员提供比主存空间大的编程空间。
虚地址和实地址
虚拟地址(又称逻辑地址)
| 虚页号 | 页偏移量 |
|---|---|
| 与页表项数相关 | 与物理页大小相关 |
MMU Memory Management Unit
管理虚拟存储器和物理存储器的一个硬件,页表基址寄存器在MMU中
页式虚拟存储器

主存和外存统一分页后进行管理
页表 Page Table
虚地址到实地址的变换是由页表(Page Table)实现的,页表存储在主存中。对应的每一个虚页号有一个表目(Page Table Entry),页表是页表项的集合。
| 虚页号 | 有效位 |实页号|
|--|--|--|--|
| 0000 | 1 |0101|
|0001|1|1011|
|...|...|...|
有效位为1表示虚页对应的数据都已调入主存
有效位为0表示虚页对应的数据未调入主存
作用:记录虚地址页号与实地址页号的对应关系,即虚页面调入主存时被安排在主存中的位置(实页号)
页表基址寄存器
记录页表在主存中的起始地址
PTE的地址 = 页表基址 + 页号 × PTE的字节数
实页和虚页
页式管理系统的信息传送单位是定长的页,主存的物理空间也被划分为等长的固定区域,称为页面。
| 虚页 (逻辑页) | 虚拟空间分成的页 |
| 实页 (物理页) | 实际空间分成的页 |
假设主存页大小为4K,虚存大小为4GB
4K= 212,4GB = 232B ,则有:
页内偏移量 = log2212 = 12位
虚拟页号 = log2232 - 12 = 20位,对应的页表有1024*1024项
TLB Translation Lookaside Buffer
把页表中最活跃的部分存放在一个小容量的高速存储部件中组成TLB(Translation Lookaside Buffer),以减少访问主存次数,提高运行速度。

TLB是PT的子集
例
某计算机的虚拟存储系统有40位虚拟地址,32位实际地址,虚页1M。假定有效位,保护位,修改位和使用位共用去四位,所有虚页都在使用。计算页表大小和页面大小。
解:
因为虚拟存储系统有40位虚地址,32位实地址,虚页为1M,所以页内地址为 = log2220 = 20
| 31 - 20 | 19 - 0 |
|---|---|
| 物理页号(12位) | 页内地址(20位) |
| 39 - 20 | 19 - 0 |
|---|---|
| 虚页面号(20位) | 页内地址(20位) |
页表的字长 = 物理页号位数 + 有效位、保护位、修改位和使用位共4位 = 16位。
页表的单元数 = 1M (220)
页表大小 = 1M × 16
页面大小 = 1M
段式虚拟存储器

段表

段是利用程序的模块化性质,按照程序的逻辑结构划分成的多个相对独立的部分(代码段,数据段等)。段作为独立的逻辑单位可以被其他程序段调用,形成段间连接,产生规模较大的程序。一般用段表来指明各段在主存中的位置。
为了将虚地址转换为实地址,操作系统将创建一个段表,包括:段号,段基址,段长,装入位
段页式虚拟存储器

每个程序按逻辑模块分段,段内再分页,页面大小和内存页面相同。操作系统创建两表:段表、页表。
段和页结合的存储管理系统。程序按模块分段,段内再页,主存仍以页为信息传送单位,用段表和页表进行两级管理。
虚地址格式
| 段号 | 页号 | 页内地址 |
|---|
实地址格式
| 页号 |页内地址|
|--|--|--|
先查段表,得到页表实地址;再查页表,得到主存实页号
在地址映射过程中需要查两次表,速度较慢
例题
32位的处理器支持的最大的虚拟空间___4GB____
32位处理器有32根地址线,可寻址的虚拟空间大小为232 bytes = 4GB

浙公网安备 33010602011771号