Linux-内存管理_第1页
Linux-内存管理_第2页
Linux-内存管理_第3页
Linux-内存管理_第4页
Linux-内存管理_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

计算机操作系统课程小论文计算机操作系统课程小论文 Linux 内存管理机制内存管理机制 姓名 汪青松姓名 汪青松 班级班级 10 网络工程网络工程 1 班班 学号 学号 1004031010 Linux 内存管理机制内存管理机制 班级 10 级网络工程 1 班 姓名 汪青松 学号 1004031010 一 一 概述概述 现代操作系统允许多个程序同时运行 因此 内存中需要同时存放这些程序 操作系统采用的存储管理方案有分区存储管理 分页式存储管理 分段式存储 管理和段页式存储管理 在 Linux 平台上 多任务运行是不可或缺的 在合理的进程调度算法控制 下还得合理的管理内存机制 除了在物理内存的支持下 Linux 还得借助虚拟 内存等来容纳更多的程序运行 没有足够的内存空间来供程序运行 机器则会 出现假死机 服务异常等问题 如果 Linux 虽然可以在一段时间内自行恢复 但是恢复后的系统已经基本不可用了 因此 合理规划和设计 Linux 内存的使 用 是非常重要的 二 二 LinuxLinux 下内存管理框架下内存管理框架 在 Linux 中对于内存的管理涉及到 页面管理 连续内存区管理和非连续 存储区管理 而对于内存管理的方式通常为直接使用 使用 slab 分配器和使用 非连续的存储区 其 Linux 采用页作为内存管理的基本单位 其采用的标准的页面大小为 4KB 采用三次映射机制实现从线性地址到物理地址的映射 Linux 内核使用页描述 符来跟踪和管理物理内存 每个物理页面都用一个页描述符表示 页描述符用 struct page 的结构描述 所有物理页面的描述符组织在 men map 数组中 page 则是对物理页面描述的一个数据结构Linux 采用 buddy 算法来解决内存的碎片 问题 三 三 LinuxLinux 对虚拟内存的管理对虚拟内存的管理 在 Linux 中经常发现空闲内存很少 似乎所有的内存都被系统占用了 表 面感觉是内存不够用了 其实不然 这是 Linux 内存管理的一个优秀特性 在 这方面 区别于 Windows 的内存管理 主要特点是 无论物理内存有多大 Linux 都将其充份利用 将一些程序调用过的硬盘数据读入内存 利用内存读 写的高速特性来提高 Linux 系统的数据访问性能 而 Windows 是只在需要内存 时 才为应用程序分配内存 并不能充分利用大容量的内存空间 换句话说 每增加一些物理内存 Linux 都将能充分利用起来 发挥了硬件投资带来的好 处 而 Windows 只将其做为摆设 即使增加 8GB 甚至更大 Linux 的这一特性 主要是利用空闲的物理内存 划分出一部份空间 做为 cache 和 buffers 以此提高数据访问性能 从而引出物理内存的特性 对于从物理内存中虚拟出来的内存可以解决内存容量的问题 还拥有许多 的附加功能 诸如大地址空间 进程保护 内存映射 灵活分配物理内存 共 享虚拟内存等 Linux 对于虚拟内存的管理以进程为基础 如 32 位的线性进程映射到 4Gb 的虚拟空间中去 从 0XC0000000 到 0XFFFFFFFF 的 1Gb 空间为所用进程所共享 的内核空间 每个进程都有自己的 3Gb 用户空间 四 四 LinuxLinux 对物理内存的管理对物理内存的管理 在 Linux 中对于物理内存的管理主要是通过页面的方式 一 一 物理内存的页面管理 物理内存的页面管理 在内存基本框架中已经提起 Linux 对于物理内存的空间主要是通过分页的 方式来进行管理的 其具体做法就是将物理内存划分成大小相同的物理页面 在 X86 平台下每个页面的大小为 4KB 4KB 是大多数磁盘块大小的倍数 传输效 率高 管理方便 Linux 设置了一个 mem map 数组管理内存页面 它开始时由 free area init 来初始化创建 并且放在物理内存的底部 图一 mem map 数组结构 图二 Buddy 算法 2 2 空闲页面的管理 空闲页面的管理 BuddyBuddy 算法 算法 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 页 块 BuddyLinux 把空闲的页面按照页块大小分组进行管理 用数组 free area 来 管理各个空闲页块组 在在 linux mm page alloc clinux mm page alloc c 中定义如下 中定义如下 define NR MEN LIST 6 Static struct free area struct free men NR MEN LIST Struct free area struct Struct page next Struct page prev Unsigned int map 五 五 内存空间的分配和释放内存空间的分配和释放 一 一 物理内存分配 物理内存分配 Linux 中在申请和释放较小的内存时 使用 kmalloc 和 kfree 在物理内 存中进行分配 这些内存是实际存在的 并且是连续的 并且是根据 slab 块来 分配 kmalloc 和 kfree 分配和释放内存是以块 block 为单位进行的 可以分配的空闲块的大小记录在 blocksize 表中 它是一个静态数组 定义在 mm kmalloc c 中 在使用 kmalloc 分配空闲块时仍以 Buddy 算法为基础 即以 free area 管理的空闲页面块做为分配对象 重新制定了分配的单位 blocksize 数组中的块长度 它可以分配比 1 个页面更小的内存空间 blocksize 中的前 7 个是在 1 个空闲页面内进行分配 其后的 6 种分别对应 free area 的 1 至 32 空闲页面块 当申请分配的空间小于或等于 1 个页面时 从 free area 管理的 1 页面块中查找空闲页面进行分配 若申请的空间大于 一个页面时 按照 blocksize 后六个块单位进行申请 从 free area 中与该 块长度对应的空闲页块组中查找空闲页面块 Free areaFree area 数组定义如下 数组定义如下 Typedef struct free area struct Struct list head free list Unsigned int map free area t 二 二 虚拟内存分配 虚拟内存分配 在分配在物理申请较大的内存空间时 使用 vmalloc 由 vmalloc 申请 的内存空间在虚拟内存中是连续的 它们映射到在物理内存时 可以使用不连 续的物理页面 而且仅把当前访问的部分放在物理页面中 VmallocVmalloc 申请内存如下 申请内存如下 define A MEGABYTE 1024 1024 int main char some memery int megabyte A MEGABYTE int exit code EXIT FAILURE some memery char valloc megabyte 申请内存 if some memery NULL sprintf some memery Hello world n 将字符串写入 some memery 所 指向内存 printf s some memery free some memery 释放内存 printf memery is free n exit code EXIT SUCCESS exit exit code 六 六 缓存和刷新机制缓存和刷新机制 在 Linux 中除了引入虚拟内存的概念外 在前面也提及了高速缓存的概念 为了更好的呃发挥系统性能 Linux 采用了一系列和内存相关的机制 1 1 缓存区高速缓存 缓存区高速缓存 包含了从设备中读取的数据块或写入设备的数据 块 缓冲区高速缓存由设备标示号和块索引 因此可以快速找到数据块 如果 数据可以在缓冲区中高速缓存中找到 则不需要从物理块设备上读取 从而加 快了访问速度 2 页高速缓存 页高速缓存 这一高速缓存用来加速对磁盘上的映像和数据访问 它用来缓存某个文件的逻辑内容 并通过文件 VFS 索引节点和偏移量访问 当 页从磁盘读到物理内存时 就缓存在页高速缓存 3 交换高速缓存 交换高速缓存 用于多个近程共享的页面被换出到交换区的情况 当页面交换到交换文件之后 如果有进程再次访问 它会被重新调入内存 Linux 需要从物理内存中交换出某个页面时 它首先分析交换缓存中的信息 如果缓存中包含该物理页面的一个非零页面表项 则说明该页面交换出内存后 还没有被修改过 这时 系统只需丢弃该页面 概括下就是我们提到的 cached buffers 和 swap buffers 与 cached 都是 内存操作 用来保存系统曾经打开过的文件以及文件属性信息 这样当操作系 统需要读取某些文件时 会首先在 buffers 与 cached 内存区查找 如果找到 直接读出传送给应用程序 如果没有找到需要数据 才从磁盘读取 这就是操 作系统的缓存机制 通过缓存 大大提高了操作系统的性能 但 buffers 与 cached 缓冲的内容却是不同的 buffers 是用来缓冲块设备做的 它只记录文 件系统的元数据 而 cached 是用来给文件做缓冲 更通俗一点说 buffers 主 要用来存放目录里面有什么内容 文件的属性以及权限等等 而 cached 直接 用来记忆我们打开过的文件和程序 这里给出有关交换缓存的部分函数及功能 位于 linux mm swap state c 中 七 七 总结总结 Linux作为一款免费 开源高效的操作系统 是近年来使用比较多的一款操 作系统 也应用于各个行业 在全世界范围内也有一大批爱好者 由于简单 巧妙和高效是Linux内核的原则 从而在Linux的发展过程中需要不断完善和优 化内存的管理单元的功能和性能 针对某些特殊和具体的领域和行业 还可以 根据自己

温馨提示

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

评论

0/150

提交评论