找不到第 table 页条目

Cannot find page table entry

我在页面 table/page 目录中找不到地址 0xB8000 的记录。它工作正常,当我将一些符号放入该内存区域时,显示器会显示它。

我处于保护模式,并且启用了分页。我在用bochs。

cr0 是 0xe0000011 或 1110 0000 0000 0000 0000 0000 0001 0001b, cr3 是 0x1000

0xB8000 等于 1011 1000 0000 0000 0000b,所以 10111000b 是 页面索引 table,等于184页目录的索引为0,偏移量为零。

我转到物理内存的 0x1000,我得到第一个(索引 0)项:

是0x2027 or 10 0000 0010 0111b 所以页面的物理地址table是10b or 2,我需要第184条的内容所以需要去184 * 4 + 2 = 738 = 0x2E2,但它是空的:

顺便说一下,我有三个内存描述符(从 0x0 到 0xFFFFFFFF 的内存):

null:
    0
code: 
    dw 0FFFFh           ; limit low
    dw 0                ; base low
    db 0                ; base middle
    db 10011010b        ; access
    db 11001111b        ; granularity
    db 0                ; base high

data:
    dw 0FFFFh           ; limit low (Same as code)
    dw 0                ; base low
    db 0                ; base middle
    db 10010010b        ; access
    db 11001111b        ; granularity
    db 0                ; base high

It is 0x2027 or 10 0000 0010 0111b so the physical address of the page table is 10b or 2. I need a content of 184th entry so I need to go to 184 * 4 + 2 = 738 = 0x2E2, but it's empty:

是0x2027,所以table页的物理地址是0x2000(不是2)。第 185 个条目(条目号 184)将位于页面 table 中的偏移量 0x2E0 处,物理地址为 0x22E0.

注意:您可以将页目录条目 (0x2027) 向右移动 12 位并说“它是物理页码 2”,然后将页码乘以页面大小(或向左移动 12 位) ) 找到页面的物理地址。 easier/faster 只是屏蔽掉最低的 12 位(例如 physical_address_of_page_table = page_directory_entry & 0xFFFFF000;),尤其是当您在头脑中使用十六进制值时(您可以假设最后 3 位数字为零)。