4

私たちは Pintos と呼ばれる教育用オペレーティング システムに取り組んでおり、仮想化をサポートするようにセットアップしようとしています。32 ビットで実行されているバージョンから開始し、最初のステップは 64 ビット モードに切り替えて、そこから続行することです。Bochs 経由で Pintos を実行しています。

Intel Programmer's Manual (第 9.8.5 巻、第 3 巻) でこれを行う手順を調べました。IA32e モードを有効にするために IA32 EFER.LME ビットを 1 に設定する場合、システムはトリプル フォールトを生成します。もう一度最初から作業を開始します。

これが私たちが取り組んできたコードです。

#Step 1: Disable paging CR0_PG = 0. Use MOV CR0 instr. to disable paging (instr. must be located in an identity-mapped page.
    movl %cr0, %eax
    andl $0x7fffffff, %eax
    movl %eax, %cr0

#Step 2: Enable physical-address extensions by setting CR4_PAE = 1
    movl %cr4, %eax
    orl $CR4_PAE, %eax
    movl %eax, %cr4

#Step 3: Load CR3 with the physical base address of the level 4 page map table PML4
    movl $0xe000, %eax
    movl %eax, %cr3

    xchg %bx, %bx
#Step 4: Enable IA-32e mode by setting IA32_EFER_LME = 1
    movl $0xc0000080, %ecx
    rdmsr
    or $IA32_EFER_LME, %eax
    wrmsr

#Step 5: Enable paging CR0_PG = 1.
    movl %cr0, %eax
    orl $CR0_PG, %eax
    movl %eax, %cr0

トリプルフォールトを生成する可能性がある Intel によって提案されたすべての可能なケースの中で、これが唯一の合理的な原因であると思われたため、独自の TSS をセットアップしようとしました。

トリプルフォールトが生成されている理由は何ですか? すべてが明確で、手順に従っているように見えますが、それでもカーネル パニック攻撃が発生します。

4

1 に答える 1