对于一个计算机系统来讲,最重要的两个部分是cpu和内存。
一、linux内存管理子系统
包括内存管理模型、地址映射管理和物理地址分配管理
1.1、内核子系统简介
system call interface (SCI)、process management(pm)、memory management(mm)、arch、virtual file system(vfs)、network stack
1.2、内存管理模型
1.3、管理内容
1、虚拟地址与物理地址的映射
在编写裸机程序时,GPIO的控制寄存器地址指的就是物理地址,linux系统中使用的都是虚拟地址,malloc函数首先分配的也是虚拟地址。
2、物理内存的分配
2、地址映射管理
2.1、Linux虚拟地址空间分布
linux的地址空间分为内核空间和用户空间,内核空间又分为直接映射区、vmalloc区、永久内核映射区、固定映射区等。对于一个32位机的linux系统。,其地址空间为4G,其中0-3G为用户空间,3-4G为内核空间(内核空间的前896M为低端内存,高于896M的部分为高端内存。在内核空间的前896M,地址空间与物理空间是线性映射关系,而高128M是非线性映射关系。这样的目的是为了,解决1G的内核空间对大于1G物理内存的管理)。
直接映射区:在直接映射区对应的物理地址为虚拟地址减去3G。
vmalloc:可以访问低端区和高端区。
永久映射区:可以访问高端内存
固定映射区:虚拟地址与固定寄存器的映射区
2.2、虚拟地址转化为物理地址
对于32位虚拟地址,它的高10位,存放了页目录偏移量,低12位存放了物理页(4K)偏移量,中间10位存放了页表偏移量。物理页大小为4k,也可称为页帧或页框。
具体过程描述:首先设定一个基地址,基地址加上页目录偏移量,就是页表的基地址,再加上页表偏移量就是物理页的基地址,最后加上物理页偏移量就是要找的物理页地址,它的大小为4K。
3、物理内存分配
什么时候分配物理内存?
linux系统使用虚拟地址的方式来分配物理内存。比如说电影院有100个座位,你打算请人看电影。如果你只发100张票,也许只来50人,其它人有事不能来。所以,你要发200张票。而这200张票就是所谓的虚拟地址,而100个座位就是物理地址。拿到电影票的人不一定能得到座位。而虚拟内存管理的机制与此相似。分配了虚拟地址还未分配物理地址。
在linux中,用malloc分配的是虚拟地址,只有访问虚拟地址时,才会分配物理内存。
而在内核中的kmalloc,它会分配虚拟内存的同时分配物理内存,并一一对应。
ARM内核驱动-内存-链表-进程管理,布布扣,bubuko.com
原文:http://blog.csdn.net/renren900207/article/details/21515565