Linux内存管理子系统(概念入门)

Posted _WILLPOWER_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内存管理子系统(概念入门)相关的知识,希望对你有一定的参考价值。

大纲

  • 内存管理子系统
    • 内存管理模型
    • 地址映射管理
    • 物理地址分配管理

子系统简介

Linux内核系统构成

管理模型

Linux内存子系统管理模型

上面的三个部分主要做物理内存分配,包裹着它们的部分做的是地址映射

管理内容

  • 内存管理子系统职能
    1. 管理:虚拟地址和物理地址的映射
    2. 管理:物理内存的分配

地址映射管理

  1. 内存管理子系统
    1. 管理:虚拟地址与物理地址的映射
    2. 地址映射管理
      1. 虚拟地址空间分布
      2. 虚拟地址转化为物理地址
    3. 物理地址分配管理

Linux虚拟地址空间分布

32位的处理器,地址总线位32位,因此能够访问到的地址空间位2^32 = 4G

其中0-3G为用户空间里面是应用程序,3G-4G为内核空间,内核空间又被分为4个部分:

  1. 直接映射区

  2. vmalloc区

  3. 永久映射区

  4. 固定映射区

虚拟地址转化为物理地址

由这部分完成


cr3:作为基地址(页目录的基地址)
高10位:偏移,以找到页目录
中间10位:偏移,以找到页表(物理页的基地址)
低12位:偏移,找到物理页的存储单元


896MB以下的内存称为低端内存,以上的成为高端内存
直接映射区域的地址映射到物理内存就是其地址减去PAGE_OFFSET,也就是减去3G。永久内核映射区固定访问高端内存,而固定映射区是用来访问特定寄存器的。

物理内存分配


只有在访问虚拟地址的时候,才会实实在在的给你分配物理内存
当调用malloc的时候,会分配虚拟地址,而只有在访问虚拟地址的时候,这个时候Linux会产生缺页异常,然后分配实际内存地址和虚拟地址建立映射关系(通过缺页异常的方式)
而kmalloc函数返回的虚拟地址是已经建立映射的虚拟地址。

以上是关于Linux内存管理子系统(概念入门)的主要内容,如果未能解决你的问题,请参考以下文章

Linux 内核的内存管理 - 概念

文件操作系统入门基本概念

linux操作系统内存管理

Linux内存管理基本概念

Linux - Linux内存管理

Linux入门——进程状态