端到端的地址翻译
高速缓冲存储器(假设CPU与主存之间只有一个高速缓存)
一般结构
考虑一个计算机系统物理地址有m位,形成M = 2m个不同地址。如图(a)所示,一个机器的高速缓存被组织为S = 2s个高速缓存组。每行包括一个B = 2b字节的数据块和一个有效位(该行内数据是否依然有效,即若有效位为0,该行就不能读取行内数据但是可以存入数据块)、一个标记位(大小为t = m - s - b)。
- 直接映射高速缓冲存储器:每组只有一行
- 全相连高速缓冲存储器:只有一组
- E路组相连高速缓冲存储器: 每组E行
地址翻译(考虑一个字节)
如图(B)
- S:组号
- T:标记位,同一组中区分不同行
- B:块偏移,目标行内的偏移量
当且仅当该行的标记位与地址中标记位相同且设置了有效位,该行内才存在目标字节
如若不命中则去下一层次的存储器中寻找
虚拟内存
虚拟内存是抽象概念,是CPU操作的地址对象
虚拟内存地址并不是对应着磁盘中的内存地址
地址空间
地址空间:一个非负整数地址的有序集合。
一个数据对象可以有多个独立的地址,这些独立的地址来自于不同的地址空间。(同一个数据对象在不同的地址空间中有着不同的地址)
页表
页表作为翻译虚拟地址的工具存储在主存中,每一个虚拟地址对应着一个页表条目,一个条目包括一个有效位(若为1,则该虚拟页已被缓存在内存),和一个地址区域(若该区域为空,则代表该虚拟地址尚未被分配,若有效位为1,则表示物理页号,若有效位为0,则表示磁盘地址)
为了提高寻址速度,在CPU中存在一个TLB(翻译后备缓冲器),可类比于高速缓冲存储器理解,TLB作为主存中的页表在CPU中的缓冲。
虚拟页号 = TLB标记位 + TLB索引位(因每一行中只存一个页表条目,所以不需要偏移位)
地址翻译
虚拟地址 = 虚拟页号 + 虚拟页偏移
物理地址 = 物理页号 + 物理页偏移
一个虚拟页或物理页表示一个数据块,因为页作为不同存储器之间传输的单位,所以很容易理解,虚拟页大小于物理页大小一致。所以地址翻译时,两者之间的页偏移是一致的。
端到端的地址翻译
如若页表中标记位为0(页表不命中),则触发故障异常,将会到磁盘中寻找目标数据,将其替换到内存,然后回到触发异常的位置继续执行。