欢迎来到天天文库
浏览记录
ID:40187358
大小:254.00 KB
页数:25页
时间:2019-07-24
《实验8linux的内存管理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验8Linux的内存管理一、实验目的二、实验工具与设备三、实验预备知识四、实验内容和步骤五、实验总结一、实验目的1.理解虚拟内存、磁盘缓存的概念。2.掌握基本的内存管理知识。3.掌握查看实时查看内存、内存回收的方法。二、实验工具与设备装有Linux系统的计算机。三、实验预备知识Linux的内存管理相当完善,一般不需要用户特别干预。进程是运行于虚拟地址空间的程序。可以说,任何在Linux系统下运行的程序都是进程。大多数的进程都需要虚拟内存。对于典型的Linux应用系统,128MB内存是合理的选择。如果不
2、运行XWindows系统,在一台特殊用途的计算机(如用于调试设备驱动程序的“崩溃和烧毁”系统)上,仅用8MB内存即可工作。1.实时监控内存使用情况(1)在命令行用“free”命令监控内存使用情况在提示符后输入命令free:#free表8-1所示为输出情况。totalusedfreesharedbufferscachedMem:25602419228463740010676101004−/+8060475420buffers/cache:Swap:5220720522072表8-1一个256MB的RAM和
3、512MB交换空间的系统情况表8-1中第二行输出(Mem:)显示物理内存:total列显示共有的可用内存(不显示核心使用的物理内存,通常大约1MB),used列显示被使用的内存总额,free列显示全部空闲的内存,shared列显示多个进程共享的内存总额,buffers列显示磁盘缓存的当前大小。表8-1中第二行输出(Swap)显示交换空间的信息,与上一行类似。如果该行为全0,则没有使用交换空间。缺省状态下,free命令以千字节(即1024字节为单位)显示内存使用情况。若使用-h参数,则以字节为单位显示内存
4、使用情况;若使用-m参数,则以兆字节为单位显示内存使用情况。若命令带-s参数,则不间断地监视内存使用情况:#free-b-s5。该命令在终端窗口中连续不断地报告内存的使用情况,每5秒钟更新一次。(2)用vmstat命令监视虚拟内存使用情况在提示符后面输入命令vmstat,显示表8-2所示信息。procs-memoryswapiosystemcpurbwswpdfreebuffcachesisobiboincsussyid10006369210704101008002394212610548457表8-2
5、输入命令vmstat显示的信息vmstat命令是一个通用监控程序,是VirtualMemoryStatistics(虚拟内存统计)的缩写。如果vmstat命令没有带任何命令行参数,将得到一次性的报告。vmstat命令报告主要的活动类型有进程(procs)、内存(以千字节为单位)、交换分区(以千字节为单位)、来自块设备(硬盘驱动器)的输入输出量、系统中断(每秒钟发生的次数),以及中央处理单元(CPU)分配给用户、系统和空闲时分别占用的比例。2.虚拟内存实现的机制由于人们需要的内存容量远远大于物理内存容量,
6、因而有各种策略来解决这个问题,其中最成功的是虚拟内存技术。Linux支持虚拟内存,即用磁盘作为RAM的扩展,相当于扩大了可用内存。运行于Linux的程序只看到大量的可用内存,而不关心哪些在磁盘上。读写硬盘比读写内存慢(大约为读写内存速度的千分之一),因而程序运行较慢。用于虚拟内存的硬盘空间称为交换空间。Linux虚拟内存的实现需要6种机制的支持:地址映射机制、内存分配回收机制、缓存和刷新机制、请求页机制、交换机制和内存共享机制。内存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址。当用户程序运行时
7、,如果发现程序需要的虚地址没有对应的物理内存,即发出请求页要求。如果有空闲的内存可供分配,就请求分配内存(用到内存的分配和回收),并把正在使用的物理页记录在缓存中(用到缓存机制)。如果没有足够的内存可供分配,则调用交换机制,腾出一部分内存。另外,在地址映射中要通过TLB(翻译后援存储器)寻找物理页;交换机制中用到交换缓存,并且把物理页内容交换到交换文件中,也要修改页表来映射文件地址。Linux虚拟内存实现原理如图8-1所示。图8-1Linux虚拟内存实现原理一般建议虚拟内存容量应当按物理内存的两倍进行分
8、配。如果物理内存有256MB或更多时,可以缩小虚拟内存。Linux将把大量的内存用于Cache,在资源紧张时收回。只要看到swap为0,或该数很小即可放心,内存放着不用才是最大的浪费。3.内存泄漏和回收内存的方法(1)内存泄漏的定义通常所说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的、大小任意的(内存块的大小可以在程序运行期决定)、使用完后必须显示释放的内存。应用程序一般使用malloc、realloc、new等函数从堆中分配到一
此文档下载收益归作者所有