发新话题
打印

linux存储管理

linux存储管理

linux存储管理
Linux内核采用虚拟页式存储管理,采用三次映射机制实现从线性地址到物理地址的映射。其中PGD为页面目录,PMD为中间目录,PT为页面表。
虚拟内存不仅可以解决内存容量的问题,还可以提供以下附加的功能:大地址空间;进程保护;内存映射;灵活的物理内存分配;共享虚拟内存。Linux对虚拟内存的管理以进程为基础。对任何一个普通进程来讲,它都会涉及到5种不同的数据段。这几个数据段种包含有“程序代码段”、“程序数据段”、“程序堆栈段”等。虚拟内存通过在各个进程之间共享内存,而使系统看起来有多于实际内存内存容量。Linux支持虚拟内存, 就是使用磁盘作为RAM的扩展,使可用内存相应地有效扩大。Linux在管理进程虚存空间时定义了虚存段(vma)。虚存段是进程一段持续的虚存空间,在这段虚存里,所有单元拥有相同的特征。内存是Linux内核所管理的最重要的资源之一,内存管理系统操作系统中最为重要的部分。
Linux对物理内存也有一定的管理。一般情况下,对物理内存的访问可通过预映射机制方便的实现,Linux保留了128M的虚拟内存映射区,因此最多可以有1G-128M=896M的物理内存直接映射到0xC0000000开始的一段内核空间中。当物理内存大于896M时,超过物理区的那部分内存称为高端内存,内核在存取高端内存时必须将它们映射到高端页面映射区,长度为4M的高端内存映射区正好占用1帧页表所表示的物理内存总量,它可以缓冲1024个高端页面的映射。
Linux中用于内存分配和释放的函数主要是kmalloc()和kfree(),它们用于分配和释放连续的内存空间。在使用kmalloc()分配空闲块时仍以Buddy算法为基础,即以free_area[]管理的空闲页面块做为分配对象。当申请分配的空间小于或等于1个页面时,从free_area[] 管理的1页面块中查找空闲页面进行分配。若申请的空间大于一个页面时,按照blocksize[]后六个块单位进行申请,从free_area[]中与该块长度对应的空闲页块组中查找空闲页面块。kfree()用于释放由kmalloc()分配的内存空间:void kfree(void *__ptr)。
Linux对内存空闲空间的管理采用Buddy算法,Buddy算法是把内存中的所有页面按照2n划分,其中n=0~5,对一个内存空间按1个页面、2个页面、4个页面、8个页面、16个页面、32个页面进行六次划分。划分后形成了大小不等的存储块,称为页面块,简称页块。包含1个页面的页块称为1页块,包含2个页面的称为2页块,依此类推。Linux把物理内存划分成了1、2、4、8、16、32六种页块。对于每种页面块按前后顺序两两结合成一对Buddy“伙伴”, 按照1页面划分后,0和1页、2和3页…是1页块Buddy;按照2页面划分,0-1和2-3、4-5和6-7…是2页块Buddy。Linux把空闲的页面按照页块大小分组进行管理,数组free_area[]来管理各个空闲页块组。
Linux在其发展过程中不断的在完善和优化内存管理单元的功能和性能。针对具体领域,我们可以根据自己的需要定制Linux内核。而内存管理单元作为Linux操作系统的核心部分,在整个系统的运行过程中发挥着举足轻重的作用。

本文由luoxuhong 发布于Linuxsky 论坛,网址:http://bbs.linuxsky.org/thread-4877-1-1.html

相关主题

TOP

文章叙述

你的文章写的不是很好,但是很有一定内涵.你一定是个女孩子,哈哈!!!!

TOP

引用:
原帖由 <i>luoxuhong</i> 于 2006-10-10 17:36 发表<br />
你的文章写的不是很好,但是很有一定内涵.你一定是个女孩子,哈哈!!!!
<br />
why?

TOP

发新话题