欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

地址空间

最编程 2024-04-06 20:43:20
...

地址空间是所有可用资源的集合,地址空间可以划分为物理地址空间和虚拟地址空间(也称线性地址空间)。

物理地址空间

硬件平台的组成可以归纳为CPU、内存和其他硬件设备三个部分。CPU是整个硬件平台的主导者,内存和其他硬件设备都是可供CPU使用的资源。这些资源分布在CPU的物理地址空间内,CPU使用物理地址索引这些资源。物理地址的位数由CPU经过MMU(Memory Management Unit,内存管理单元)转换后的外地址总线位数决定,它与CPU的位数没有必然联系。一个硬件平台只有一个物理地址空间。

虚拟地址空间

为了让多个程序能够有效地相互隔离,也为了它们能够有效地使用物理地址空间的资源,引入了虚拟地址空间的概念。虚拟地址空间的大小由CPU的内地址总线位数决定。内地址总线与CPU执行单元相连,内地址总线位数往往与CPU位数一致,如果是32位处理器,它的虚拟地址空间就是4GB。虚拟地址空间的大小与物理地址空间的大小没有必然联系,如Intel PAE平台的虚拟地址空间是4GB,而其物理地址空间为64GB。

虚拟地址空间被映射到某一段物理地址空间或整个物理地址空间。一个硬件平台上可以同时存在多个虚拟地址空间,CPU负责将虚拟地址空间转换到物理地址空间,保证进程能够正确访问到其虚拟地址空间所映射到的物理地址空间。在现代操作系统中,每个进程通常都拥有自己的虚拟地址空间。

二、地址

地址是访问地址空间的索引。在x86架构中有三类地址:逻辑地址、虚拟地址和物理地址。

逻辑地址是程序直接使用的地址。逻辑地址由一个16位的段选择符和一个32位的偏移量(32位平台)构成。逻辑地址可以认为是程序中变量的地址指针,更具体地说,就是逻辑地址的偏移部分,而偏移对应的段选择符位于段寄存器中。

虚拟地址是逻辑地址经内存段管理转换后的地址,用于索引进程的虚拟地址空间。物理地址是物理地址空间的索引,是CPU提交到总线用于访问物理内存或其他硬件设备的最终地址。在x86架构下,物理地址有时也被称为总线地址。通过内存分页管理机制,将虚拟地址转换成物理地址后才能访问物理内存或其他硬件设备。

上述三类地址的关系可以总结为: 逻辑地址经内存分段管理机制转换为虚拟地址,虚拟地址经内存分页管理机制转换为物理地址,最终通过物理地址访问硬件资源。