操作系统ch4.8实例研究linux虚存管理

上传人:第*** 文档编号:54446166 上传时间:2018-09-13 格式:PPT 页数:35 大小:282KB
返回 下载 相关 举报
操作系统ch4.8实例研究linux虚存管理_第1页
第1页 / 共35页
操作系统ch4.8实例研究linux虚存管理_第2页
第2页 / 共35页
操作系统ch4.8实例研究linux虚存管理_第3页
第3页 / 共35页
操作系统ch4.8实例研究linux虚存管理_第4页
第4页 / 共35页
操作系统ch4.8实例研究linux虚存管理_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《操作系统ch4.8实例研究linux虚存管理》由会员分享,可在线阅读,更多相关《操作系统ch4.8实例研究linux虚存管理(35页珍藏版)》请在金锄头文库上搜索。

1、4.8实例研究:Linux虚拟存储管理,4.8.1 Linux存储管理概述 4.8.2 进程的虚拟地址空间 4.8.3 Linux物理内存空间的管理 4.8.4 用户态内存的申请与释放 4.8.5 内存的共享和保护 4.8.6 交换空间、页面的换出和调入 4.8.7 缓冲机制,4.8.1Linux虚拟存储管理概述(1),Linux用户进程可访问4GB线性地址空间。从0从3GB的虚拟内存地址是用户空间。 3GB到4GB的虚拟内存地址是内核态空间,存放仅供内核态访问的代码和数据。,Linux虚拟存储管理概述(2),页表分为三层:页目录PGD、中间页目录PMD和页表PTE。Pentium计算机上被简

2、化成两层,PGD和PMD合二为一。每个进程有一个页目录,存储该进程所使用的内存页面情况,Linux虚拟存储管理概述(3),使用fork()创建进程时,分配内存页面的情况: 进程控制块1页;内核态堆栈1页;页目录1页;页表若干页。使用exec()系统调用时,分配内存页面的情况: 可执行文件的第1页;用户堆栈的1页或几页。,482Linux进程的虚拟地址空间,进程虚拟地址空间由许多个连续虚地址区域构成,采用虚存段vma及其链表来表示。 一个vma是某个进程的一段连续虚存空间,这段虚存里的所有单元拥有相同特征,如属于同一进程、相同的访问权限、同时被锁定、同时受保护。,数据结构vm_area_stru

3、ct描述(1),struct vm_area_struct struct mm-struct *vm_mm;/*虚存段参数*/ unsigned long vm_start;/*虚存段始址*/ unsigned long vm_end;/*虚存段末址*/ pgprot_t vm_page_prot; unsigned short vm_flags;,/*按地址分叉的vma的AVL树* shrot vm_avl_height; struct vm_area_struct *vm_avl_left; struct vm_area_struct *vm_avl_right; /*按地址分叉的vma链

4、接指针* struct vm_area_struct *vm_next; /*或是在一个结点区双向环链表中,或在共享内存区映射表中,或未用* struct vm_area_struct *vm_next_share; struct vm_area_struct *vm_prev_share; /*用于共享内存*,数据结构vm_area_struct描述(2),数据结构vm_area_struct描述(3),struct vm_operations_struct vm_ops; *封装的操作如open, close* unsigned long vm_offset;/*相对文件中共享内存起点的位

5、移* struct inode *vm_inode; /*指向文件inode 或NULL* unsigned long vm_pte; ;,进程虚存管理数据结构,4.8.3Linux物理内存空间的管理,物理内存以页框为单位,长度为4KB。 对物理内存的管理通过mem_map表描述, men-map是由men-map-t组成的数组,每个men-map-t描述一个物理页框。,typedef struct page主要内容 page前后向链接指针page页cache和ha指针 page访问进程的计数 page状态位和修改标记 页帧内存放代码或数据所属文件的inode 页帧年龄,越小越先换出 页帧作为

6、缓冲区,则指示地址 页帧在mem_map表中的下标,bitmap与free-area的关系,页面分配和回收(1),所有的空闲物理页帧组织成NR_MEM_LISTS的双向链表,存储在free_area数组中。每个链表节点的包括三个数据向:next和prev是链表指针,map指向bitmap表。,页面分配和回收(2),采用buddy算法分配空闲块。当请求分配长度为2i个页帧的块时,从free_area数组的第i条链表开始受搜索,如找不到,搜索第i+1条链表,以此类推。 如果找到的空闲块正好等于需求,直接把它从来链表中删除,返回首地址。如果找到的空闲块大于需求,则需要把它一分为二,前半部分插入前一条

7、链表,取后半部分。如果还大,则继续对分,取一半留一半,直至相等。同时,bitmap表页必须相应调整,页面分配和回收(3),回收空闲块时,根据bitmap表中的对应组,判断回收块的前后是否为空闲块。若是则合并,并调整bitmap表对应位,从free_area的相应空闲链表中取下该空闲块并归还。这是一个递归过程,直到找不到空闲块邻居,将最大的空闲块插入free_area的相应空闲链表。,4.8.4用户态内存的申请与释放(1),用户进程使用vmalloc()和vfree()函数申请和释放大块存储空间,分配的存储空间在进程的虚地址空间中是连续的,但它对应的物理页框仍需缺页中断后,由缺页中断处理例程分配

8、,所分配的页框也不是连续的。,用户态内存的申请与释放(2),vmalloc( )和vfree( )函数,其执行如下:申请时需给出申请的长度,调用set-vm-area内部函数向vmlist索取虚存空间。如果申请成功,将会在vmlist中插入一个vm-struct结构,并返回首地址,当申请到虚地址空间后更改页目录和页表。,用户态内存的申请与释放(3),释放时需给出虚拟空间首地址,沿着vmlist搜索要释放的区域,找到表示该虚拟内存块的vm-struct结构,并从vmlist表中删除,同时清除与释放虚存空间有关的目录项和页表项。,485内存的共享和保护(1),内存共享以页共享的方式实现,共享该页的

9、各个进程的页表项直接指向共享页,这种共享不需建立共享页表,节省内存,但效率较低。当共享页状态发生变化时,共享该页的各进程页表均需修改,要多次访问页表。,内存的共享和保护(2),对进程的虚拟地址加锁或保护,实质是对vma段的vm_flags属性与VM_LOCKED进行或操作。 虚存加锁后,对应的物理页框驻留内存,不再被页面置换程序换出。 加锁操作有4种:对指定的一段虚拟空间加锁或解锁;对进程所有的虚拟空间加锁或解锁。,内存的共享和保护(3),对进程的虚拟地址空间实施保护操作是对vma段的vm_flags重置PROT_READ、PROT_WRITE和PROT_EXEC参数,并重新设定vm_page

10、_prot属性。同时,对虚拟地址范围内所有页表项的访问权限也做调整,保护操作由系统调用mprotect实施。,4.8.6交换空间、页面换出和调入 1、交换空间,Linux采用两种方式保存换出页面。一是使用块设备,如硬盘的一个分区,称作交换设备 另一种是使用文件系统的一个文件,称作交换文件。两者统称为交换空间。,交换设备和交换文件的内部格式(1),前4096个字节是以字符串“SWAP_SPACE”结尾的位图。位图的每位对应一个交换空间的页面,置位表示对应的页面可用于换页操作。 第4096字节后是存放换出页面的空间。每个交换空间最多可以容纳(4096-10)*8-1=32687个页面,最多允许管理

11、MAX_SWAPFILES(缺省值为8)个交换空间。,交换设备和交换文件的内部格式(2),交换设备中,属于同一页面的数据总是连续存放的,第一个数据块地址一经确定,后续的数据块可按顺序读出或写入。 交换文件中,同一页面的数据虽然逻辑上是连续的,但实际的物理存储是零散的,交换这样的页面,必须多次访问磁盘扇区,意味着磁头的反复移动、寻道时间的增加和效率的降低。,2 页交换进程和页面换出(1),当物理页面不够用时,存储管理必须释放部分物理页面,把它们的内容写到交换空间。内核态交换线程kswapd完成这项功能。 Kswapd不仅能够把页面换出到交换空间,也能保证系统中有足够的空闲页面以保持存储管理系统高

12、效的运行。,页交换进程和页面换出(2),Kswapd在系统初启时由init创建,调用init_swap_timer()函数设定,并转入睡眠。 每隔10ms响应函数swap_tick()被周期性激活,它察看系统中空闲页面是否太少,依次从三条途径缩减物理页面:(1)缩减page cache和buffer cache;(2)换出SYSTEM V共享内存占用页面;(3)换出或丢弃进程占用页面。,3 缺页中断和页面换入(1),当进程访问了一个还没有有效页表项的虚拟地址时,处理器将产生缺页中断,通知操作系统,并把缺页的虚拟地址(保存在CR2寄存器中)和缺页时访问虚存的模式一并传给缺页中断处理程序。,缺页中

13、断和页面换入(2),根据控制寄存器CR2传递的缺页地址,必须找到表示出现缺页的虚拟存储区的vm_area_struct结构,如果没有找到,说明进程访问了非法存储区,系统发出信号告知进程出错。 系统检测缺页时访问模式是否合法,如果进程对该页的访问超越权限,系统也将发出信号,通知进程的存储访问出错。,缺页中断和页面换入(3),通过以上两步检查,可以确定缺页中断是否合法,进而进程进一步通过页表项中的位P来区分缺页对应的页面是在交换空间(P=0且页表项非空)还是在磁盘中某一执行文件映像的一部分。最后进行页面调入操作。,487缓冲机制,虚存管理的缓冲机制主要包括: kmalloc cache swap

14、cache page cache,1 swap cache(1),如果被调出到交换空间的页面由于进程再次访问而调入物理内存,只要该页面调入后未被修改过,它的内容与交换空间中内容是一样的,交换空间中的备份是有效的。该页再度换出时,就不要执行写操作。 采用swap-cache表描述的swap cache来实现这种思想。swap cache实质上是关于页表项的一个列表。,每一物理页框都在swap-cache中占有一个表项,表项的总数就是物理页框总数。 若该页框内容是新创建的;或虽曾换出过;但换出后,该页框已被修改过时,则该表项清0。 内容非0的表项,正好是某个进程的页表项,描述了页面在交换空间中的位

15、置。 当一个物理页框调出到交换空间时,它先查swap cache。如果其中有与该面对应有效的页表项,那就不需要将该页写出,因为原有空间中内容与待换出的页面是一致的。,swap cache(2),2 page cache(1),页缓冲的作用是加快对磁盘文件的访问速度。文件被映射到内存中,每次读取一页,而这些页就保存到page cache中,用hash表page-hash-table来访问page cache,它是指向由page类型节点组成的链表指针。,page cache(2),每当需要读取文件一页时,总是先通过page cache读取。如果所需页面就在其中,就通过指向表示该页面的mem-map-t的指针;否则必须从申请一个页框,再将该页从磁盘文件中调入。,3 kmalloc cache,进程可用kmalloc()和kfree()函数向系统申请较小的内存块,而这两个函数共同维护了一个称作kmalloc cache的缓冲区,其主要目的是加快释放物理内存的速度。,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号