免费预览已结束,剩余3页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机操作系统课程小论文Linux内存管理机制姓名:汪青松班级:10网络工程1班学号:1004031010Linux内存管理机制班级:10级网络工程1班 姓名:汪青松 学号:1004031010一、 概述 现代操作系统允许多个程序同时运行,因此,内存中需要同时存放这些程序,操作系统采用的存储管理方案有分区存储管理、分页式存储管理、分段式存储管理和段页式存储管理。在Linux平台上,多任务运行是不可或缺的,在合理的进程调度算法控制下还得合理的管理内存机制,除了在物理内存的支持下,Linux还得借助虚拟内存等来容纳更多的程序运行,没有足够的内存空间来供程序运行,机器则会出现假死机、服务异常等问题,如果Linux虽然可以在一段时间内自行恢复,但是恢复后的系统已经基本不可用了。因此,合理规划和设计Linux内存的使用,是非常重要的。二、 Linux下内存管理框架在Linux中对于内存的管理涉及到:页面管理、连续内存区管理和非连续存储区管理,而对于内存管理的方式通常为直接使用、使用slab分配器和使用非连续的存储区。其Linux采用页作为内存管理的基本单位,其采用的标准的页面大小为4KB,采用三次映射机制实现从线性地址到物理地址的映射。Linux内核使用页描述符来跟踪和管理物理内存,每个物理页面都用一个页描述符表示,页描述符用struct page 的结构描述,所有物理页面的描述符组织在men_map数组中,page则是对物理页面描述的一个数据结构Linux采用buddy算法来解决内存的碎片问题。三、 Linux对虚拟内存的管理在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,在这方面,区别于Windows的内存管理。主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows 是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间。换句话说,每增加一些物理内存,Linux 都将能充分利用起来,发挥了硬件投资带来的好处,而Windows只将其做为摆设,即使增加8GB甚至更大。Linux 的这一特性,主要是利用空闲的物理内存,划分出一部份空间,做为cache 和 buffers ,以此提高数据访问性能。从而引出物理内存的特性。对于从物理内存中虚拟出来的内存可以解决内存容量的问题,还拥有许多的附加功能:诸如大地址空间;进程保护;内存映射;灵活分配物理内存;共享虚拟内存等。Linux对于虚拟内存的管理以进程为基础,如32位的线性进程映射到4Gb的虚拟空间中去,从0XC0000000到0XFFFFFFFF的1Gb空间为所用进程所共享的内核空间,每个进程都有自己的3Gb用户空间。四、 Linux对物理内存的管理在Linux中对于物理内存的管理主要是通过页面的方式(一)、物理内存的页面管理在内存基本框架中已经提起,Linux对于物理内存的空间主要是通过分页的方式来进行管理的,其具体做法就是将物理内存划分成大小相同的物理页面。在X86平台下每个页面的大小为4KB,4KB是大多数磁盘块大小的倍数,传输效率高,管理方便。Linux设置了一个mem_map数组管理内存页面,它开始时由free_area_init()来初始化创建,并且放在物理内存的底部。(图一)mem_map数组结构(图二)Buddy算法(2) 、空闲页面的管理(Buddy算法)Buddy的基本思想是:首先把内存中的所有页面按照2n划分其中n=05,对一个内存空间按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.c中定义如下:#define NR_MEN_LIST 6Static struct free_area_struct free_menNR_MEN_LIST;Struct free_area_structStruct 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_area数组定义如下:Typedef struct free_area_structStruct list_head free_list;Unsigned int *map;free_area_t; (二)、虚拟内存分配在分配在物理申请较大的内存空间时,使用vmalloc()。由vmalloc()申请的内存空间在虚拟内存中是连续的,它们映射到在物理内存时,可以使用不连续的物理页面,而且仅把当前访问的部分放在物理页面中。Vmalloc申请内存如下:#define A_MEGABYTE 1024*1024int 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) 、缓存区高速缓存:包含了从设备中读取的数据块或写入设备的数据块。缓冲区高速缓存由设备标示号和块索引,因此可以快速找到数据块。如果数据可以在缓冲区中高速缓存中找到,则不需要从物理块设备上读取,从而加快了访问速度。(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的发展过程中需要不断完善和优化内存的管理单元的功能和性能。针对某些特殊和具体的领域和行业,还可以根据自己的需求定制Linux内核。而内存管理单元作为Linux操作系统的核心部分,更是起着举足轻重的作用。八、 参考文献:1 宋锦华, 马传琦. Linux内存管理-Buddy算法探究J. 福建电脑 , 2009,(01) 2赵鲲鹏,苏葆光 现代计算机:下半月版 2006 第5期3邱铁 Linux应用与开发典型实例精讲,清华大学出版社4周苏,金海溶操作系统原理实验,科学出版社5ChinaUnix:http:/blog.ch
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市排水系统自动化改造方案
- 加强黄河流域水生态治理和保护的策略及实施路径
- 压塑加工项目可行性分析报告范文(总投资21000万元)
- 装配式建筑碳足迹核算与供应链管理的优化
- 污水管网漏损检测与修复方案
- 校园多媒体互动宣传系统设计方案
- 建筑项目阶段验收及移交方案
- 铜矿开采工人技能认证培训计划
- 文学评论散文真题及答案
- 蒸气吸附仪项目可行性研究报告(总投资6000万元)(28亩)
- 2025年四川省公务员考试行政职业测试卷
- 2025年艾梅乙培训试题(附答案)
- 2025江苏南京市产业招商中心有限责任公司招聘18人笔试考试参考试题及答案解析
- 学堂在线 现代生活美学-花香茶之道 章节测试答案
- 2025年川教版(2024)小学信息科技三年级(上册)教学设计及反思(附目录P118)
- 2023年全国中学生英语能力竞赛NEPCS高一组决赛含答案和听力
- GB/T 5023.5-2008额定电压450/750 V及以下聚氯乙烯绝缘电缆第5部分:软电缆(软线)
- GB/T 41261-2022过程工业报警系统管理
- 2022年新整理《研究生中国特色社会主义理论与实践研究》考题附答案
- 农产品质量与安全知识讲座模板
- GA/T 1068-2015刑事案件命名规则
评论
0/150
提交评论