Linux操作系统存储器管理_第1页
Linux操作系统存储器管理_第2页
Linux操作系统存储器管理_第3页
Linux操作系统存储器管理_第4页
Linux操作系统存储器管理_第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 1 物理内存管理 物理内存管理以页为单位 记录 分配和回收物理内存 物理内存管理使用 Buddy 伙伴 算法 1 空闲物理内存单元的管理 Linux 物理内存管理使用 Buddy 算法实现 其物理页面的信息由 mem map t 结构描述 系统中的所有物理页面由一个 mem map t 类型的数组 mem map 来表示 该数组的每一项都代表物理内存的一个页面 该叔祖的大小 由实际的物理内存大小决定 mem map t 结构的定义参考 linux linux 2 4 x include linux mm 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 2 内核内存管理 内核内存管理主要负责为各种内核数据结构分配空间 其大小一般较小 如果使用以页为单位的物理内存管理则浪费较大 为此 Linux 专门提供了使用 Slab 算法的内核内存管理 3 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 结构是中间层次 它描述了一个虚拟内存区域 即一段 连续的虚拟地址空间 的属性 其中 包括虚拟内存区域的开始 结束地址 访问权限 页目录 映射文件和链接指针 其定义参考 linux linux 2 4 x include linux mm 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 虚拟内存分为用户区 0 3GB 和内核区 3 4GB 内核虚拟内存管理负责内核区虚拟内存的管理 五五 用户级内存管理 用户任务空间 即进程的内存空间管理 一般由 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

提交评论