关于“物理地址=段基址x16+段内偏移地址”

以8086为例。
1、段基址和段内偏移地址都是16位(8086仅有16位数据总线);物理地址是20位(8086有20位地址总线)。
2、由于段内偏移地址是16位,所以每个段最大2^16,即0xFFFF。
3、段基址也是16位的,它放在一个20位的数据中,则低4位一定为0。

4、公式中以十进制的眼光看,确实不好理解,然则以十六进制看,再结合下图,就易懂了

00000  |---------|
              |           |
0FFFF  |_____|
10000  |            |
              |            |
1FFFF  |---------|

以10000-1FFFF为例,段基址是1000,左移4位即成了10000,加上16位的偏移地址,正好形成10000-1FFFF间的某个物理地址。


注意:实模式下,段寄存器存的是段基址,以上公式直接得到物理地址,但是在保护模式下,段寄存器内存放的是段选择子,

用段选择子到段描述符表中取得段基址,再加上偏移地址,得到的是线性地址(段式内存管理),还不是物理地址,线性地址被划分为4k的页,

页面再映射到物理地址(页式内存管理),注意连续的页面映射在物理地址上可以是不连续的,具体可参考《Linux内核源代码情景分析》第31页和33页。

你可能感兴趣的:(计算机基础)