反向页表:顾名思义,以页帧号为index,页号地址为value,每次访问将value和逻辑地址比对,这样做的原因就是大大节省了内存的开销,全局只需要一张页表,但是当物理内存特别大的时候,这个表也就很大了,访问一个地址可能需要遍历整个表(因为是按照物理地址建立的,所以要挨个访问、判断),那么有什么方法是可以缓减访问速度的压力吗,那就是基于hash表的访问
来看两张图片(引用自网络)
首先是不用hash表的反向页表
很明显,由于访问查找的比对是根据页号,而index是页帧号(ppn),所以只能从第一个页帧号开始,一个一个做比对(PID是当前进程的标识),速度较慢
再来看看用了hash表的反向页表
hash表的作用:
将页号即图中的vpn做一个hash计算(使用硬件加速),结果当然是得到一个页帧号,也就是反向页表的index,但是这样可能会存在hash冲突,因此在传参的时候需要传入当前进程的PID作为标识,以确保找到对应的页帧号,NEXT中存放的是由于hash冲突导致的相同hash值的下一个条目的index(页帧号),这样就不需要一个一个进行比对了。如图,0x1经过计算得到0x0,因此去访问反向页表的index为0x0这个条目,比对之后发现PID不对,因此访问NEXT,找到相同hash值的下一个条目......找到之后,index+offset即为物理访问地址