我们专注服务于当下互联网基础设施建设与云计算、大数据时代的各种需求!

页式内存管理系统缺页处理的3个策略

FreeBSD采用页式内存管理方式,缺页处理主要有3个机制:
1.取页策略

2.放置策略

3.置换策略

虚拟页面地址与物理地址转换功能由硬件的MMU负责,MMU还要负责页面授权,1个进程不能访问另外1个进程的页面地址。

缺页处理需要确定以下三种策略:

fetch policy,读取策略,FreeBSD为了减少I/O操作次数,希望一次读入尽量多的页面,采用prepaging策略,一般是需要页面前后各8个页面内可以一次读入的部分。

placement policy,放置策略,FreeBSD为了充分利用Cache功能,采用Color算法来确定读入页面放置的物理位置。

replacement policy,替换策略,FreeBSD维持多个链表管理和释放物理空间,以便重用。

进程对内存的操作具有局部集中性(locality of reference)。当进程在某个子流程或者循环中时,很可能固定的引用一段内存空间,称作working set,工作集。进程可能周期性的改变工作集。

swap在内存短缺时执行整个进程的换入换出。不过现在与分页相结合,直到大的短缺时,才swap.

硬件支持:
要避免一个进程修改别的进程,就要禁止进程修改它自己的内存地址映射。

当进程换出时硬件要支持指令执行状态信息的保存。

脏页标志
FreeBSD系统的内存管理基于部分面向对象思想:将文件,匿名内存段等所有数据源归结为object,定义对这些数据源的标准操作接口(pager, pagerops),并根据不同的数据源采用不同的操作实现(如swappagerops,vnodepagerops)。物理内存只是用来作为这些对象最近所使用的页面的缓存。

虚拟内存到物理内存部分的实际映射交给pmap模块完成

FreeBSD内存管理相关数据结构:

vmspace     表示内核或一个进程的地址空间,包含硬件独立的内容,也包含硬件相关的内容。

Vm_map  包含硬件无关的虚拟地址空间的描述。

Vm_map_entry    使用相同存储介质,并且保护和继承方式也相同的虚拟连续的地址段

Vm_page     代表虚拟内存系统中内存页管理的数据结构。

vmspace 用于描述一个进程的地址空间,包括机器相关的与机器无关的结构

vm_map 用于描述机器无关的虚拟地址空间的高级抽象数据

pmap 机器相关虚拟地址与物理地址映射结构

vm_map_entry 用于描述一个虚拟的连续地址空间,它们拥有共同的保护属性与继承属性,并且使用相同的备份存储对象

vm_object 表示一个地址范围的数据源

shadow_object 表示已经修改过的数据,是一种object的特殊形态

vm_page 这是最底层的数据结构,表示虚拟内存所使用的物理内存

这些数据结构中的重要字段