リアルモードとLinuxカーネルロードの混乱

リアルモードとLinuxカーネルロードの混乱

私が知っている限り、保護モードはカーネルで有効になっていますが、グラブステップではまだリアルモードです。私の誤解は:リアルモードで利用可能な合計メモリは1MB未満ですが、grubはカーネルまたはルートファイルシステム(通常1MBより大きい)をどのようにメモリにロードしますか?

ベストアンサー1

GRUBはカーネル全体をメモリにロードする必要はありません。カーネルイメージは2つの部分に分けられます。

  • リアルモードのカーネルコードは小さく、640kBの利用可能なメモリしきい値内でロードできます。
  • カーネルの残りの部分は保護モードで実行され、メモリの最初のメガバイトの後にロードされます。

ブートローダはリアルモードのカーネルコードのみをロードし、残りは再起動します(参考資料を参照go_to_protected_mode()arch/x86/boot/pm.c。これは、プロセスがリアルモードで実行されるメモリ制限内に保持される方法です。

ヒント:GRUBは以下で実行できます。両方実行している操作に応じて、実際のモードと保護モードがあります。特定の操作(特定のハードウェア検出とメニュー表示)については、保護モードに切り替えることができます。しかし、カーネルに到達したら、リアルモードにあると思うのは正しいです。

おすすめ記事