Advertisement

Bochs源码分析#22:内存分页机制模拟

阅读量:

前言

为了满足需求,在处理线性地址空间时,请问如何将这一特定区域划分到物理内存区域?在深入分析代码之前,请问您是如何打算模拟这一分页过程的?经过一番思考后发现其实较为直接——核心思路即在于构建索引表来进行地址映射。具体实现细节位于附录部分中详细展开——该段内容未进行复杂的属性和权限验证工作,请问您是否已经对这一机制有了基本认识?

代码解读

首先,请准备好三块物理页面,并分别包括 PDE 页面表、PTE 页面表以及将使用的物理页面。

复制代码
  PULONG32 PdPage = (PULONG32)malloc(PAGESIZE_4K);  // PDE 页表项

    
 	PULONG32 PtPage = (PULONG32)malloc(PAGESIZE_4K);  // PTE 页表项
    
 	PUCHAR PhysicalPage = (PUCHAR)malloc(PAGESIZE_4K);  // 准备的物理页

随后开始编写线性地址的解析代码,并依照此格式来进行解析。现在决定采用10-10-12分页模式

复制代码
 void GetOffset(ULONG32 address, int* offset_1, int* offset_2, int* offset_3) {

    
 	*offset_1 = (addres

全部评论 (0)

还没有任何评论哟~