电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOC文档下载
分享到微信 分享到微博 分享到QQ空间

Linux虚存分析报告

  • 资源ID:472180328       资源大小:1.13MB        全文页数:29页
  • 资源格式: DOC        下载积分:20金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要20金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

Linux虚存分析报告

Linux 虚 存 分 析 报 告方 存 好第一章 前 言2第二章 LINUX虚存管理概述31、Linux虚存管理的基本特点32、Linux虚存管理的主要实现技术3第三章 LINUX虚存管理数据结构51、32-bit虚拟地址52、Linux的多级页表结构53、页表项的格式64、动态地址映射75、用户进程的虚拟内存结构86、我们的工作10第四章 PROCESS的虚存管理数据结构的建立、维护、拆除及相关系统调用流程111、进程的载入、创建及内存管理数据结构和链结关系的建立112、数据结构及链结关系的拆除(sys_exit)133、缺页中断服务14第五章 主要函数分析16Memory.c16mmap.c22第六章 后记29第一章 前 言Linux是一个功能强大的操作系统,而内存管理则是操作系统的核心,它负责管理计算机系统的存储器。作为操作系统的核心,必须能够克服物理内存的局限,使用户进程在透明方式下,拥有比实际物理内存大得多的内存。其策略之一就是使用虚拟内存。Linux成功地实现了以虚拟内存为核心的内存管理策略,强大得分页机制,公平得交换方式,各类有效得高速缓存,以及以页保护为主得保护措施等。内存管理的目的是要尽可能地方便用户。同时Linux系统通过对用户进程虚存的有效管理,作到了虚存对一般用户和Linux程序员的透明。本文首先阐述了Linux虚存管理以基本特点和主要实现技术,并分析了Linux虚存管理的主要数据结构及其相关关系。围绕它的建立、维护、使用和拆除,作了一个粗浅的剖析,因本人水平有限,有不当之处,请老师指正。同时应该指出的是本文所做的工作离不开同组的林涛、徐玫峰和范昭伟同学的帮助,谢谢他们。第二章 Linux虚存管理概述Linux的内存管理采用页式管理,使用多级页表,动态地址转换机构与主存、辅存共同实现虚拟内存:每个用户Process拥有4GB的虚拟地址空间,Process在运行过程中可以动态浮动和扩展,为用户提供了透明的、灵活有效的内存使用方式,下面简述Linux虚存管理以基本特点和主要实现技术:1、 Linux虚存管理的基本特点1. 更大的地址空间。虚拟内存可以是系统实际拥有的物理内存的若干倍。因而它使得操作系统看起来拥有比实际大得多的内存。2. 合理的物理内存分配。Linux通过共享和交换策略,使各个运行的进程能公平地共享内存。3. 保护。Linux存储管理子系统为每一内存页设置了“上锁位”,在线性地址及每级页表页项上设置了“读/写”位,这样来确保某一个进程不受其他进程的干扰。即使某一个进程失败了,也不会影响到其他进程和操作系统本身。4. 共享虚拟内存Linux实现的虚拟内存允许两个进程之间互相共享内存,例如:共享的库。在这种情形之下,库代码仅存在于一个进程,而不需要为每一个应用都复制一份。2、 Linux虚存管理的主要实现技术1、 请求调页(demanding paging)与内存扩展用户Process创建时,并不是将它所需所有页都分配给相应物理页。开始时只装入页面中Process的第一个页面,其他页根据Process运行过程的请求从外存调入所需页面,当Process访问一个页表项P位为0的页中地址时,表示此页不在主存中,将产生缺页中断,系统调用 handle_mm_fault()处理访问异常,为之分配相应物理页后,它再调用s()函数,从外存中读入该页面。Linux是一种请求式分页存贮管理,这才使之可以运行大于主存空间的Process。2、 页换出策略内存中页面不足时,Linux使用页面AGE技术实现了页淘汰策略的最近最少使用(LRU)算法:即每次换出时,总是选择最老的页换出,对易于从其他设备上获取的非脏(not dirty)页面。Linux采用丢弃(discarding)技术,如果发生过写操作,则将该页写入系统的S中,这样就可以加快换入的速度。3、 内存共享Linux将内存划分为4K大小的页面,为内存共享提供了基础:(1)不同进程间页面共享时,可令共享该页的Process 的页表项(pte)均指向该页。(2)对kernel代码和数据段的共享,通过Process创建时fork() 函数将kernel代码和数据段映射到用户虚存的3GB4GB的空间中去,所以每个Process都可以通过一定方式共享kernel的代码和数据段。4、 内存保护采用了“Hole”技术、虚存段的保护、地址转换机构、页表存取控制位(R/W位)等技术实现了内存保护。“Hole”技术 物理内存前4K是一空页(empty_zero_page),用来捕获NULL指针的异常访问。在Process每个虚存段后,都有一个“4K”的“Hole”,用来捕获虚存段的越界访问。虚存段保护方式 主存中虚存段的全部或部分可以设为保护方式,防止非法访问。页表项存取控制位(R/W位) 页表项以“R/W”位表示此页的存取权限“1”为可读写,“0”为不可读写,可用来防止越权访问。地址转换机构 分页存贮管理方法中,地址转换机构进行的页面映象实际上防止了各Process的主存块间互不干扰,起到Process 隔离的作用。5、 动态地址变换利用i386的地址变换机构Linux实现了动态地址变换,Process执行时访问到某一虚拟地址时才确定其对应的物理地址。这种方式为Process存贮块的动态和动态扩展提供了基础。第三章 Linux虚存管理数据结构1、32-bit虚拟地址在Linux 中,4GB的虚存需通过32-bit 地址进行寻址。(Linux 中虚拟地址与线形地址为同一概念)虚拟地址被分割成3 个子位段,其中2 个子位段包含10 位, 1 个子位段包含12 位,如图2.1所示:123图132位虚拟地址3个子位段分别表示不同含义:子位段1 指向被称作页目录(PGD)的一张表,子位段2 指向被称作页表(PTE)的一张表,子位段3 指向页内地址。2、Linux的多级页表结构标准的Linux的虚存页表为三级页表,依次为页目录(Page Directory-PGD)、中间页目录(Page Middle Directory-PMD)、页表(Page Table)PTE)。如图2.2所示。图2 Linux的多级页表结构在i386机器上Linux的页表结构实际为两级,PGD和PMD页表是合二为一的。所有有关PMD的操作实际上是对PGD的操作。所以原代码中形如*-pgd-*()和*-pmd-*()的函数实现的功能也是一样的。页目录(PGD) 是一个大小为4K 的表,每一个process只有一个页目录,以4 字节为一个表项,分成1024 个表项(或称入口点);该表项的值为所指页表的始地址。32位虚拟地址的第1 个子位段共10 位,其值的范围从0 到1023,对应于页目录的一个入口点。页目录(PTE)的每一个入口点的值为此表项所指的一页框(page frame),32位虚拟地址的第2 个子位段共10 位,其值的范围从0 到1023。页框(page frame)并不是物理页,它指是虚存的一个地址空间。3、页表项的格式Linux中页表每一个表项的格式,如图所示:图3 页表项格式其中,各位段的含义如下:P:存在位,表示该表项对地址的转换是否有效。i386 处理器在P=0 时不解释表项中的任何位,此时这些位的含义完全由软件自行解释。P 位提供了至关重要的属性,以支持分页机制。如果P=1,则表示虚拟地址所对应的页框存在于物理内存中,访问该虚拟地址的程序可以正常运行;P=0,则表示虚拟地址所对应的页框不存在于物理内存中,访问该虚拟地址的程序将会引发页访问异常,产生缺页中断。使得Operating System 可以把缺少的页从磁盘上读入内存,并将读入页存入到表项中,然后将该页标志为存在,再使引起异常的程序继续执行。R/W:读写位,表示对该表项指向的页可以进行读、写或执行操作。R/W=1 则该页可写,可读,且可执行;R/W=0 则该页可读,可执行,但不可写。当处理器处于特权级02时,R/W位被忽略。如该表项位于页目录中,则作用于该表项映射的所有各页。U/S:用户/系统位。U/S=1 则该页可在任何处理器特权级下访问;U/S=0 则该页只能在处理器特权级02下被访问。如该表项位于页目录中,则作用于该表项映射的所有各页。D:已写标志位。在对该表项映射的页进行写访问之前,处理器对该位置1。如该表项是页目录中表项,处理器不修改D位。Address:页框物理地址的高20位。系统将物理内存分割成4K大小的内存页框,Address实际上代表了页框的帧号。4、动态地址映射Linus虚存采用动态地址映射方式,即Process的地址空间和存储空间的对应关系是在程序的执行过程中实现的:Process每用到一个地址时, 都需虚存的地址转换机构把虚拟地址转化为内存的实际地址。其地址映射如下图所示:图4 32位虚拟地址转换图动态地址映射使Linux可以实现Process在主存中的动态重定位,虚存段的动态扩展和移动;也为虚存的实现提供了基础。5、用户进程的虚拟内存结构用户进程的虚拟内存结构如图所示:mm_struct每一个进程的task_struct中都有一个结构mm_struct,此结构包含了进程中与储存管理相关的大部分信息,其申明如下:struct mm_struct int count;/ 使用该mm结构的个数,如果是多处理机,则有可能count > 1pgd_t * pgd; /* 进程页目录的起始地址,如上图所示 */unsigned long context;unsigned long start_code, end_code, start_data, end_data;/*start_code、end_code:进程代码段的起始地址和结束地址。start_data、end_data:进程数据段的起始地址和结束地址。*/unsigned long start_brk, brk, start_stack, start_mmap;unsigned long arg_start, arg_end, env_start, env_end;/* arg_start、arg_end:调用参数区的起始地址和结束地址。env_start、env_end:进程环境区的起始地址和结束地址。*/unsigned long rss, total_vm, locked_vm;/* rss:进程内容驻留在物理内存的页面总数。*/unsigned long def_flags;struct vm_area_struct * mmap; /* 以双向链表组成的vma模块的首指针。 */struct vm_area_struct * mmap_avl; /* 以avl树结构组成的虚拟空间的首指针。*/struct semaphore mmap_sem;用户进程虚存管理的数据结构如图5所示。用户共有4GB的虚存空间,实际可申请的虚存空间为03GB。3GB4GB的虚存空间在用户进程创建时,已由函数fork()将kernel的代码段和数据段映射到3GB4GB的虚存空间。因而所有进程的3GB4GB的虚存空间的映象都是相同的,从而以这种方式使所有进程共享kernel的代码段和数据段。

注意事项

本文(Linux虚存分析报告)为本站会员(pu****.1)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.