非连续分配的优点
缺点:
与分段的区别:
一个内存物理地址是一个二元组(f,0)
f------帧号(F位,共有2^F个帧)
o-----帧内偏移(S位,,没帧2^S字节)
物理地址 = f*2^S+o;
例如 16-bit地址空间,9-bit大小的页帧,
物理地址:(3,6)
物理地址= 1542
页内偏移大小=帧内偏移大小
页号大小<>帧号大小
一个逻辑地址是一个二元组(p,0)
p--- 页号(P位,2^P个页)
o---页内偏移(S位,每页有2^S字节)
逻辑地址= 2^S*p+o
页寻址机制:
就是一个大数组:
页表项内容:帧号,标志位
1、一个内存单元需要两次访问
2、页表可能非常大
Key Value
速度快,代价高,记录经常访问的页表项,
当CPU得到逻辑地址,先查CPU中TLB,查不到再查内存中页表。
CPU得到一级页表号以及对应的二级页表号和偏移,从而得到页帧号(物理地址)。
由于一些没有在内存中的页表可以不占用空间,所有想对一级页表会省空间,而相应代价是访问时间提高,配合TLB使用会更好。
由于正常的页表使用时会和逻辑地址大小会有对应关系的,逻辑空间越大,对应页表项越多。
使用反向页表时,会和物理地址空间大小建立对应关系。
页表是由页帧号对应页号。
使用页寄存器:
每个帧和一个寄存器关联,寄存器内容包括:
residence:此帧是否占用
对应页号p
保护位
例子:
物理内存大小:4K*4K = 16MB
页面大小:4k
页帧数:16/4 = 4k
页寄存器使用空间:(假设一个寄存器大小为8byte)
? 8*4k = 32k
页寄存器开销:32k/16m=0.2%
虚拟内存大小:任意
利:
? 转换表的大小相对于物理内存来说很小
? 转换表的大小跟逻辑地址空间大小无关
弊:
? 需要信息对调,即根据帧号可找到页号
? 如何转换为 根据页号找到帧号
? 需要在反向页表中搜索想要的页号
解决方案:
关联存储器
哈希
?
原文:https://www.cnblogs.com/deusjin/p/13210497.html