找不到第 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 位数字为零)。
我在页面 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 位数字为零)。