pintos实验多级页表结构的应用
------------由线性地址找物理地址
图中给出了二级表的查找过程。其中CR3寄存器指定页目录表的基地址。线性地址的高10位用于索引这个页目录表,以获得指向相关第二级页表的指针。线性地址中间10位用于索引二级页表,以获得物理地址的高20位。线性地址的低12位直接作为物理地址低12位,从而组成一个完整的32位物理地址。
- 两级页表结构
页表含有220(1M)个表项,而每项占用4Byte。如果作为一个表来存放的话,它们最多将占用4MB的内存。因此为了减少内存占用量,80x86使用了两级表。由此,高20位线性地址到物理地址的转换也被分成两步来进行,每步使用(转换)其中的10bit。
第一级表称为页目录(page directory)。它被存放在1页4K页面中,具有210(1K)个4Byte长度的表项。这些表项指向对应的二级表。线性地址的最高10位(位31~22)用作一级表(页目录)中的索引值来选择210个二级表之一。
第二级表称为页表(page table),它的长度也是1个页面,最多含有1K个4B的表项。每个4B表项含有相关页面的20位物理基地址。二级页表使用线性地址中间10位(位 21~12)作为表项索引值,以获取含有页面20位物理基地址的表项。该20位页面物理基地址和线性地址中的低12位(页内偏移)组合在一起就得到了分页转换过程的输出值,即对应的最终物理地址。
pintos调试分析之文件的载入
----第2关:pintos对ELF文件的载入过程
1.分割
线性地址:0x08048316
BIN:0000 1000 00|00 0100 1000| 0011 0001 0110
HEX:-------20----------------- 48---------------------316
2.查寄存器找基址
Expression输入thread_current()->pagedir 当前进程页目录起始地址0xc010c000(这个值存在页目录寄存器PDBR中,在8086体系中叫CR3)
3.加偏移找页目录项(只取其前20位与偏移量拼接)
0xc010c000+20*4=0xC010 C080
将该值输入Memory Browser中查的目录项内容为0x0010a007
4.加偏移找页表项(只取其前20位与偏移量拼接)
0xc010a000+48*4=0xc010a120
将0xc010a120代入Memory Browser查得页表项内容为0x00281005
5.拼接得最终物理地址
最终物理地址0x00281000+316=0x00281316
标签:表项,20,多级,pintos,物理地址,地址,页表,线性 From: https://www.cnblogs.com/simonbalne/p/16824742.html