linux x86内存管理学习总结

linux x86内存管理学习总结

ID:5351917

大小:403.22 KB

页数:28页

时间:2017-12-08

linux x86内存管理学习总结_第1页
linux x86内存管理学习总结_第2页
linux x86内存管理学习总结_第3页
linux x86内存管理学习总结_第4页
linux x86内存管理学习总结_第5页
资源描述:

《linux x86内存管理学习总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Linux(x86)内存管理学习总结吴发松2012.6.15硬件基础(x86)•8个通用寄存器–EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI–AX,BX,CX,DX,BP,SP,SI,DI–AH,BH,CH,DH/AL,BL,CL,DL•6个16位的段寄存器–CS,DS,SS,ES,FS,GS•指令指针寄存器和标志寄存器–EIP–EFLAGS•控制寄存器–CR0:机器状态字–CR1:intel保留–CR2:页故障地址–CR3:页目录地址•系统地址寄存器–全局描述符表寄存器–中断描述符表寄存器–局部描述符表寄存器–任务状态寄存器

2、•其它–调试寄存器–测试寄存器地址的转换•相关概念–虚拟地址–线性地址–物理地址•实模式下的地址转换–段地址:段内偏移•保护模式下的地址转换–MMU把虚拟地址转换成物理地址分段机制•作用:把虚拟地址转换成线性地址•段描述符表–全局描述符表–中断描述符表–局部描述符表•段描述符(8字节)–段基地址:32位–段界限:20位–段属性:12位•段选择符分页机制•作用:把线性地址转换成物理地址•页的大小:4k•页表–物理页面基地址–页的属性•页表项–用低12位表示页的属性(4k=2∧12),则32位的页表项恰好可以表示页的映射关系下级页表或物理页面的基地

3、址属性多级页表•如果不分级,则:–4GB的线性地址空间可以划分为1M个4KB大小的页;即,页表中有1M个页表项。•二级页表:–即把1M个页表项组成的“大”页表,划分成1K个“小”页表,每个表中有1K个页表项。–这样32位的线性地址就被划分成如下结构:页目录页页内偏移•n级页表:–以此类推线性地址到物理地址的转换•二级页表:扩展分页•页的大小为4M•32位的线性地址划分为:–目录域:高10位–页内偏移:低22位Linux的分页机制(2.4.x)•三级分页–页目录–中间目录–页表虚拟地址空间•相关概念–虚拟内存:32位系统上,每个进程都拥有4GB的

4、虚拟地址空间–内核空间:0xC0000000~0xFFFFFFFF–用户空间:0x00000000~0xBFFFFFFF内核空间到物理内存的映射•从物理地址0x00000000开始映射•物理地址和虚拟地址之间有一个偏移:PAGE_OFFSETLinux对物理内存的描述•UMA和NUMA–UMA的重要特征:整个物理内存都是均匀的,CPU访问这个空间中的任何地址所需要的时间都相同。•存储节点–访问时间相同的存储空间叫一个“存储节点”•页面的数据结构–系统在初始化阶段根据系统的内存大小建立一个page结构的数组mem_map,数组的下标就是内存中物理

5、页面的序号•内核的内存管理区Zone–ZONE_DMA(<16M):专供DMA使用–ZONE_NORMAL(16M~896M)–ZONE_HIGHMEM(>896M):高端内存区理解内核的高端内存区•内核在0xc0000000~0xffffffff,大小为1G的逻辑地址空间内运行,但真正的物理内存可能大于1G,即,不可以把所有的内核地址空间按“逻辑地址=物理地址+0xc0000000”的方式简单的和物理地址建立映射,因为那样的话,内核将无法访问超过1G的物理内存。•X86的解决方法是把内核的地址空间划分为3个区,即:–ZONE_DMA16M–Z

6、ONE_NORMAL16~896M–ZONE_HIGHMEM896M~1G•前两个区和物理地址建立简单的映射关系:“逻辑地址=物理地址+0xc0000000”•ZONE_HIGHMEM区128M的地址空间则“预留”出来,以便根据需要用它来映射896M以上的物理内存,达到“内核可以访问所有物理内存”的目的。•可以这样理解:“高端内存”不仅仅是内核逻辑地址空间中的概念,也确实是对应着物理内存中的高端内存。Linux高端内存区的划分•内核将高端内存划分为3部分,对应3种不同的映射方式:–非连续映射区:VMALLOC_START~VMALLOC_END

7、–永久内核映射区:PKMAP_BASE~FIXADDR_START–临时映射区:FIXADDR_START~4G永久内核映射•使用一个专门页表,pkmap_page_table–Pte_t*pkmap_page_table;•大小为LAST_PKMAP,通常为4M–#ifdefCONFIG_X86_PAE–#defineLAST_PKMAP512–#else–#defineLAST_PKMAP1024–#endif•映射的线性地址从PKMAP_BASE(0xfe000000)开始•Kmap()/kunmap()临时内核映射•Km_type•每个

8、cpu占用一块这样的空间•每个cpu占用的空间又被划分为多个小空间,每个小空间的大小为1个page•使用每个cpu数据的原因,是为了提高系统性能:–减

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。