码迷,mamicode.com
首页 > 系统相关 > 详细

linux内存管理子系统

时间:2015-02-16 18:20:55      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

一、Linux内存管理模型
  1、虚拟地址与物理地址的映射
  2、物理地址的分配
二、虚拟地址与物理地址的映射
  1、虚拟地址空间分布
    32位处理器有32根地址总线,可访问4G的物理空间。其中有0-3G为用户程序空间,剩下3-4G为内核空间。内核空间又分为如下四个部分。
    A、直接映射区:3G-3G+896M
                该部分物理地址和虚拟地址之间的关系是很简单的线性关系。896这个数字很特殊,小于896M的空间称为低端内存空间,大于896M的空间为高端内存空间。
    B、vmalloc区:
      既可访问低端内存空间,又可访问高端内存空间。
    C、永久映射区:
      专门用来访问高端内存空间。
    D、固定映射区:
      和特殊的寄存器建立关系,其虚拟地址和物理地址的关系往往是固定的。
  2、虚拟地址与物理地址之间的映射
    这部分内容详见裸机部分MMU的总结。
三、物理内存分配(转自国嵌论坛)
  1、一般来说,在调用malloc函数、new函数等时会分配,但是linux略有不同。Linux采用的是虚拟地址管理,当分配到一段虚拟内存时,并不会分配物理内存与之对应。只有当访问这块内存时才会分配物理空间,避免浪费。
  2、当我们去访问这个虚拟地址,他会将其转换为物理地址,此时Linux内核发现没有与之对应的物理内存。于是引发缺页异常,再去看页框(页帧)有无空闲的物理内存,有的话就分配空闲的物理内存与虚拟地址建立对应关系。
  3、凡是缺页异常的都是先得到虚拟地址,并没有得到实际的物理内存。
  4、当在内核中调用kmalloc函数时,系统在分配虚拟内存时已经为它分配好了物理内存。

linux内存管理子系统

标签:

原文地址:http://www.cnblogs.com/51qianrushi/p/4294379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!