FreeBSD内存管理系统理解(一)

2009-05-13 01:25:25来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

通过对FreeBSD设计与实现一书的阅读,并结合源码分析,将自己对FreeBSD系统的内存管理部分的一些理解摆在这里,希望高手,大拿们指点啦。
系统内存管理
一、基本概念
Address Translation:虚拟地址空间到物理存储空间的映射
内存管理单元(MMU) :实现地址转换操作与进程地址隔离保护的硬件。
Paging:分页操作就是将进程访问到的页面读入主存(当发生page fault时),而把不再活跃的页面写入后备存储来节约进程的主存消耗的技术。
Swapping:系统内存不足时,选择暂时换出到次存的进程的内存管理策略。
虚拟地址空间,以及地址翻译机制使得进程地址可以独立于具体的存储器位置。
要避免一个进程访问别的进程的内容,要有硬件保护。Memory Management Unit(MMU)结合了进程地址空间保护和地址翻译功能。

  
图一.地址翻译示意图
地址翻译将虚拟地址空间与物理地址空见解耦。每个虚拟页面可能保存在主存中,也可能不在主存中。当进程访问不在主存中的虚拟地址,硬件将产生缺页错误(page fault)。处理缺页错误或称分页(paging),按需加载页,使得进程可以在只有部分页面驻留主存的情况下执行。

缺页处理需要确定以下三种策略:
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     表示内核或一个进程的地址空间,包含硬件独立的内容,也包含硬件相关的内容。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:达到 ipnat 180万的极致点

下一篇:How do I use a console resolution of 80x50?