逻辑地址(logical address)
包含在机器语言指令中用来指定一个操作数或一条指令的地址。每一个逻辑地址都由一个段(segment)和偏移量(offset或displacement)组成,偏移量指明了从段开始的地方到实际地址之间的距离。
线性地址(linear)(也称虚拟地址virtual address)
是一个32位无符号的整数,可以用来表示高达4G的地址,也就是,高达4 294 967 296个内存单元。线性地址通常用十六进制数字表示,值得范围从0x0000_0000到0xffff_ffff
物理地址(physical address)
用于内存芯片级内存单元寻址。它们与从处理器的地址的引脚发送到内存总线上的电信号对应。物理地址由32位或64位无符号整数表示。
内存管理单元MMU
MMU是中央处理器中用来管理虚拟存储器、物理存储器的控制线路,同时负责虚拟地址映射为物理地址
MMU本质上是一个表格
– MMU表格一边是CPU发送指令对应的虚拟地址,一边存储的是物理地址
– 虚拟地址转化为物理地址,内存通过物理地址去读取实际的数据
/*回溯历史原因*/
在原始的PC上,程序员编程的时候遇到一个问题
– 程序大于内存
– 当时的解决办法是程序员将程序“分割”成一段一段的,运行的时候CPU先运行一段,然后关闭前一段,再运行下一段。
– 虽然运行的时候,CPU可以自动处理,但是“分割”的工作由程序员完成,很痛苦,很枯燥。
/*回溯历史原因*/
内存管理单元的基本思路
– 数据和堆栈的大小总和可以超过物理存储器的大小,操作系统把当前使用的部分留在内存中,其它的保留在硬盘上。
•内存管理单元——地址范围
– 32位的CPU地址范围是0——2的32次方
– 64位的CPU地址范围是0——2的64次方
如果一台32位的机器有1G内存,它最大可运行4G大小的程序。 – 这台机器首先要有4G的存储空间
/*实例分析*/
CPU读取过程
物理地址------通过分页单元(一种分页单元的硬件电路转换成)------------>线性地址---------->通过分段单元(一种分段单元的硬件电路转换成)--------->逻辑地址
CPU写过程
逻辑地址------通过分段单元(一种分段单元的硬件电路转换成)------------>线性地址---------->通过分页单元(一种分页单元的硬件电路转换成)--------->物理地址