Mlock分析报告课案_第1页
Mlock分析报告课案_第2页
Mlock分析报告课案_第3页
Mlock分析报告课案_第4页
Mlock分析报告课案_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Mlock分析报告第一部分Linux存储管理机制一 80386体系结构的内存管理功能80386有两种工作模式:实地址模式和虚拟地址模式(又称保护模式)。实地址模式是为了与8086兼容而设置的。这时,只能寻址1MB的地址空间,不能启用分页机制,不区分特权,分段功能也受到了极大的限制。而在保护模式下,分段机制得到加强。虚地址空间可为16K个段,每个段的大小可变,最大达到4GB。段具有独立的属性,包括段长、起始地址、段类型和保护位等。而且80386提供片内页管理机制,通过两级页表来实现线性地址 和物理地址之间的映射,为LINUX的虚拟内存管理提供了直接的支持。80386的虚拟地址模式同时使用了分段机

2、制和分页机制两级地址转换机制来进行地址 转换。第一级使用分段机制,把包含段地址和段内偏移量的虚拟地址,转换为一个线性地址。第二级使用分页机制,把线性地址转换为物理地址。如图所示。存储管理子系统实现以下这些功能:1 .更大的地址空间:操作系统似的系看起来拥有一个比它实际拥有的地址大的多的地址空间,虚存能够实 现比物理存储空间许多倍的地址空间.2 .保护每一个进程在系统中都有它自己的地址空间,虚地址空间使得各个进程完全分离开来, 因此一个进程运行一个应用程序完全不会影响到另一个进程.另外,硬件级的虚存机制为内存提供了写保护,这就保证数据不会被非法的应用程序重写.3 存储映像存储映像用来把图象或数据

3、文件映像到一个进程的地址空间.在存储映像中,文件的内 容直接和进程的虚拟地址空间相连 4平衡物理存储空间的分配存储管理子系统允许每一个运行的进程公平地竞争系统的物理存储空间.5 .共享虚存空间二 LINUX的分页管理机制在LINUX中,每一个用户进程都可以访问4GB的线性虚拟内存空间。 其中从0到3GB的虚拟内存地址是用户空间,用户进程可以直接对其进行访问。从3GB到4GB的虚拟内存地址为系统空间,存放仅供核心态访问的代码和数据。当用户进程试图对其访问时,就会触发处理器的特权级转换(从处理器的特权级3切换到特权级 0),即从操作系统的用户态切换到核心态。所有进程从3GB到4GB的虚拟空间映像都

4、是一样的,LINUX以此方式让核心态进程共享代码段和数据段。核心态虚拟空间从 3GB到3GB+4M的一段(也就是进程页目录第768项所管辖的范围),被影射到物理空间 0到4M段。因此,进程处于核心态时,只要通过访问虚拟空间 3GB 到3GB+4M段,即访问了物理空间 0到4M段。上述两种空间对用户进程来说都是透明的,用户进程所访问的内存地址都是连续的4GB线性虚拟地址。因此,我们首先关心的是LINUX是如何划分虚拟空间的。LINUX采用按需调页” (Dema nd Pagi ng)技术管理虚拟内存。标准 LINUX的虚存页表应 为三级页表,依次为页目录(PGD, Page Directory)

5、、中间页目录(PMD , Page Middle Directory) 和页表(PTE, Page Table)。每一个page都有一个标识符 PFN (Page Frame Number),因此,虚地址也就由两部分组成:一个页内偏移地址和一个 PFN,每当处理器遇到一个虚地址 ,它就将虚地址的 PFN 转化成一个物理页面的起始地址,然后,在根据page_offset的值,找到实际的物理地址 ,这个过程中间要通过一个页表来实现 ,其转换过程如下:匚Lmftl 1Lexel 23VTKHJAL ADDRESSLwel 丄PGIiFFlifPeTstdeLevel J 兔序TablePFH图3.虚

6、地址经过页表转换成实地址的过程在一个页表中,每一行包含了下列数据:有效位:用来描述页表的这个入口是否可用这个入口所对应的物理页表数存储控制信息:其中包括是否可写,是否可执行页表的访问是通过把虚地址的PFN作为页表的偏移量来访问的.例如PFN=5 ,则访问的页表的入口为第六个表项 (0为第一个表项).处理器处理一个页表的地址时,首先必须算出页表的PFN和页内偏移量.要实现表的大小为 2的幕级大小,这个可以通过掩码(masking)和移位(shifting )来实现.处理器利用虚地址的PFN作为目录来检索要处理处的页表的入口.如果这个入口是可用的,处理器从页表中取出这个页表项所对应的物理地址的PF

7、N .如果这个入口不可用,则说明进程试图存取一个不在内存中的页面.在这种情况下,处理器不能处理,应该叫给操作系统来实现,以便操作系统能够处理它.进程通过发出一个page fault来通知操作系统,然后操作系统就能够解释发出页面失配及其原因,如果进程从页表中访问一个可用的入口,则进程从页表中取得物理地址的PFN,然后把这个数乘上页表的大小,以便的到页表在物理内存中的起始地址,最后在加上偏移量就得到了要取数据或指令的正确内存地址.Linux的虚存管理1.共享虚存虚存使得几个进程更容易共享存储区.所有存储操作都是通过页表来实现的,每一个进程都有它私人的页表.如果两个进程想要共享一页物理内存,它的页帧

8、号(PFN)必须在两个进程的一个页表入口中能够找得到.每一个进程的虚存都是有一个mm_struct结构来描述的,其中包括正在执行的映像的信息和一个指向许多vm_area_struct结构的指针,每一个vm_area_struct描述一段虚存的起始地址和结束地址,进程对那一段的存取权限和对这段存储区的一组操作。当一个映像被映射到一个进程的虚地址中,一组 vm_area_struct结构就产生了,每一个 vm_area_struct结构都代表一段可执行的映像,可执行代码、初始化数据(变量)、未初始化数据等等。Linux支持许多标准的虚存操作,当vm_area_struct被产生后,一组对于虚存的正

9、确的操作也就跟他联系起来。2 .按需调页中用到的虚存段的操作当一个影响被影射进进程的虚地址后,它就可以执行了。只要影象的起始地址被印象 进物理内存, 它就要存取一个尚不在内存中的虚存段。 当一个进程访问一个尚没有合法的页 表入口的虚地址,它就回向操作系统报告一个页面失配的错误。页面失配错误描述发生页面失配的虚地址和引起页面失配的存储类型。Linux 必许找到表示发生页面失配的存储区的虚存段,由于沿着vm_area_struct 结构搜索对于处理页面失配的效率有非常重要的关系,这些虚存段被连接成AVL 树结构,如果表示页面失配的虚存段,则这个进程访问了一个非法的虚地址。 Linux 将用信号通知

10、进程, 让进程发出一个 SIGSEGV 信号,如果进程不能处理这样的信息,则进程将要终止。3. System V共享内存页面System V 共享内存是一种内处理通讯机制(in ter-process com muni cati on mecha nism),允许两个或多个共享同一段虚存的进程互相通讯。进程如何用这种方式共享内存在IPC-chapter 一章中有详细的说明,现在可以很清楚地说 System V的每一块被共享的内存都 是由一个 shmid_ds 的数据结构描述, 这个数据结构中包含一个指针指向一个 vm_area_struct 数据结构形成的队列,每一个共享这一段虚存的进程在这一

11、个链表中都有一个节点, vm_area_struct 数据结构描述了在进程的什么地方开始使用共享的虚存。 对于 System V 中的 共享虚存, 指向它的所有 vm_area_struct 结构都是通过 vm_next_shared 和 vm_prev_shared 连接起来的。每一个 shmid_ds 数据结构也包含一个页表入口的链表,其中每一个 shmid_ds 数据结构包含了一个共享的虚页所映像到的物理页面入口。尽管虚存管理允许进程有不同的地址空间(虚) ,但有时也需要进程共享同一段存储空 间.例如有可能有几个进程运行于系统中且同时使用bash 命令的 shell .此时并不是各进程在

12、自己的地址空间中分别拥有一个bash 的拷贝,更好的方法是在物理空间上有一个bash的拷贝,所有运行 bash的进程读共享它,动态链接库是另一个多进程共享执行代码的 例子.存储共享机制也可以用来实现进程内部通讯, 两个或多个进程通过共享的存储空间来 交换信息,在 INTEL 微机上, LINUX 的页表结构实际为两级。 80386 体系结构之页管理机制中的 页目录就是PGD,页表就是PTE。而PMD和PGD实际上是合二为一的。在虚存段的加锁 操作中 , 主要涉及到的是对于页表的操作 :在/i nclude/li nu x/page.h 中通过一些宏定义来实现 ,#define PAGE_SHI

13、FT 12#define PAGE_SIZE (1UL i_mmap, for shm areas,* the list of attaches, otherwise unused.*/struct vm_area_struct *vm_next_share;struct vm_area_struct *vm_pprev_share;struct vm_operations_struct * vm_ops;unsigned long vm_offset;struct file * vm_file;unsigned long vm_pte; /* shared mem */;vm_mm 指向这个

14、虚存段所属的 mm_struct 结构的指针 vm_start,vm_end :虚存段的起始、结束地址vm_next :同属于一个 mm_struct 的 vm_area_struct 形成一个链表, vm_next 指向下一 个此链表中的 vm_area_struct 节点vm_page_prot:vm_flags :虚存段的标志位,表示虚存段是否加锁vm_avl_height 、 vm_area_left 、 vm_area_right :为了便于查找,同一个mm_struct 中的vm_area_struct 组织成一个 avl 树,三个参数分别表示 avl 树的高度、当前节点在 avl

15、 树 中的左儿子节点和右儿子节点vm_next_share 、 vm_pprev_share:vm_ops:指向一个 vm_area_struct操作集的指针,在此操作中,包含了对 vm_area_atruct 的操作vm_offset :由于虚存段的组织需要映射到页的存储机构中,其中的vm_offset表示虚存段的起始地址对于此虚存段起始地址所在也的偏移量vm_file :指向虚存段所在文件的指针, 同时对应的 file 中也有一个计数器 f_count 用来 表示属于这个文件的虚存段的数目vm_pte :所在页表的入口在 Linux 中采用段页式来进行存储区的管理 其中进程的虚存管理的数据

16、结构图示如下:图2.进程的虚存管理数据结构第二部分虚存加锁1 .虚存加锁的作用虚存加锁在进程的页面换入和换出的工作中发挥了重要作用,在页面的换出时,如果表示页面的虚存段被加锁,则虚存段所表示的页面不能被换出,这种机制在使一些较常用的进程固定于内存,似的调用这些进程的书牍大大加快,同时也减少了许多页面调入和换出的工作,从而似的CPU的利用率更高。进程进行页 面的换出时,首先要找到表示该页面的vm_area_struct结构,如 果vm_area_struct结构中有加锁的标志,则该页面不能被换出。操作系统在检查其他的页面, 其采用的算法是LRU (Least Recently Used)算法。器

17、具体的实现在页面的管理机制一章中有 详细的说明。2 .原代码分析(mlock.c中的函数分析)1) static inline int mlock_fixup_all(struct vm_area_struct *vma,int newsflags)该函数用于对整个虚存段进行加锁,其中vma指向所要加锁的虚存段,newsflags表示对虚存段进行操作后所加的标志。其中当n ewsflags=VM_LOCKED 时,表示对虚存段加锁;当newsflags中的第十二位数位0时,则表示对内存解锁。VM_LOCKED 的定义见 /linux/include/linux/mm.h 其定义为:#defi

18、ne VM_LOCKED 0x2000即将标志为的第十二位赋值为1(从左到右)则表示虚存段为加锁状态,如此位 为0,则表示虚存段为解锁状态。函数图示如下:vma-vm stutvniA-vin startml o ck_ edup_allO函数的图示说明2) static inline int mlock_fixup_start(struct vm_area_struct * vma, un sig ned long end, int n ewflags)该函数用于对虚存段的一部分加锁,加锁的部分为从虚存段的起始地址开始,到end地址结束,参数的含义跟上一函数的相同,其中end表示要加锁的虚存

19、段的结束地址。图示如下:startn-vitL strtendvm-*vm_endn-aw_erud vma-vin_staitvma-vm_eiidmlo ck_ fixedup_startQ函数的图不说明3) mlock_fixup_end(struct vm_area_struct * vma,un sig ned long start, int n ewflags)该函数用于对虚存段的一部分加锁,其加锁的部分为从虚存段中的一个地址 开始,到虚存段的结束地址这一段进行加锁。其中start表示要加锁的起始地址图示如下:startvma-vm startvnna-7M startstartvma-am_endn*. startvma-*vtn_endn-vm_endmlo ck_fbvni_s1artstartendvma-viti_endvma-ain startright-vin_startright-vm_endmlo ckfixedup _m iddle()函数的图示说明5) mlock_fixup(struct vm_area_struct * vma, unsigned long start, un sig ned long en

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论