Как управлять подкачкой в ​​ядре сборки / C? - PullRequest
0 голосов
/ 08 ноября 2019

Мой проект состоит в том, чтобы выполнить мою собственную JVM на небольшом кусочке ядра, которое я пытаюсь кодировать на C и сборке. Итак, я все еще изучаю, как ядра выполняют свою основную работу.

Теперь, следуя некоторым руководствам, я настроил пейджинг

.map 
    mov         eax     , p3_t
    or          eax     , 0b11
    mov dword   [p4_t]  , eax
    mov         eax     , p2_t
    or          eax     , 0b11
    mov dword   [p3_t]  , eax

    mov        ecx      , 0
.map_pd:
    mov        eax, 0x200000
    mul        ecx
    or         eax , 0b10000011
    mov        [p2_t+ecx*8] , eax
    inc        ecx
    cmp        ecx, 512
    jne        .map_pd

    mov        eax, p4_t
    mov        cr3, eax
    mov        eax, cr4
    or         eax, 1 << 5
    mov        cr4, eax

    mov        ecx, 0xC0000080
    rdmsr
    or         eax, 1 << 8
    wrmsr

    mov        eax, cr0
    or         eax, 1 << 31
    or         eax , 1 << 16
    mov        cr0, eax

, который должен настроить и включить пейджинг. К сожалению, эти руководства дают мне мало информации.

Теперь, как мне управлять подкачкой и виртуальными адресами в ядре C? Не могли бы вы, ребята, дать мне несколько других руководств, которые говорят о подкачке?

1 Ответ

2 голосов
/ 08 ноября 2019

Звучит так, будто вы включаете подкачку только потому, что это требуется для x86-64, и вы не хотите использовать ее для чего-то вроде предоставления различным процессам своего собственного виртуального адресного пространства:

Один простой выбор - для идентификации всей оперативной памяти: физический = виртуальный адрес . https://wiki.osdev.org/Setting_Up_Long_Mode#Setting_up_the_Paging

См. Также https://wiki.osdev.org/Paging и https://wiki.osdev.org/Setting_Up_Paging_With_PAE (формат записи таблицы страниц x86-64 аналогичен 32-битному PAE, ноиспользует больше уровней.)

Огромные страницы 1 ГБ обеспечивают лучшую производительность (меньше пропусков TLB и более короткий просмотр страниц, когда вы пропускаете TLB) и означают меньшее количество уровней таблиц страниц и общее количество PTE, которые необходимо настроить. На старом оборудовании огромные страницы размером 2 МБ могли бы быть хорошим выбором, но современные процессоры также имеют хорошую поддержку TLB для страниц 1G.

...