linux x64 分页
以代码段为例 intel 32位(64bit long mode 下 分段被禁用,内存完全平坦)
逻辑地址(logical address) 表示 selector:offset
- selector: cs 寄存器的值
- offset: EIP 值
linear address = segment base address(段基址) + offset(段内偏移)
段基址 = GDT(全局描述符表).selector
接上面把 linear addr 切 4段(对应下面的3级分页模型)
EIP 寄存器的值,或者等同于逻辑地址的offset
内核将所有段基址设成0,段限长到最大值(涉及段描述符结构,理解成地址总线最大寻址限度),导致所有段重合,即不分段,
于是虚拟地址和线性地址值就相等了
linux采用了一种同时适用于 32 位和 64位系统的普通分页模型
- 页全局目录 page global directory = 9 bit
- 页上级目录 upper = 9 bit
- 页中间目录 middle = 9 bit
- 页表 page table = 9 bit
高16位符号扩展,没有使用。普通页大小仍为 4K,然而数据却占64位,所以4K页在x64下只能包含 4K/64b = 512 项内容,
为了保证页对齐和以页为单位的页表内容换入换出,在x64下每级页表寻址部分长度定位9位
- 2 级页表
没有启动物理地址扩展的 32 位系统, upper 和 middle 全 0
- 3 级
启用扩展的32位系统,取消 upper
- x64
3 级还是4级取决于硬件对线性地址的位划分
在Intel中使用 MAXPHYADDR
来表示最大的物理地址,我们可以通过CPUID的指令来获得处理支持的最大物理地址,然而这已经不在此次的讨论范围之内,我们需要知道的只是:
- MAXPHYADDR 为36位
在Intel平台的桌面处理器上普遍实现了36位的最高物理地址值,也就是我们普通的个人计算机,可寻址64G空间;
- MAXPHYADDR 为40位
在Inter的服务器产品和AMD 的平台上普遍实现40位的最高物理地址,可寻址达1TB;
- MAXPHYADDR为52位
这是x64体系结构描述最高实现值,目前尚未有处理器实现。
当MAXPHYADDR为36位时,上一级table entry的12 ~ 35位提供下一级table物理基地址的高24位,此时36 ~ 51是保留位,必须置0,低12位补零,达到基地址在4K边界对齐
将线性地址转换为物理地址,借助 MMU (Memory Manage Unit)
如果MMU存在且启用,CPU执行单元产生的地址信号在发送到内存芯片之前将被MMU截获,这个地址信号称为虚拟地址(virtual address),简称VA,
MMU会负责把VA翻译成另一个地址,然后发到内存芯片地址引脚上,即VA映射成PA,如下图:
MMU 在一次虚拟地址转换转换到物理地址的过程中,会查询多次页目录和一次页表(比如上面4级就一共4次),
但如果MMU每次地址转换都到位于外部内存的页上查找PTE,转换速度就会大大降低,于是出现了 TLB
TLB (Translation Lookaside Buffers)即转换快表,又简称快表,可以理解为MMU内部专用的存放页表的cache,
保存着最近使用的PTE乃至全部页表。MMU接收到虚拟地址后, 首先在TLB中查找,如果找到该VA对应的PTE就直接转换,
找不到再去外存页表查找,并置换进TLB。TLB属于片上SRAM,访问速度快,通过TLB缓存PTE可以节省MMU访问外存页表的时间,
从而加速虚实地址转换。TLB和CPU cache的工作原理一样,只是TLB专用于为MMU缓存页表。
x86
- 0x0 到 0xbfff ffff 的线性地址,无论进程中用户态还是内核态都可以寻址
- 0xc000 0000 ~ 0xffffffff
x64
地址 | 空间 |
---|---|
0x0 ~ 0x0000,7ffff,ffff,ffff = 128TB | 用户空间 |
0xffff,8000,0000,0000 ~ 全F = 128TB | 系统空间 |
线程能共享进程的各种变量,如果线性地址相同,那么 cr3 也要相同?
Linux 线性地址,逻辑地址和虚拟地址的关系?
https://www.zhihu.com/question/29918252
Linux x86_64与i386区别之 —— 内存寻址
https://blog.csdn.net/yunsongice/article/details/5821734
x64 结构体系下的内存寻址
http://www.cnblogs.com/lanrenxinxin/p/4735027.html
硬件篇之MMU
https://blog.csdn.net/ipmux/article/details/19167605
[校招面试]Linux拓展知识列表彻底打动面试官拿下心仪Offer
https://www.jianshu.com/p/6b79f6c61098