保护模式内存管理总结

保护模式内存管理部分,大致分为两大部分,它们分别是分段机制和分页机制。我们知道80386+的系统,地址总线位宽是32位,那么能直接寻址的能力可以达到4G。段寄存器CSDSSS仍然是16位的,如何利用16位的段寄存器来寻址4G的空间呢?这个就是保护模式所要解决的问题。对于实模式,段寄存器中存放的直接是段基址,左移4位后,加上偏移地址就形成了物理地址,送地址总线。因此,在这种模式下,最大的寻址空间是1M。在保护模式下,利用了一种称为段选择符和段描述符的结构来帮助扩大寻址能力。段选择符是16位的,其中最低2位表示请求特权级RPL,第三位是表指示位,表示段描述符是在GDT中还是LDT中的。剩下的13位表示描述符表中的索引。由此可以知道,GDT/LDT最多可以有8192个表项。当断选择符被加载到段寄存器中时,系统也将选择符所对应的段描述符的内容(段基址,断限长以及断属性)加载到段寄存器的影子寄存器部分,作为高速缓存。根据段描述符,我们可以找到段的基地址,将基地址和逻辑地址中的偏移部分相加得到线性地址,如果状态控制寄存器CR0中的PE位置位并且PG位没有置位,那么此时产生的线性地址就是物理地址,送地址总线。但是如果打开了分页机制,即PG=1,那么我们就要再一次进行地址转换。CR3控制寄存器存放着页目录表的基地址,根据这个寄存器的内容,我们可以找到对应的页表。在这样的情况下,线性地址的结构有12位表示的是页内偏移、有10位表示页表索引,另外10位表示页目录表索引。可以从地址结构分析,页表和页目录表分别可以存放在1页的地址空间中,因为每个页表项有4个字节。通过页目录表索引找到对应的页表,通过页表索引,可以找到对应的页面,页面基地址加上线性地址中的页内地址就得到了物理地址。段是以逻辑块作为单位存放的,而页是以固定物理块存放的。分页机制便于内存管理。同时可以减少系统中的碎片。提高内存利用率。但是分页机制同时也会产生页内碎片。页表项中有一个存在位,表明该页是否存在内存中,如果系统开启虚拟内存机制,系统会产生却页中断,将页面调入内存。最后一个概念是页面高速缓存,在CPU内有一个叫做TLB的东西,用于缓存页面,这样,系统首先查找TLB中的页表项,如果存在,就不需要花费总线周期。如果不存在,系统就会把该页面调入TLB中缓存。

你可能感兴趣的:(保护模式内存管理总结)