《深入理解linux内核》边读边说-内存寻址(一)
内存地址
内存地址有三种类型:逻辑地址,线性地址,物理地址。
逻辑地址:常见程序所表示的地址就是逻辑地址。比如MS-DOS程序设计时使用DS:EAX,CS:IP等地址都是逻辑地址。此类地址把地址分为段偏移的模式来把程序分为若干段。在逻辑地址层面上可以把内存看为若干个段来分开的空间。
线性地址:线性地址是32位整数。是逻辑地址通过分段单元转换后的结果。在线性地址上可以把内存看为0×00000000到0xfffffff的线性空间。
物理地址:芯片级寻址用的地址。与地址总线上的电信号对应。
刚开始突然接触三种地址有点晕,可以这么理解:
比如把内存比喻成几本书落在一起。
逻辑地址的模式是,第X本书的第Y页的内容。
线性地址的模式是:从头数,第XX页的内容。
物理地址的模式是:从头开始测量第N毫米的页的内容。
虽然这种比喻在后面的说实际工作模式的时候会发现不太正确。但是现在对于理解三种地址还是有些帮助的。
CPU和内存真正进行数据交换的时候需要使用物理地址,而一般程序所使用的是逻辑地址。可能会有疑问为什么会进行两次转换,而不是一次转换搞定的策略,这个问题在接下来的分析中会浮出水面。
