将16位虚拟地址转换为物理,模仿MMU

时间:2015-06-04 23:42:50

标签: c virtual-memory mmu

我在编写将虚拟地址解析为物理的函数时遇到了一些麻烦。该功能模仿CPU的MMU。我试图学习 C 和内存管理,但我迷路了,我只需要有人告诉我该怎么做并解释原因。

我知道如何将虚拟地址转换为物理地址,但将该逻辑转换为函数很麻烦。出于这些目的,该系统使用256字节的页面。页面偏移是单个字节。 CPU支持16位传统模式,这是我尝试创建的功能。地址长16位,没有权限位。

CR3是页表寄存器,它直接指向256页的页表。

这是功能:

/* 16-bit legacy mode.                                                          
 * In legacy mode, CR3 points to an array of PTE.  Since there are only 256     
 * pages, this array is rather small (1k).  Legacy mode doesn't enforce         
 * permissions; every page is assumed to be read-write-executed regardless of   
 * the permission bits.                                                         
 */
result_t mmu_legacy(unsigned short va)
{
  result_t result = {NOTIMPLEMENTED};
  return result;
}

0 个答案:

没有答案