一、CPU段式内存管理,逻辑地址转换为线性地址:
首先,给定一个完整的逻辑地址[段选择符:段内偏移地址],
1、看段选择符的T1=0还是1,知道当前要转换是GDT中的段,还是LDT中的段,再根据相应寄存器,得到其地址和大小。我们就有了一个数组了。
2、拿出段选择符中前13位,能在这个数组中,查找到对应的段描述符,这样,他的Base,即基地址就知道了。
3、把Base + offset,就是要转换的线性地址了。还是挺简单的,对于软件来讲,原则上就需要把硬件转换所需的信息准备好,就能让硬件来完成这个转换了。
二、CPU的页式内存管理,线性地址转为物理地址:
1、从cr3中取出进程的页目录地址(操作系统负责在调度进程的时候,把这个地址装入对应寄存器);
2、根据线性地址前十位,在数组中,找到对应的索引项,因为引入了二级管理模式,页目录中的项,不再是页的地址,而是个页表的地址。(又引入了一个数组),页的地址被放到页表中去了。
3、根据线性地址的中间十位,在页表(也是数组)中找到页的起始地址;
4、将页的起始地址和线性地址中最后12位相加,得到最终我们想要的物理地址;