1 / 21

4.8 实例研究: Linux 虚拟存储管理

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 的虚拟内存地址是内核态空间,存放仅供内核态访问的代码和数据。 • 页表分为三层:

declan
Download Presentation

4.8 实例研究: Linux 虚拟存储管理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 缓冲机制

  2. 4.8.1Linux虚拟存储管理概述(1) • Linux用户进程可访问4GB线性地址空间。从0从3GB的虚拟内存地址是用户空间。 • 3GB到4GB的虚拟内存地址是内核态空间,存放仅供内核态访问的代码和数据。 •页表分为三层: •页目录PGD、中间页目录PMD和页表PTE。 •Pentium计算机上被简化成两层,PGD和PMD合二为一。 •每个进程有一个页目录,存储该进程所使用的内存页面

  3. 4.8.2Linux进程的虚拟地址空间 • 进程虚拟地址空间由许多个连续虚地址区域构成,采用虚存段vma及其链表来表示。 • 一个vma是某个进程的一段连续虚存空间,这段虚存里的所有单元拥有相同特征,如属于同一进程、相同的访问权限、同时被锁定、同时受保护。

  4. 进程任务结构 task_struct 内存管理结构 mm_struct 虚存段结构 vm_area_struct vm_struct mmap vm_next pgd vm_op 页目录表pgd vm_area_struct vm_next vm_area_struct *open *close *swapout . . m m 页表PTE 页表PTE 页框PF 页框PF 进程虚存管理数据结构

  5. 4.8.3Linux物理内存空间的管理 • 物理内存以页框为单位,长度为4KB。 • 对物理内存的管理通过mem_map表描述, • mem-map是由mem-map-t组成的数组,每个mem-map-t描述一个物理页框。

  6. mem_map_t free_area bitmap next 0 ptev map 每位对应20页 1页 1页 每位对应21页 next 1 ptev map 每位对应22页 2页 2页 。 。 next 2 ptev map 4页 4页 . . . Bit map与free-area的 关 系

  7. 页面分配和回收(1) • 所有的空闲物理页帧组织成NR_MEM_LISTS的双向链表,存储在free_area数组中。每个链表节点的包括三个数据向:next和prev是链表指针,map指向bitmap表。

  8. 页面分配和回收(2) • 采用buddy算法分配空闲块。当请求分配长度为2i个页帧的块时,从free_area数组的第i条链表开始受搜索,如找不到,搜索第i+1条链表,以此类推。 • 如果找到的空闲块正好等于需求,直接把它从来链表中删除,返回首地址。如果找到的空闲块大于需求,则需要把它一分为二,前半部分插入前一条链表,取后半部分。如果还大,则继续对分,取一半留一半,直至相等。同时,bitmap表页必须相应调整

  9. 页面分配和回收(3) • 回收空闲块时,根据bitmap表中的对应组,判断回收块的前后是否为空闲块。若是则合并,并调整bitmap表对应位,从free_area的相应空闲链表中取下该空闲块并归还。这是一个递归过程,直到找不到空闲块邻居,将最大的空闲块插入free_area的相应空闲链表。

  10. 4.8.4用户态内存的申请与释放(1) • 用户进程使用vmalloc()和vfree()函数申请和释放大块存储空间,分配的存储空间在进程的虚地址空间中是连续的,但它对应的物理页框仍需缺页中断后,由缺页中断处理例程分配,所分配的页框也不是连续的。

  11. 用户态内存的申请与释放(2) • vmalloc( )和vfree( )函数,其执行如下:申请时需给出申请的长度,调用set-vm-area内部函数向vmlist索取虚存空间。如果申请成功,将会在vmlist中插入一个vm-struct结构,并返回首地址,当申请到虚地址空间后更改页目录和页表。

  12. 用户态内存的申请与释放(3) • 释放时需给出虚拟空间首地址,沿着vmlist搜索要释放的区域,找到表示该虚拟内存块的vm-struct结构,并从vmlist表中删除,同时清除与释放虚存空间有关的目录项和页表项。

  13. 4.8.5内存的共享和保护(1) • 内存共享以页共享的方式实现,共享该页的各个进程的页表项直接指向共享页,这种共享不需建立共享页表,节省内存,但效率较低。当共享页状态发生变化时,共享该页的各进程页表均需修改,要多次访问页表。

  14. 内存的共享和保护(2) • 对进程的虚拟地址加锁或保护,实质是对vma段的vm_flags属性与VM_LOCKED进行或操作。 • 虚存加锁后,对应的物理页框驻留内存,不再被页面置换程序换出。 • 加锁操作有4种:对指定的一段虚拟空间加锁或解锁;对进程所有的虚拟空间加锁或解锁。

  15. 4.8.6交换空间、页面换出和调入 1、交换空间 • Linux采用两种方式保存换出页面。一是使用块设备,如硬盘的一个分区,称作交换设备 • 另一种是使用文件系统的一个文件,称作交换文件。两者统称为交换空间。

  16. 2 页交换进程和页面换出(1) • 当物理页面不够用时,存储管理必须释放部分物理页面,把它们的内容写到交换空间。内核态交换线程kswapd完成这项功能。 • Kswapd不仅能够把页面换出到交换空间,也能保证系统中有足够的空闲页面以保持存储管理系统高效的运行。

  17. 页交换进程和页面换出(2) • Kswapd在系统初启时由init创建,调用init_swap_timer()函数设定,并转入睡眠。 • 每隔10ms响应函数swap_tick()被周期性激活,它察看系统中空闲页面是否太少,依次从三条途径缩减物理页面: (1)缩减page cache和buffer cache; (2)换出SYSTEM V共享内存占用页面; (3)换出或丢弃进程占用页面。

  18. 3 缺页中断和页面换入(1) • 当进程访问了一个还没有有效页表项的虚拟地址时,处理器将产生缺页中断,通知操作系统,并把缺页的虚拟地址(保存在CR2寄存器中)和缺页时访问虚存的模式一并传给缺页中断处理程序。

  19. 缺页中断和页面换入(2) • 根据控制寄存器CR2传递的缺页地址,必须找到表示出现缺页的虚拟存储区的vm_area_struct结构,如果没有找到,说明进程访问了非法存储区,系统发出信号告知进程出错。 • 系统检测缺页时访问模式是否合法,如果进程对该页的访问超越权限,系统也将发出信号,通知进程的存储访问出错。

  20. 缺页中断和页面换入(3) • 通过以上两步检查,可以确定缺页中断是否合法,进而进程进一步通过页表项中的位P来区分缺页对应的页面是在交换空间(P=0且页表项非空)还是在磁盘中某一执行文件映像的一部分。最后进行页面调入操作。

  21. 4.8.7缓冲机制 虚存管理的缓冲机制主要包括: • kmalloc cache • swap cache • page cache

More Related