日期 内核版本 CPU架构 作者
2019.04.06 Linux-4.4 PowerPC LoneHugo

系列文章:https://blog.csdn.net/Vince_/article/details/89055979

虚拟地址空间划分,包括一致映射,临时映射,永久映射,vmalloc,ioremap区域等

内存布局

enum fixed_addresses {

FIX_HOLE,

/* reserve the top 128K for early debugging purposes */

FIX_EARLY_DEBUG_TOP = FIX_HOLE,

FIX_EARLY_DEBUG_BASE = FIX_EARLY_DEBUG_TOP+((128*1024)/PAGE_SIZE)-1,

#ifdef CONFIG_HIGHMEM

FIX_KMAP_BEGIN,        /* reserved pte's for temporary kernel mappings */

FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,

#endif

/* FIX_PCIE_MCFG, */

__end_of_fixed_addresses

};

#define __fix_to_virt(x)        (FIXADDR_TOP - ((x) << PAGE_SHIFT))

#define __virt_to_fix(x)        ((FIXADDR_TOP - ((x)&PAGE_MASK)) >> PAGE_SHIFT)

  1. PTE_SHIFT为9, (PAGE_SHIFT - PTE_T_LOG2)
  2. PGDIR_SHIFT为21(PAGE_SHIFT + PTE_SHIFT)即(12+10)
  3. PUD_SHIFT为21, PGDIR_SHIFT
  4. PMD_SHIFT为21, PUD_SHIFT
  5. PMD_SIZE为0x200000即(1UL << PMD_SHIFT)
  6. PMD_MASK为0xffc0000(~(PMD_SIZE-1))

区域信息:

  1. HOLE:早期debug使用的区域

    1. FIX_HOLE/FIX_EARLY_DEBUG_TOP --> FIX_EARLY_DEBUG_BASE(0 --> 31)
  2. FIX_KMAP:temporary kernel mappings
    1. FIX_KMAP_BEGIN --> FIX_KMAP_END/(FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1) (32 --> 47)
  3. 结尾:__end_of_fixed_addresses --> 48
  4. FIXADDR_TOP为-PAGE_SIZE,即0xfffff000
  5. __FIXADDR_SIZE为(__end_of_fixed_addresses << PAGE_SHIFT), 0x30000
  6. FIXADDR_START为(FIXADDR_TOP - __FIXADDR_SIZE), 0xfffcf000
  7. PKMAP_BASE为((FIXADDR_START - PAGE_SIZE*(LAST_PKMAP + 1)) & PMD_MASK)
    1. (0xfffcf000-0x1000*(4+1)) & 0xfffc0000
    2. 0xfffca000 & 0xfffc0000
    3. 0xfffc0000
  8. PKMAP_ORDER        PTE_SHIFT为2,LAST_PKMAP为4;
  9. FIX_MAP:
    1. paging_init中对于PPC32将FIX_HOLE到__end_of_fixed_addresses-1的所有页以fix方式映射
    2. 按照__fix_to_virt计算其区间为0xfffff000-0x00000000 --> 0xfffff000-0x2f000
    3. 即为0xfffd0000 --> 0xfffff000
  10. __builtin_ffs(x) - 1为x最后一个1所在的位置,比如0x2,为1
  11. Sfddfs
  12. Sdf

深入解读Linux内存管理系列(6)——地址空间划分相关推荐

  1. linux虚拟地址空间管理,Linux内存管理4---虚拟地址空间管理

    1.前言 本文所述关于内存管理的系列文章主要是对陈莉君老师所讲述的内存管理知识讲座的整理. 本讲座主要分三个主题展开对内存管理进行讲解:内存管理的硬件基础.虚拟地址空间的管理.物理地址空间的管理. 本 ...

  2. linux每个进程的地址空间大小,别再说你不懂 Linux 内存管理了,10 张图给你安排的明明白白...

    原标题:别再说你不懂 Linux 内存管理了,10 张图给你安排的明明白白 转自:LemonCode 过去的一周有点魔幻,有印象的有三个新闻:天猫总裁绯闻事件,蘑菇街裁员,不可能打工的周某也放出来了. ...

  3. Linux 内存管理 详解(虚拟内存、物理内存,进程地址空间)

    Linux -操作系统内存管理 存储系统 存储器的层次结构 Linux的内存管理 物理内存 物理内存管理 虚拟内存 虚拟地址空间 (写时拷贝) 和物理地址映射关系 页表 虚拟内存优缺点 「在 4GB ...

  4. 万字长文,别再说你不懂Linux内存管理了(合辑),30 张图给你安排的明明白白...

    之前写了两篇详细分析 Linux 内存管理的文章,读者好评如潮.但由于是分开两篇来写,而这两篇内容其实是有很强关联的,有读者反馈没有看到另一篇读起来不够不连贯,为方便阅读这次特意把两篇整合在一起,看这 ...

  5. 别再说你不懂Linux内存管理了,10张图给你安排的明明白白!

    来自:后端技术学堂 过去的一周有点魔幻,有印象的有三个新闻:天猫总裁绯闻事件,蘑菇街裁员,不可能打工的周某也放出来了.三件事,两件和互联网行业相关,好像外面的世界很是精彩啊!吃瓜归吃瓜,学习还是不能落 ...

  6. Linux 内存管理 | 地址映射:分段、分页、段页

    文章目录 分段 分页 多级页表 快表(TLB) 段页式 Linux Linux 内存管理 | 物理内存管理:内存碎片.伙伴系统.slab分配器 Linux 内存管理 | 虚拟内存管理:虚拟内存空间.虚 ...

  7. 万字整理,图解Linux内存管理所有知识点

    Linux的内存管理可谓是学好Linux的必经之路,也是Linux的关键知识点,有人说打通了内存管理的知识,也就打通了Linux的任督二脉,这一点不夸张.有人问网上有很多Linux内存管理的内容,为什 ...

  8. Linux内存管理和分析vmalloc使用的地址范围

    From: http://www.cnblogs.com/dubingsky/archive/2010/04/20/1716158.html Vmalloc可以获得的地址在VMALLOC_START到 ...

  9. Linux内存管理:知识点总结(ARM64)

    https://mp.weixin.qq.com/s/7zFrBuJUK9JMQP4TmymGjA 目录 Linux内存管理之CPU访问内存的过程 虚拟地址转换为物理地址的本质 Linux内存初始化 ...

  10. Linux内存管理:内存寻址之分段机制与分页机制

    目录 Linux 内存寻址之分段机制 前言 分段到底是怎么回事? 实模式的诞生(16位处理器及寻址) 保护模式的诞生(32位处理器及寻址) IA32的内存寻址机制 寻址硬件 IA32的三种地址 MMU ...

最新文章

  1. [小故事大道理] -- GoodMorning,Sir!
  2. java中hashMap的排序
  3. selenium+python面试题目总结,完整度80%,看看你会多少?
  4. git clone 获取指定分支的指定commit版本
  5. java 做项目踩坑,web项目踩坑过程
  6. android按钮控件常见问题,Android的基本控件和Activity的应用总结
  7. 如何从OnDocumentComplete事件中获得当前frame的html代码
  8. ElasticSearch5.4X 搜索引擎查询java工具类
  9. php怎么跳转别的手机浏览器,JavaScript_JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式),随着移动互联网的不断普及, - phpStudy...
  10. Java高并发编程详解系列-Guarded Suspension设计模式
  11. 马斯克自曝曾寻求苹果600亿美元收购特斯拉 但库克拒绝会面
  12. struts2(2012/2/24)
  13. 设计模式之责任链模式(Chain of Responsibility )
  14. mysql查询专业术语,英语术语MySQL查询
  15. 【作业】第一章课后作业
  16. EAN13条形码绘制(Delphi版)
  17. 杨振宁六大数理工作赏析 | 祝贺杨先生百岁华诞
  18. 使用 UDP 进行消息(信令)数据传输的设计
  19. html5学习之音乐播放器的结构整理
  20. 2017.10.24队内互测——压轴出场的互测终曲|(*_-)

热门文章

  1. api 读内存整数_10万+QPS 真的只是因为单线程和基于内存?
  2. python的函数的笔记_Python笔记-函数1
  3. 为什么我的Linux主机内存用的那么快?
  4. VR厂商,你们考虑过霍金的感受吗?
  5. 国网四川电力应用大数据服务经济社会发展
  6. 《Adobe Premiere Pro CC经典教程(彩色版)》——第2课 设置项目 2.1 开始
  7. 少量数据通过Excel表格数据导入server SqlServer查询
  8. Android入门之login设计
  9. javascript 弹出窗口中是否显示地址栏
  10. Struts2实现通过浏览器返回一个helloworld页面给用户