欢迎来到天天文库
浏览记录
ID:20440815
大小:402.00 KB
页数:12页
时间:2018-10-12
《第4步 linux内存管理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Linux内存管理文档修订记录版本时间修订者修订内容1.02010-03-21朱康挺创建此文档1.12010-03-24朱康挺补充:请页机制中flags叙述每次修改与增加内容者,需在文档修订记录中进行记录内存是Linux内核所管理的最重要的资源之一,内存管理系统是操作系统中最为重要的部分。因为系统的物理内存有限,是一种稀缺资源,其远少于系统所需要的内存数量。作为操作系统的核心,内存管理必须能够克服物理内存的局限,使用户进程在透明方式下,拥有比实际物理内存大得多的内存。其核心策略就是使用虚拟内存。Linux成功地实现了以虚拟内存为核心的内存管理
2、策略,强大的分页机制,公平的交换方式,各类有效的高速缓存,以及以页保护为主的保护措施等。虚存管理可提供以下的功能:◆广阔的地址空间:系统的虚拟内存可以比系统的实际内存大很多倍。◆进程的保护:系统中的每一个进程都有自己的虚拟地址空间。这些虚拟地址空间是完全分开的,这样一个进程的运行不会影响其他进程。并且,硬件上的虚拟内存机制是被保护的,内存不能被写入,这样可以防止迷失的应用程序覆盖代码的数据。◆内存映射:内存映射用来把文件映射到进程的地址空间。在内存映射中,文件的内容直接连接到进程的虚拟地址空间。◆公平的物理内存分配:内存管理系统允许系统中每一
3、个运行的进程都可以公平地得到系统的物理内存。◆共享虚拟内存:Linux实现的虚拟内存允许两个进程之间互相共享内存,例如:共享的库。在这种情形下,库代码仅存在于一个进程,而不需要为每个应用都复制一份。Linux虚拟内存的实现需要6种机制的支持:地址映射机制、内存分配回收机制、缓存和刷新机制、请求页机制、交换机制和内存共享机制。内存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址。当用户程序运行时,如果发现程序中要用的虚地址没有对应的物理内存,就发出了请求页要求。如果有空闲的内存可供分配,就请求分配内存(于是用到了内存的分配和回收),并把正
4、在使用的物理页记录在缓存中(使用了缓存机制)。如果没有足够的内存可供分配,那么就调用交换机制;腾出一部分内存。另外,在地址映射中要通过TLB(翻译后援存储器)来寻找物理页;交换机制中也要用到交换缓存,并且把物理页内容交换到交换文件中,也要修改页表来映射文件地址。一、内存分页机制在Linux中,每个进程都有一套独立于其它进程的虚拟地址空间,这个地址空间有4GB大小,其中0~3GB为用户态空间,用户态进程可以直接访问。从3GB~4GB为内核态空间,存放内核访问的代码和数据,用户态进程不能直接访问。用户进程可通过中断或系统调用访问内核态空间。为了效
5、率起见,虚拟地址空间被分成以固定长度为单位的页(一般4KB)。分页单元认为所有的RAM被分成固定长度的页框(Pageframe)(有时叫做物理页)。每一个页框包含一页(Page),也就是说一个页框的长度与一个页的长度一致。页框是主存的一部分,因此也是一个存储区域。区分页与页框是很重要的,前者只是一个数据块,可以被存放在任何页框或磁盘中。将这些页映射成页框的数据结构称为页表(pagetable)。页表存储在主存中,可由内核在启用分页单元前对其进行恰当的初始化。图1.1显示了页到页框的映射。图1.1页表将页转换成页框在ARM-Linux系统中,3
6、2位的虚拟地址被分成3个域:◆页目录:最高的10位◆页表:中间的10位◆偏移量:最低的12位虚拟地址的转换由两步完成,每一步都基于一种转换表。第一种转换表称为页目录表(pagedirectory),第二种转换表称为页表(Pagetable)。正在使用的页目录表的物理地址存放在处理器的cr3寄存器中,虚拟地址内的页目录域决定了它指向页目录表中的哪一项,即指向哪个页表。接下来,地址的页表域决定页表中的一项,此项含有此页所在页框的物理地址。偏移量域,决定了本页框内的相对位置(见图1.2)。由于它是一个12位长的域.故每一页含有4096字节的数据。页
7、目录城和页表域都是10位长,因此页目录表和页表都可以多达1024项。因此一个页目录表可以寻址到高达l024*1024*4096=4G个存储单元。图1.2内存分页机制分页举例:假如内核已给一个正在运行的进程分配的线性地址空间范围是0x20000000到0x2003ffff。这个空间由64页组成。我们不必关心包含这些页的页框的物理地址,实际上,其中的一些页在主存中也许不连续。我们只关注页表项中的几个域。让我们从分配给进程的线性地址的最高10位(分页单元解释成页目录域)开始。这两个地址都以2开头,后面跟着0,因此高10位有相同的值,即0x080或十
8、进制的128。因此,这两个地址的页目录域都指向进程页目录的第l29项。相应的页目录项中必须包含分配给进程的页表的物理地址(参见图1.3)。如果没有给这个进程分配其它
此文档下载收益归作者所有