我在编写将虚拟地址解析为物理的函数时遇到了一些麻烦。该功能模仿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;
}