マシンの電源を入れてからカーネルを実行するまでの過程を理解しようとしています。私が収集したことから、最終的にはページ ディレクトリとページ テーブルを使用し、セグメンテーションをオフにして従来型の仮想メモリ プランに切り替える場合でも、起動時に保護モードに切り替えると、より多くのアドレス指定可能なメモリにアクセスできるようになると便利です。 .
保護モードに切り替えるには、次の 3 つのことを行う必要があるようです。
- グローバル記述子テーブル (gdt) をセットアップし、次の
lgdt
命令を使用してロードします。 - 制御レジスタ CR0 の PE フラグ/ビットを有効 (値 1) に設定します。
- で走り幅跳びをする
ljmp
gdt で使用するために、セグメント レジスタと命令ポインタをインデックスとオフセットに変換するロジックについて疑問に思っています。このロジックはハードウェアによって達成されますか? もしそうなら、どのハードウェアのljmp
一部で、なぜプロセスの一部が実行されるのですか? CR0 に PE フラグを設定して、プロテクト モードを有効にしないのはなぜljmp
ですか?