电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Linux虚存分析报告

29页
  • 卖家[上传人]:pu****.1
  • 文档编号:472180328
  • 上传时间:2023-08-16
  • 文档格式:DOC
  • 文档大小:1.13MB
  • / 29 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、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成功地实现了以虚拟内存为核心的内存管理策略,强大得分页机制,公平得交换方式,各类有效得高速缓存,以及以页保护为主得保护措施等

      2、。内存管理的目的是要尽可能地方便用户。同时Linux系统通过对用户进程虚存的有效管理,作到了虚存对一般用户和Linux程序员的透明。本文首先阐述了Linux虚存管理以基本特点和主要实现技术,并分析了Linux虚存管理的主要数据结构及其相关关系。围绕它的建立、维护、使用和拆除,作了一个粗浅的剖析,因本人水平有限,有不当之处,请老师指正。同时应该指出的是本文所做的工作离不开同组的林涛、徐玫峰和范昭伟同学的帮助,谢谢他们。第二章 Linux虚存管理概述Linux的内存管理采用页式管理,使用多级页表,动态地址转换机构与主存、辅存共同实现虚拟内存:每个用户Process拥有4GB的虚拟地址空间,Process在运行过程中可以动态浮动和扩展,为用户提供了透明的、灵活有效的内存使用方式,下面简述Linux虚存管理以基本特点和主要实现技术:1、 Linux虚存管理的基本特点1. 更大的地址空间。虚拟内存可以是系统实际拥有的物理内存的若干倍。因而它使得操作系统看起来拥有比实际大得多的内存。2. 合理的物理内存分配。Linux通过共享和交换策略,使各个运行的进程能公平地共享内存。3. 保护。Linux存储

      3、管理子系统为每一内存页设置了“上锁位”,在线性地址及每级页表页项上设置了“读/写”位,这样来确保某一个进程不受其他进程的干扰。即使某一个进程失败了,也不会影响到其他进程和操作系统本身。4. 共享虚拟内存Linux实现的虚拟内存允许两个进程之间互相共享内存,例如:共享的库。在这种情形之下,库代码仅存在于一个进程,而不需要为每一个应用都复制一份。2、 Linux虚存管理的主要实现技术1、 请求调页(demanding paging)与内存扩展用户Process创建时,并不是将它所需所有页都分配给相应物理页。开始时只装入页面中Process的第一个页面,其他页根据Process运行过程的请求从外存调入所需页面,当Process访问一个页表项P位为0的页中地址时,表示此页不在主存中,将产生缺页中断,系统调用 handle_mm_fault()处理访问异常,为之分配相应物理页后,它再调用s()函数,从外存中读入该页面。Linux是一种请求式分页存贮管理,这才使之可以运行大于主存空间的Process。2、 页换出策略内存中页面不足时,Linux使用页面AGE技术实现了页淘汰策略的最近最少使用(LR

      4、U)算法:即每次换出时,总是选择最老的页换出,对易于从其他设备上获取的非脏(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”,用来捕获虚存段的越界访问。虚存段保护方式 主存中虚存段的全部或部分可以设为保护方式,防止非法访问。页表项存取控制位(

      5、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)、中

      6、间页目录(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=

      7、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:页框物理地址的高

      8、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, en

      9、d_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分享,可在线阅读,更多相关《Linux虚存分析报告》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.