- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Mlock分析报告讲述
Mlock 分析报告
第一部分 Linux 存储管理机制
一 80386体系结构的内存管理功能
80386有两种工作模式:实地址模式和虚拟地址模式(又称保护模式)。实地址模式是为了与8086兼容而设置的。这时,只能寻址1MB的地址空间,不能启用分页机制,不区分特权,分段功能也受到了极大的限制。而在保护模式下,分段机制得到加强。虚地址空间可为16K个段,每个段的大小可变,最大达到4GB。段具有独立的属性,包括段长、起始地址、段类型和保护位等。而且80386提供片内页管理机制,通过两级页表来实现线性地址和物理地址之间的映射,为LINUX的虚拟内存管理提供了直接的支持。
80386的虚拟地址模式同时使用了分段机制和分页机制两级地址转换机制来进行地址转换。第一级使用分段机制,把包含段地址和段内偏移量的虚拟地址,转换为一个线性地址。第二级使用分页机制,把线性地址转换为物理地址。如图所示。
存储管理子系统实现以下这些功能:
更大的地址空间:
操作系统似的系看起来拥有一个比它实际拥有的地址大的多的地址空间,虚存能够实
现比物理存储空间许多倍的地址空间.
保护
每一个进程在系统中都有它自己的地址空间,虚地址空间使得各个进程完全分离开来,
因此一个进程运行一个应用程序完全不会影响到另一个进程.另外,硬件级的虚存机制为内存提供了写保护,这就保证数据不会被非法的应用程序重写.
存储映像
存储映像用来把图象或数据文件映像到一个进程的地址空间.在存储映像中,文件的内容直接和进程的虚拟地址空间相连
平衡物理存储空间的分配
存储管理子系统允许每一个运行的进程公平地竞争系统的物理存储空间.
共享虚存空间
二 LINUX的分页管理机制
在LINUX中,每一个用户进程都可以访问4GB的线性虚拟内存空间。其中从0到3GB的虚拟内存地址是用户空间,用户进程可以直接对其进行访问。从3GB到4GB的虚拟内存地址为系统空间,存放仅供核心态访问的代码和数据。当用户进程试图对其访问时,就会触发处理器的特权级转换(从处理器的特权级3切换到特权级0),即从操作系统的用户态切换到核心态。
所有进程从3GB到4GB的虚拟空间映像都是一样的,LINUX以此方式让核心态进程共享代码段和数据段。
核心态虚拟空间从3GB到3GB+4M的一段(也就是进程页目录第768项所管辖的范围),被影射到物理空间0到4M段。因此,进程处于核心态时,只要通过访问虚拟空间3GB到3GB+4M段,即访问了物理空间0到4M段。
上述两种空间对用户进程来说都是透明的,用户进程所访问的内存地址都是连续的4GB线性虚拟地址。因此,我们首先关心的是LINUX是如何划分虚拟空间的。
LINUX采用“按需调页”(Demand Paging)技术管理虚拟内存。标准LINUX的虚存页表应为三级页表,依次为页目录(PGD,Page Directory)、中间页目录(PMD,Page Middle Directory)和页表(PTE,Page Table)。
PGD PMD PTE Page Frame
图1. LINUX的三级页表结构
每一个 page 都有一个标识符 PFN (Page Frame Number), 因此,虚地址也就由两部分组成: 一个页内偏移地址和一个 PFN ,每当处理器遇到一个虚地址, 它就将虚地址的 PFN 转化成一个物理页面的起始地址, 然后, 在根据 page_offset 的值, 找到实际的物理地址, 这个过程中间要通过一个页表来实现, 其转换过程如下:
图3. 虚地址经过页表转换成实地址的过程
在一个页表中, 每一行包含了下列数据:
有效位: 用来描述页表的这个入口是否可用
这个入口所对应的物理页表数
存储控制信息:其中包括是否可写,是否可执行
页表的访问是通过把虚地址的 PFN 作为页表的偏移量来访问的. 例如 PFN=5 ,则访问的页表的入口为第六个表项( 0 为第一个表项).
处理器处理一个页表的地址时, 首先必须算出页表的 PFN 和 页内偏移量. 要实现表的大小为 2 的幂级大小,这个可以通过掩码(masking) 和移位(shifting)来实现.处理器利用虚地址的 PFN 作为目录来检索要处理处的页表的入口.如果这个入口是可用的,处理器从页表中取出这个页表项所对应的物理地址的PFN .如果这个入口不可用,则说明进程试图存取一个不在内存中的页面.在这种情况下,处理器不能处理,应该叫给操作系统来实现,以便操作系统能够处理它.进程通过发出一个 page f
文档评论(0)