关于虚拟地址,线性地址,逻辑地址还有物理地址的区分

本文主要是参考Linux0.11内核的32位地址区分,不过于现阶段的64位地址区分差别不太大,理解Linux0.11,有助于理解现阶段的64位体系下地址的概念。 (注意x86体系是小端存放数据)   1,虚拟地址:是由程序产生的**段选择符**和**段内偏移地址**两个部分组成。 因为这两部分都不能直接访问物理内存,要经过分段处理后才可以可能对应到物 理地址上(如果打开分页机制,还需要经过分页才能对应上物理地址),虚拟地 址由选择符(16位):偏移值(32位)组成48位地址。选择符的前13位加上在区 分GDT和LDT1位,因此,共有16384个选择符。则最大的虚拟地址空间为:16384×4G=64T的虚拟地址空间。   2,逻辑地址:是指程序产生的和段偏移相关的偏移地址部分。 在x86体系下是程序执行段限长内的偏移地址,就是虚拟地址去掉选择符的16位 地址所剩下的地址就是逻辑地址。应用程序员一般打交道的地址就是 逻辑地址,比如你打印变量的地址,指针的地址,malloc申请内存地址等。  3,线性地址:是虚拟地址到物理地址的中间层,是处理器可寻址空间的地址。 程序代码会产生逻辑地址,或者说是段内的便宜地址,加上相应的段基址则成为 一个线性地址。如果打开分页机制,还需要在经过一次分页转换才能 到生成物理地址。如果不打开分页机制,线程地址=物理地址。  4,虚拟内存:是指计算机要给呈现出比实际内存大的多的内存量。 它允许运行比实际内存大的多的程序,这使得许多大型项目在有限的资源下得 以实现,在Linux0.11中他给每个进程64M的虚拟内存。因此逻辑地址的范围是 :0x00000000到0x04000000。 

你可能感兴趣的:(linux,内存,分页,内核)