为了更加有效的管理存储器并且少出错,现代操作系统提供了一种对主存的抽象,叫做虚拟存储器。虚拟存储器是被应用程序所意识和使用的。也就是说,它是被抽象出来的,虚拟出来的主存。所以,从应用程序的层面,程序看到的和使用的虚拟地址都是属于虚拟存储器的。虚拟存储器充当一种中间转换的角色,把虚拟地址对应的主存转换到真实的主存上面。
如图:
虚拟存储器是不存在的,是虚拟出来的,如程序文件段,它是对应在磁盘上程序文件所在位置的代码段的,主存中可能存在着一部分或全部的缓存。运行时堆段对应着磁盘上的swap区,主存中可能存在着一部分或全部的缓存。所以,虚拟存储器也可以说对程序段的组织,当需要访问时,再到主存或者虚拟存储器指向的真正位置去取。
虚拟存储器的作用:程序使用虚拟寻址,物理内存使用物理寻址。
程序执行是产生一条虚拟地址,通过MMU(内存管理单元),转换为物理地址,使用该物理地址访问物理内存,取得数据。地址空间包括虚拟地址空间和物理地址空间。假如一个存储器的容量是N=2n字节,那么他有N个地址,n位的地址空间。
CPU产生的地址是虚拟地址,属于虚拟地址空间。现代系统有32位和64位地址空间,这个地址空间就是虚拟地址空间。
物理地址空间是用来寻址物理内存的。
地址空间的概念很重要,它清楚的区分了数据对象(字节)和它们的属性(地址)。那么可以将其推广,允许每个数据对象有多个独立的地址,其中每个地址都选自一个不同的地址空间。这也是虚拟存储器的基本思想。
缩写解释:
VA:虚拟地址
VPN:虚拟页号
PTE:页表项
PTEA:页表项地址
PA:物理地址
DATA:数据
MMU:内存管理单元
TLB:地址翻译缓冲器
设置存储器层次结构主要是为了缓存低速的存储器。主存是对磁盘等设备的缓存,cache是对主存的缓存,tlb是对主存页表的缓存。
寻址方式:
主存和磁盘之间缓存的单位是页。页的大小默认是4k,也有大页2M,甚至1G的,关于大页的讨论,以后再写文章讨论。也就是说,主存缓存磁盘内容是页大小的整数倍,那么页的基地址的最后12位必然是全0的。
cache的访问速度是主存的10倍,主存的访问速度是磁盘(机械)的100000倍。所以,缺页的代价是严重的,所以主存对磁盘的相联方式采用全相联的方式,即磁盘上的一页可以放到主存的任意一页中。并且因为访问磁盘的时间很长,主存总是采用写回的方式,而不是直写。TLB种类:
在X86体系的CPU里边,一般都设有如下4组TLB:
说明:
L2统一TLB:Second-level Unified TLB(4-Kbyte Pages),通常称为STLB,是i7在原TLB上专门增加的又一级更大的512条目的TLB cache,这样的话TLB的缓存就不用缓存在cache系统中了,而是缓存在STLB中。当TLB和STLB都不明中的时候,MMU会把主存中的相关页表项缓存在STLB中,而非L1、L2、L3cache系统中。Table 1. Characteristics of the Caches, TLBs, Store Buffer, and
Write Combining Buffer in Intel 64 and IA-32 Processors
Cache or Buffer |
Characteristics |
||
Trace Cache1 |
• Pentium 4 and Intel Xeon processors (Based on Intel NetBurst® microarchitecture): 12 Kìops, 8-way set |
||
L1 Instruction Cache |
• Pentium 4 and Intel Xeon processors (Based on Intel NetBurst microarchitecture): not implemented. |
||
L1 Data Cache |
• Pentium 4 and Intel Xeon processors (Based on Intel NetBurst microarchitecture): 8-KByte, 4-way set |
||
L2 Unified Cache |
• Intel Core 2 Duo and Intel Xeon processors: up to 4-MByte (or 4MBx2 in quadcore processors), 16-way set |
|
|
L3 Unified Cache |
• Intel Xeon processors: 512-KByte, 1-MByte, 2-MByte, or 4-MByte, 8-way set associative, 64-byte cache line |
|
|
Instruction TLB |
• Pentium 4 and Intel Xeon processors (Based on Intel NetBurst microarchitecture): 128 entries, 4-way set |
|
|
Data TLB (4-KByte |
• Intel Core i7, i5, i3 processors, DTLB0: 64-entries, 4-way set associative. |
|
|
Instruction TLB |
• Intel Core i7, i5, i3 processors: 7-entries per thread, fully associative. |
|
|
Data TLB (Large |
• Intel Core i7, i5, i3 processors, DTLB0: 32-entries, 4-way set associative. |
|
|
Second-level Unified |
• Intel Core i7, i5, i3 processor, STLB: 512-entries, 4-way set associative. |
|
|
Cache or Buffer |
Characteristics |
|
说明:
VPN和VPO的翻译是同步进行的,在用VPN查找页表中对应的PPN的同时,用VPO(12位)查找L1 cache(6+6位)取得其中的标记,再用PPN和标记比较,检查是否命中。