Linux操作系统存储器管理.doc_第1页
Linux操作系统存储器管理.doc_第2页
Linux操作系统存储器管理.doc_第3页
Linux操作系统存储器管理.doc_第4页
Linux操作系统存储器管理.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。Linux 操作系统的诞生1981 年IBM 公司推出享誉全球的微型计算机IBM PC。 Linux实现了基于虚拟页式存储管理的虚拟存储,在i386结构的机器上,每个用户任务的虚拟地址空间都可达到4GB。Linux的存储管理使用了三层页表来处理逻辑地址到物理地址的转换,分别是PGD(页表目录)、PMD(中间页表目录)和PT(页表)。Linux将存储管理分为物理内存管理、内核内存管理、虚拟内存管理、内核虚拟内存管理和用户级内存管理。一 存储器管理的目的 (1).为多道程序设计提供支持 (2).提高内存利用率 (3).简化内存的使用,为用户开发应用程序提供支持 多道次序设计的主要目的是提高微处理器的利用律。而为了实现多道程序的并行运行,存储器管理系统必须能够将内存分为多个部分,每部分都装入一道程序,以便多道程序的并行运行。影响内存利用率的一个重要因素是内存的管理开销。为了便于管理,内存分配有一个最小单位。小于该单位的内存请求,将按此最小单位分配内存,其多余的未使用空间被称为“碎片”。 减少碎片的方法,是缩小该基本单位。从内存的分区管理到分段管理再到分页管理和分段分页结合的段页式管理都体现了这一思路。为了方便用户使用,存储器管理应该提供相应的功能,以支持用户的应用程序开发。比如分段机制可以帮助用户按功能组织代码,共享存储器机制可以方便用户高速通信。 二存储管理1物理内存管理: 物理内存管理以页为单位,记录、分配和回收物理内存,物理内存管理使用Buddy(伙伴)算法。(1)空闲物理内存单元的管理 Linux物理内存管理使用Buddy算法实现。其物理页面的信息由mem_map_t结构描述,系统中的所有物理页面由一个mem_map_t类型的数组mem_map来表示。该数组的每一项都代表物理内存的一个页面,该叔祖的大小由实际的物理内存大小决定。mem_map_t结构的定义参考linuxlinux-2.4.xincludelinuxmm.h. Linux内核定义了free_area数组记录系统中的当前空闲物理内存单元。每一项都是一个free_area_struct结构,描述了一组由相同大小的空闲物理页块构成的双向链表。 另外,Linux使用全局变量nr_free_pages来跟踪系统中的空闲物理内存页面的总数,该变量的值等于free_area数组中空闲页的总数。使用该变量,Linux可以知道系统物理内存的使用状况,当空闲的物理内存页面树立低于某个指标时,Linux将唤醒内核交换守护进程kswapd,让其尽可能回收一些物理内存。 (2)物理页的分配 所有物理内存的分配和释放必须针对连续的物理内存。因此,Buddy酸法将内存划分成2的i次方页大小的连续的页块,每一组有相同的i值。并且将同一组的空闲页块链接成一个双向链表然后将所有链表的头节点组成一个数组。 分配空间时,首先要在页块大小相应的空闲页块链中找到一块空间来返回给调用者,如果在这个链里没有找到合适的空间分配,则到free_area数组中的下一个元素的空闲链中去查找,直至找到能够分配的空间。(3)物理页的释放内存管理系统,在分配空间时将大页块都划分成了小页块,这使得系统中的页块都越变越小,这对于分配大块内存是不利的。为了避免产生大量的内存碎片,内存管理系统在物理页释放时,应该斤可能地将小页块合并成大页块。(4)物理内存管理评价为了内存对齐,Buddy算法往往会分配一些多余的内存空间给用户,这对提供内存利用率是不利的;但是Buddy算法避免了内存碎片的产生,避免了内存紧抽的开销,效率很高。2内核内存管理: 内核内存管理主要负责为各种内核数据结构分配空间,其大小一般较小。如果使用以页为单位的物理内存管理则浪费较大,为此Linux专门提供了使用Slab算法的内核内存管理。3虚拟内存管理: 在物理内存管理的基础上,使用请求调页机制和交换机制,为系统中的每个进程都提供高达4GB(i386平台)的虚拟内存空间。(1)页表的管理 一个页表入口标识一个物理页,它包含了物理页的大量信息,如该页是否有效、该页的读写权限等。最重要的是页表入口给出了物理页的页框号,根据这个物理页框号就可以找到这个物理页的实际起始物理地址。为了操作系统的可移植性,Linux使用三级页表来存储虚拟地址转换为物理地址映射关系。一级页表只占用一个页,其中存放了二级页表的入口指针,记为PGD;二级页表中存放了三级页表的入口的指针,记为pmd;在三级页表中每个项都是一个页表入口。在Linux的X86版本中,只使用了两极页表,即第一级和第三级,在Intel系列CPU中,一个物理页面大小是4KB,而每个页表项大小是4字节。因此,每个物理页面可以包含1024个页表项,则在X86平台上,每个进程的地址空间为1024*1024*4KB=4GB大小。(2)虚拟存储空间的管理在Linux系统中,主要使用了3个层次的数据结构page、mm_struct和vm_area_struct来表示进程的虚拟地址空间。最底层的page结构描述了一个物理页桢及其页内消息的相关属性和链接指针,包括标志位、引用技术等。 vm_area_struct结构是中间层次,它描述了一个虚拟内存区域(即一段连续的虚拟地址空间)的属性。其中,包括虚拟内存区域的开始、结束地址、访问权限、页目录、映射文件和链接指针。其定义参考linuxlinux-2.4.xincludelinuxmm.h.mm_struct是描述进程虚拟地址空间的最高层的数据结构,一个mm_struct就代表一个独立进程的虚拟内存空间。该结构中记录了实现任务管理的进程模型所需要的内存管理相关的全部信息,如: 进程的也目录的位置 进程的代码、数据、堆栈、堆、环境变量、入口参数等在虚拟地址空间中的存储位置 进程占用的物理页桢树木、进程的LDT(局部描述符表)、引用计数 进程的虚拟地址空间的虚拟内存区域链表的链接信息和一些统计信息 (3)虚拟地址空间的创建进程虚拟地址空间的创建实际上可以分为两个步骤。首先,复制父进程的地址空间;然后,根据可执行映像的要求,创建新的内存地址空间。虚拟地址空间的复制: 完全复制父进程的地址空间,需要将父进程的内存管理结构、mm_struct、vm_area_struct、页目录表、页表以及对应物理页桢的内容都复制到子进程中。显然,开销太大。 针对这个问题,Linux对于fork调用,Linux使用了COW技术,同时也提供vfork系统调用,使用vfork系统调用创建的进程完全和父进程共享同一个地址空间。实际上,在Linux中,可以使用vfork系统调用实现线程管理。虚拟地址空间的重建:fork系统调用返回后,子进程已经通过虚拟内存复制,创建了自己的地址空间。此后,当进程调用exec系统调用,希望执行新的程序时,将根据新的执行映像,为该进程创建新的虚拟地址空间。通常将这个过程叫做虚拟地址空间的重建。在Linux中采用内存映射机制来处理映像文件的装入。在vm_area_struct结构中,由一个file结构的vm_file域和一个无符号长整型类型的vm_pgoff域分别表示该内存区域映射文件的文件指针和偏移值。实际上内存映射机制正是使用这两个域描述了某段内存空间对应的内容在文件中的位置。这样,在重建虚拟地址空间时,只需要建立一系列的数据结构,描述某段内存区域内容在可执行映像中的位置,只有当进程真正使用该区域时,才将其装入内存。使用这种机制,就避免了将映像中并不使用的部分也装入了内存中。 四 内核虚拟内存管理: Linux将每个进程的4GB虚拟内存分为用户区(03GB)和内核区(34GB),内核虚拟内存管理负责内核区虚拟内存的管理。五 用户级内存管理: 用户任务空间,即进程的内存空间管理,一般由C库实现,目的是为用户的应用编程提供支持。三 内存管理分类1 按照内存分配是否必须连续进行,内存管理分为连续分配方式和离散分配方式。 2 按照内存分配是否支持超过真实物理内存的大小的地址空间,内存管理分为实内存管理和虚内存管理。四 早期连续内存分配1 固定式分区 固定式分区的基本思想是在系统生成时就将主内存划分为若干个分区,每个分区的大小可以不等,但事先必须固定,以后也不能改变。固定十分区在任务未装入时,分区的大小、树木已预先确定,这样容易造成分区内的碎片问题,从而影响内存的利用率。特点:实行简单,使用于简单的多任务操作系统2 可变式分区 可变式分区是动态划分存储器的分区方法,它是在作业装入和处理过程中建立的分区,并且要使分区的容量正好能适应作业的大小。在任务进入系统前,将根据任务的大小申请所需存储容量,然后由系统实施分配。需要一定的分配算法,碎片整理需要移动用户分区中的程序,需要硬件的支持。特点:相对复杂,需要硬件的支持软件也比较复杂五 基于段、页的存储管理基于离散分配的思想,具体的分配方式: 分页存储管理 分段存储管理 段页式存储管理 1 分页存储管理分页存储管理把系统中用到的地址空间分为两种。提供给用户次序使用的是基于逻辑地址的连续的地址空间,系统使用的是真实物理地址;由系统负责将连续的逻辑地址映射到物理上并不连续的实内存地址。当任务提出存储分配请求时,系统首先根据存储块大小(页面大小)把任务分成若干页。每页都装入一个物理块中。此时,物理块并不要求连续,只要建立起程序的逻辑页和内存的存储块之间的对应关系,借助动态地址变换,原本连续的用户程序在分散的不连续存储块中就能够正常投入运行。特点:需要硬件支持2 分段存储管理分段机制需要编译程序的支持,目前,大多数流行的编译器都支持分段,它们往往将程序划分为代码段、数据段、未初始化数据段和其他一些附加信息段等。分段和分页存储管理有许多相似处,概念上是完全不同的: 分页的任务地址空间是一维的线性地址空间,分段的任务地址空间是二维的。 页的大小固定,段的长度是动态的。 分页对用户是透明的,而分段是用户可见的。 页是信息的物理单位,使用分页机制是为了实现离散分配;段是信息的逻辑单位,而使用分段是为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论