Я создаю простую ОС для учебных целей, и я (в настоящее время; я следовал различным учебникам ранее и что-то настраивал самостоятельно) следую этому учебнику для включения подкачки страниц. Я использую QEMU вместо Bochs в качестве моего эмулятора.
Если я не буду использовать подкачку, все будет работать нормально (даже тот самый базовый c kmalloc()
, который я реализовал), но как только я установлю PG
бит в регистре cr0
(т. е. включить подкачку страниц), все вылетает и QEMU перезагружается: я подозреваю, что некоторые из имеющихся у меня структур (т. е. каталог страниц, таблицы страниц и т. д.) не созданы или не загружены должным образом, но у меня нет возможности проверить.
Я уже давно пытаюсь решить эту проблему, но не нашел решения. Кто-нибудь может увидеть, где моя ошибка?
Здесь вы можете найти мой полный код: https://github.com/davidedellagiustina/ScratchOS (commit 83b5c8c
). Код подкачки находится в src/cpu/paging.*
.
Редактировать: Настройка каталога страниц super-basi c, точно следуя этому учебнику , приводит к созданию рабочего кода. Основываясь на этом простом примере, я пытаюсь построить более сложные структуры (например, page_t
, page_table_t
, page_directory_t
), чтобы понять ошибку.