用discuz做的大网站,h5 做移动端网站,珠宝网站设计,学习php做毕设网站方向虚空间管理
页框和页的关系
页框
将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个页框#xff0c;也叫页帧#xff0c;即物理页面#xff0c;是linux划分内存空间的结果。 每个页框都有一个页框号#xff0c;即内存块号、物理块号。
页
将用户…虚空间管理
页框和页的关系
页框
将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个页框也叫页帧即物理页面是linux划分内存空间的结果。 每个页框都有一个页框号即内存块号、物理块号。
页
将用户进程的地址空间也分为与页框大小相等的一个个区域,称为页或页面即虚拟页面是linux划分地址空间的结果。 每个页面都有一个页号
页、页表项、页表、页目录项、页目录的关系参考 计算机体系结构——虚拟内存技术
CSDN基本分页存储管理的基本概念
线性区
当用户态进程动态请求内存时linux并不会直接分配物理页框而是先分配一段新的虚拟地址空间的使用权。
CSDN进程地址空间 - VMA线性区
PCB中内存信息数据结构
主要的数据结构
mm_struct
mm是进程控制块中的一个成员表示了该进程的内存信息。 每个进程都有自己的页目录、页表项等信息
*pgd: 一级页表的起始地址 *mmap指向进程的第一个VMA mm_rb指向红黑树的根
vm_area_struct
线性区表示用户虚空间中的一块连续区域可以简称为vma。 数据结构成员包括权限信息等。 vm_rb-rb_left指针指向相邻的低地址VMAvm_rb-rb_right指向相邻的高地址VMA1
page
页框描述符描述了页框的类型匿名页还是文件页 mem_map描述了所有页框连续存放。
file
页高速缓存以文件为管理单位缓存的页框属于某个文件 硬盘数据页的高速缓存放在页框中 address_space
address_space记录映射到本文件某一区间的所有线性区这些线性区按其区间组织为一颗优先搜索树。 page_tree文件的所有缓存页框的描述符构成一颗基树该结构体表示基树的根节点如果最低位为1表示指向的是一个radix_tree_node对象
anon_vma
anon_vma数据结构链接了page和anon_vma实质上和anon_vma_chain共同链接了的page数据结构和VMA的vm_area_struct数据结构
anon_vma_chain
anon_vma_chain链接了anon_vma和vma
rb_node 和 rb_root radix_tree_node
path该节点的页节点数 count表示有效页框描述符地址的数量
数据结构关系
数据结构关系图
链表关系
所有的page构成一颗基树
页框描述符红黑树 通过page-index可以快速找到其他page地址
vma红黑树 所以进程的VMAs组成一个双向链表
反向映射
正向映射页号 → 页框号即通过虚拟页号查找物理页号 反向映射页框号 → 进程号和页号的集合即在已知物理页面(page frame)的情况下找到映射该物理页面的虚拟页。
反向映射使用场景
反向映射通常在页框回收时需要此功能例如
当内存空间不足时有些页面长时间不适用需要交换到磁盘有些页面需要迁移
工作原理
当上述使用场景需要反向映射时linux为了快速定位映射到该物理页的页表项通过页框号查找页框描述符通过页框描述符中的mapping确定是匿名页还是文件页并根据mapping的值
t
父进程为自己的进程空间VMA分配物理页面的时会产生匿名页面
匿名页和文件页
二者均是页框的类型。
匿名页
不属于文件的页高速缓存没有关联到文件页不是以文件形式存在无法和磁盘文件交换 匿名页面是线性区的一种类型映射到anon_vma对象该对象关联了进程为对应线性区申请的一组匿名页框并记录了使用这些页框的所有线性区 mapping的最低位为1.
匿名页反向映射结构图2
文件页
映射文件的页即某个文件的也高速缓存。程序可以通过read/write/mmap去操作此时在内存中会申请page cache来缓存硬盘内容因此该内容及存在于内存也存在于外存中 属于某个address_space对象该对象记录使用该文件页高速缓存的所有线性区 mapping!0但mapping的最低位为0。
文件页反向映射结构图2
linux内存管理笔记(三十四----匿名映射
参考文献 红黑树的应用Linux内核虚拟内存的管理 ↩︎ CSDNlinux内存管理笔记(三十八----反向映射 ↩︎ ↩︎