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

NetBSD 内存管理系统 UVM 浅析

 2006-08-09 22:57:02 来源:WEB开发网   
核心提示: uvm_obj, vm_amap 及一下的结构我们称为底层结构, 内存的实际分配和操作都在这以下的层面完成, 它们最终指向内存分配管理的最小单位 vm_page. 整个 uvm 的核心数据可以表示如下, vm_amap 和 uvm_obj 之间的虚线我们会在下面的章节解释. 并非真正表示指

uvm_obj, vm_amap 及一下的结构我们称为底层结构, 内存的实际分配和操作都在这以下的层面完成, 它们最终指向内存分配管理的最小单位 vm_page.

整个 uvm 的核心数据可以表示如下, vm_amap 和 uvm_obj 之间的虚线我们会在下面的章节解释. 并非真正表示指针引用关系.

vmspace
   |
   v
uvm_map_entry <--> vm_map_entry ...
   |  |
   |  v
   |  vm_pmap
   |
   +-----------------+
   |         |
   v         |
 vm_aref       |
   |         |
   v         v
 vm_amap < - - - > uvm_obj
   |         |
   v         v
 vm_anon ...    vm_page <-> vm_page ...
   |
   v
 vm_page
 

另外, 我们注意到 uvm.h 中有个 uvm 结构, 这是各种 uvm 资源和参数的集合, 系统中只存在一个 uvm 对象.

顶层映射机构 (vmspace, uvm_map, uvm_map_entry)

顶层映射机构所要负责的事务包括

  1. 将一个对象映射进地址空间.
  2. 对一个虚地址 (VA), 定位到所属 uvm_map_entry (因为在此之下的地址是连 续的, 不用什么定位).
  3. 提取地址空间的某一断以供其他地址空间使用.
  4. COW (Copy-On-Write) 的顶层处理.

其主要代码在 uvm_map.c, 这个一个有 4000 多行代码的大文件, 我们从顶层接口到底层实现逐一分析.

uvm_map_lookup_entry()

该函数能得到一个 VA 所指向, 或正好在此之前的一个 uvm_map_entry. 该函数不但用于地址映射, 还帮助地址空间分配机构找到合适的地址范围.

上一页  1 2 3 4 5 6 7  下一页

Tags:NetBSD 内存 管理系统

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