Linux内核内存管理子系统分析【转】
2017-01-06 08:42
323 查看
本文转载自:http://blog.csdn.net/coding__madman/article/details/51298718
版权声明:本文为博主原创文章,未经博主允许不得转载。
还是那张熟悉的老图:Linux内核子系统简介(由七个部分组成)
Linux内存管理模型:
1. 内存管子系统职能:
1> 管理虚拟地址与物理地址的映射
2> 管理物理内存的分配
2. 地址映射管理
1> 虚拟地址空间分布:
linux采用的是一种虚拟地址的管理方式,对于一个32位的处理器对于的内存空间为4G,其中0到3G是用户空间, 从3G到4G是内核空间,而内核空间从下图中可以看出被分为了四个部分:直接映射区,vmalloc区,永久映射 区,以及固定映射区
2> 虚拟地址转化为物理地址:
一个32位的虚拟地址是如何转化为物理地址的:看下图所代表的意义,第一步首先取虚拟地址的高十位作为一个 偏移,CR3寄存器作为一个基地址。相加后就可以从页目录中得到一个地址,这个地址会指向一个页表,页表的基 地址加上中间的十位就可以得到物理页的基地址,然后再加上页内的偏移,也就是低12位,就得到了实际的物理 地址!
896M以上的内存叫做高端内存,896M一下的内存叫做低端内存!
3. 物理内存分配
版权声明:本文为博主原创文章,未经博主允许不得转载。
还是那张熟悉的老图:Linux内核子系统简介(由七个部分组成)
Linux内存管理模型:
1. 内存管子系统职能:
1> 管理虚拟地址与物理地址的映射
2> 管理物理内存的分配
2. 地址映射管理
1> 虚拟地址空间分布:
linux采用的是一种虚拟地址的管理方式,对于一个32位的处理器对于的内存空间为4G,其中0到3G是用户空间, 从3G到4G是内核空间,而内核空间从下图中可以看出被分为了四个部分:直接映射区,vmalloc区,永久映射 区,以及固定映射区
2> 虚拟地址转化为物理地址:
一个32位的虚拟地址是如何转化为物理地址的:看下图所代表的意义,第一步首先取虚拟地址的高十位作为一个 偏移,CR3寄存器作为一个基地址。相加后就可以从页目录中得到一个地址,这个地址会指向一个页表,页表的基 地址加上中间的十位就可以得到物理页的基地址,然后再加上页内的偏移,也就是低12位,就得到了实际的物理 地址!
896M以上的内存叫做高端内存,896M一下的内存叫做低端内存!
3. 物理内存分配
相关文章推荐
- Linux内核spi子系统架构分析
- linux 3.4.10 内核内存管理源代码分析5:伙伴系统初始化
- Linux-0.11内核源码分析系列:内存管理get_free_page()函数分析
- Linux-0.11内核源码分析系列:内存管理get_empty_page()与put_page()函数分析
- Linux-0.11内核源码分析系列:内存管理try_to_share()与share_page()函数分析
- linux 3.4.10 内核内存管理源代码分析1:源代码阅读工具,编译及调试
- Linux内核情景分析_内存管理_越界访问
- Linux-0.11内核源码分析系列:内存管理free_page()与free_page_tables()函数分析
- linux 内核源代码情景分析——linux 内存管理的基本框架
- linux 3.4.10 内核内存管理源代码分析3:伙伴系统内存分配
- linux 3.4.10 内核内存管理源代码分析10:slab通用长度内存分配
- linux 3.4.10 内核内存管理源代码分析6:Slab分配器
- Linux-0.11内核源码分析系列:内存管理copy_page_tables()函数分析
- linux内核分析笔记----内存管理
- linux 3.4.10 内核内存管理源代码分析4:伙伴系统内存释放
- linux 3.4.10 内核内存管理源代码分析7:Slab块的管理
- linux 3.4.10 内核内存管理源代码分析9:Slab内存释放
- Linux-0.11内核源码分析系列:内存管理up_wp_page()与do_wp_page()函数分析
- linux 3.4.10 内核内存管理源代码分析11:Slab初始化
- Linux内核网络子系统数据发送模块分析(MAC802.11-OpenWRT)