Linux下逻辑地址、线性地址、物理地址(系列三:总结)

转载:Linux下逻辑地址、线性地址、物理地址详细总结

转载原因:通俗易懂,逻辑清晰。

分析linux内存管理机制,离不了上述几个概念,在介绍上述几个概念之前,先从《深入理解linux内核》这本书中摘抄几段关于上述名词的解释:

一、《深入理解linux内核》的解释

1. 逻辑地址(Logical Address) 

       包含在机器语言指令中用来指定一个操作数或一条指令的地址(有点深奥)。这种寻址方式在80x86著名的分段结构中表现得尤为具体,它促使windows程序员把程序分成若干段。每个逻辑地址都由一个段和偏移量组成,偏移量指明了从段开始的地方到实际地址之间的距离。

2. 线性地址(linear address)(也称虚拟地址 virtual address)

       是一个32位无符号整数,可以用来表示高达4GB的地址,线性地址通常用十六进制数字表示,值的范围从0x00000000到0xffffffff。

3. 物理地址(physical address)

       用于内存芯片级内存单元寻址。它们与从微处理器的地址引脚按发送到内存总线上的电信号相对应。物理地址由32位或36位无符号整数表示。(其实这个最好理解,就是实实在在的地址)

       (PS:在下面的解释就可以看到,有时也将逻辑地址看做虚拟地址,但是《深入理解linux内核》中将线性地址看做虚拟地址)

二、总结

CPU将一个虚拟内存空间中的地址转换为物理地址,需要进行两步:首先将给定一个逻辑地址(其实是段内偏移量,这个一定要理解!!!),CPU要利用其段式内存管理单元,先将为个逻辑地址转换成一个线程地址,再利用其页式内存管理单元,转换为最终物理地址。

线性地址:是CPU所能寻址的空间或者范围。
物理地址:是机器中实际的内存地址。换言之,是机器中的内存容量范围。
逻辑地址:是对程序而言的。一般以Seg:Offset来表示。(程序员自己看到的地址)
因此,若要确实比较三者的话,应有以下关系:线性地址大于等于物理地址(PS:但二者的地址空间是一样的),而逻辑地址大于线性地址。逻辑地址通过段表变换成线性地址,此时如果并未开启分页机制的情况下,逻辑地址直接转换成CPU所能寻址的空间。若已开启则通过页表完成线性地址到物理地址的变换。
因此,三者最准确的关系是:逻辑地址通过线性地址完成物理地址的映射,线性地址在三者之中完全是充当"桥"的作用。

猜你喜欢

转载自blog.csdn.net/don_chiang709/article/details/89153008