WEB开发网
开发学院软件开发VC NetBSD 内存管理系统 UVM 浅析 阅读

NetBSD 内存管理系统 UVM 浅析

 2006-08-09 22:57:02 来源:WEB开发网   
核心提示: uvm_fault() 作为内存管理的核心uvm_fault() 是一个 1200 多行的大函数, 它在读或写的 fault 的时候, 实际完成了内存分配, COW 等核心功能. 我们可以这么看, 前面介绍的函数只是设置好了数据结构, 而真正的功能是由 uvm_fault() 完成的. 我

uvm_fault() 作为内存管理的核心

uvm_fault() 是一个 1200 多行的大函数, 它在读或写的 fault 的时候, 实际完成了内存分配, COW 等核心功能. 我们可以这么看, 前面介绍的函数只是设置好了数据结构, 而真正的功能是由 uvm_fault() 完成的. 我们现在来分析这个函数, 也作为前面章节介绍内容的综合分析.

注意 uvm_fault.c 头部的注释, 解释了产生 fault 的几种情况, 这也能加深对前面章节 COW 机制的理解.

uvm_fault() 的主体脉络如下:

begin
    loop up for fault page;
    check protection -> cow_now;
    handle need_copy case, copy amap if we need;
    check case0(no amp, no uobj, errr);
A:   statbish intrest range, pre-fault, get fault level;
    if shadowed (uper level fault)
        uvm_anonget();
B:       handle loan case (break if we need);
C:       handle COW case;
        pmap_enter();
        update page queue;
    else
        ask the backing obj to handle it;
D:       handle it in a general way if backing obj
         do not know how to do;
        get uobjpage, ensure it's not PG_RELEASED;
        if not promote (case 2A)
            fault it directlly
        else (case 2B)
            get a anon and fill it with data;
            add it into amap;
        pmap_enter();
        update page queue;

A: line 698

一个 fault 的页面周围的页面也很可能在近期 fault, 为了防止过多的内存访问异常拖慢速度, 我们有根据 advise 的设置的范围进行 pre-fault.

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:NetBSD 内存 管理系统

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接