在步入正题前,我们先来了解几个概念:逻辑地址、线性地址、虚拟地址、物理地址。
逻辑地址(logical address):Intel为了兼容,将远古时代的段式内存管理方式保留了下来。逻辑地址指的是机器语言指令中,用来指定一个操作数或者是一条指令的地址。
线性地址/虚拟地址(linear address/virtual address):跟逻辑地址类似,它也是一个不真实的地址,如果逻辑地址是对应的硬件平台段式管理转换前地址的话,那么线性地址则对应了硬件页式内存的转换前地址。
物理地址(physical address):用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。也许错误的理解更利于形而上的抽像。
相关概念可以参考:[逻辑地址、线性地址、物理地址和虚拟地址](http://www.cnblogs.com/diyingyun/archive/2012/01/03/2311327.html)
下面我们利用bochs说说操作系统的段页式转换:(本文程序在windows下进行)
关于Bochs的配置这里就不赘述,网上有很多教程!
首先在Bochs-2.1.1/linux-0.11-devel-040329下运行run.bat得到
内存调试窗口: