私が知っている限り、保護モードはカーネルで有効になっていますが、グラブステップではまだリアルモードです。私の誤解は:リアルモードで利用可能な合計メモリは1MB未満ですが、grubはカーネルまたはルートファイルシステム(通常1MBより大きい)をどのようにメモリにロードしますか?
ベストアンサー1
GRUBはカーネル全体をメモリにロードする必要はありません。カーネルイメージは2つの部分に分けられます。
- リアルモードのカーネルコードは小さく、640kBの利用可能なメモリしきい値内でロードできます。
- カーネルの残りの部分は保護モードで実行され、メモリの最初のメガバイトの後にロードされます。
ブートローダはリアルモードのカーネルコードのみをロードし、残りは再起動します(参考資料を参照go_to_protected_mode()
)arch/x86/boot/pm.c
。これは、プロセスがリアルモードで実行されるメモリ制限内に保持される方法です。
ヒント:GRUBは以下で実行できます。両方実行している操作に応じて、実際のモードと保護モードがあります。特定の操作(特定のハードウェア検出とメニュー表示)については、保護モードに切り替えることができます。しかし、カーネルに到達したら、リアルモードにあると思うのは正しいです。