首页 > 其他 > 详细

ARM内核驱动-内存-链表-进程管理

时间:2014-03-20 07:29:31      阅读:511      评论:0      收藏:0      [点我收藏+]

对于一个计算机系统来讲,最重要的两个部分是cpu和内存。

一、linux内存管理子系统

包括内存管理模型、地址映射管理和物理地址分配管理

1.1、内核子系统简介

system call interface (SCI)、process management(pm)、memory management(mm)、arch、virtual file system(vfs)、network stack

1.2、内存管理模型

bubuko.com,布布扣

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、物理内存分配

bubuko.com,布布扣

什么时候分配物理内存?

linux系统使用虚拟地址的方式来分配物理内存。比如说电影院有100个座位,你打算请人看电影。如果你只发100张票,也许只来50人,其它人有事不能来。所以,你要发200张票。而这200张票就是所谓的虚拟地址,而100个座位就是物理地址。拿到电影票的人不一定能得到座位。而虚拟内存管理的机制与此相似。分配了虚拟地址还未分配物理地址。

在linux中,用malloc分配的是虚拟地址,只有访问虚拟地址时,才会分配物理内存。

而在内核中的kmalloc,它会分配虚拟内存的同时分配物理内存,并一一对应。








ARM内核驱动-内存-链表-进程管理,布布扣,bubuko.com

ARM内核驱动-内存-链表-进程管理

原文:http://blog.csdn.net/renren900207/article/details/21515565

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!