Linux内存管理子系统(概念入门)
Posted _WILLPOWER_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内存管理子系统(概念入门)相关的知识,希望对你有一定的参考价值。
大纲
- 内存管理子系统
- 内存管理模型
- 地址映射管理
- 物理地址分配管理
子系统简介
Linux内核系统构成
管理模型
Linux内存子系统管理模型
上面的三个部分主要做物理内存分配,包裹着它们的部分做的是地址映射
管理内容
- 内存管理子系统职能
- 管理:虚拟地址和物理地址的映射
- 管理:物理内存的分配
地址映射管理
- 内存管理子系统
- 管理:虚拟地址与物理地址的映射
- 地址映射管理
1. 虚拟地址空间分布
2. 虚拟地址转化为物理地址 - 物理地址分配管理
Linux虚拟地址空间分布
32位的处理器,地址总线位32位,因此能够访问到的地址空间位2^32 = 4G
其中0-3G为用户空间里面是应用程序,3G-4G为内核空间,内核空间又被分为4个部分:
-
直接映射区
-
vmalloc区
-
永久映射区
-
固定映射区
虚拟地址转化为物理地址
由这部分完成
cr3:作为基地址(页目录的基地址)
高10位:偏移,以找到页目录
中间10位:偏移,以找到页表(物理页的基地址)
低12位:偏移,找到物理页的存储单元
896MB以下的内存称为低端内存,以上的成为高端内存
直接映射区域的地址映射到物理内存就是其地址减去PAGE_OFFSET,也就是减去3G。永久内核映射区固定访问高端内存,而固定映射区是用来访问特定寄存器的。
物理内存分配
只有在访问虚拟地址的时候,才会实实在在的给你分配物理内存
当调用malloc的时候,会分配虚拟地址,而只有在访问虚拟地址的时候,这个时候Linux会产生缺页异常,然后分配实际内存地址和虚拟地址建立映射关系(通过缺页异常的方式)
而kmalloc函数返回的虚拟地址是已经建立映射的虚拟地址。
以上是关于Linux内存管理子系统(概念入门)的主要内容,如果未能解决你的问题,请参考以下文章