什么是线性地址?和物理地址的区别是什么呢?
1个回答

386架构里,cpu可以处于实模式和保护模式.

实模式下,cpu指令访问的地址就是物理地址,形式为:段寄存器:偏移

在保护模式下,cpu可以使用分段机制和分页机制.

分段机制下使用的地址就是逻辑地址,形式为:段选择子:偏移

分页机制下使用的地址就是线性地址,形式为:0xXXXXXXXX

无论是逻辑地址还是线性地址,都要被cpu映射成物理地址.

保护模式下必须采用分段机制.在此基础上可采用分页机制.

逻辑地址被转化为线性地址,如果采用分页机制,则该线性地址通过分页机制被映射成物理地址.如果不采用分页机制,则该线性地址就是物理地址.

实模式下的物理地址只能访问1M以下空间,而保护模式下的物理地址可以访问所有32位空间.并且要注意,物理内存空间只是物理地址空间的一个部分而已.

另外还有一个”总线地址“的概念,是从总线设备的角度来说的.

在linux系统里,对cpu来说,物理内存的首地址是从线性地址的0xc0000000开始的.而对总线设备来说,物理内存的首地址可能是从总线地址0x00000000开始,也可能是从另外的总线地址开始,随系统而异.这也是为什么内核里经常有vir_to_phy 和vir_to_bus转换的缘故.

关于物理地址,线性地址和虚拟地址的区别,我只能凭我的理解简单说说,可能不准确.物理地址在什么时候都存在,但是在采用分页技术和虚拟内存技术后,你很难确定物理地址在那里,所以建议在实模式下采用物理地址和线性地址形式,这时候物理地址和线性地址其实是一致的.最常用的,比方说,计算机启动后的地址是0xfff0:0000,装载BIOS,然后转移到0x07C0:0000,所以总可以设置一个物理断点0x7C00,开始调试你的bootloader.