私の知る限り、BIOS またはファームウェアとして機能する類似のものが起動された後、制御はブートローダーに渡されます。
BIOS が OS カーネルを直接ロードできないのはなぜですか?
また、GRUB マニュアルには次のように書かれています:簡単に言えば、ブートローダーはコンピュータの起動時に最初に実行されるソフトウェアプログラムです。BIOSは最初に実行されるプログラムではないのですか?
答え1
BIOS はカーネルをロードする方法を知っている必要があり、これにより BIOS が過度に複雑になります。利用可能なさまざまなオペレーティング システムをロードする方法、カーネル パラメータをそれらに渡す方法などを知っている必要がある BIOS を想像してみてください...
したがって、ハードウェアを初期化し、ブートローダが格納されている既知の場所にジャンプするだけで、その後、制御がブートローダに渡されます。
BIOS がカーネルを直接ロードしないのはなぜか、ブートローダーによる 2 段階のプロセスが必要なのはなぜかと不思議に思うかもしれません。BIOS はそれほど賢くありません。実際、非常に愚かで、Linux はブート後に BIOS をまったく使用しません。BIOS はもともと小さなディスクを搭載した原始的な 8 ビット PC 用に作成されたもので、文字通り、カーネルを直接ロードするのに十分なディスクにアクセスできません。ブートローダーのステップでは、Unix では十分でないというまれな事態に備えて、ディスク上のさまざまな場所から複数のオペレーティング システムのいずれかを起動することもできます。
BIOSが最初に実行されるプログラムであることについては、(ウィキペディア)
BIOS ソフトウェアは PC に組み込まれており、PC の電源投入時に最初に実行されるコードです (「ブート ファームウェア」)。
しかしファームウェアはソフトウェアです。GRUBのマニュアルは少なくともその部分では分かりにくいと思います。ブートローダーは最初のユーザー定義のコンピュータ上で実行されるソフトウェア。
答え2
その理由は柔軟性です。1 つのハードディスクに複数の異なる OS (Windows、Linux など) がインストールされている場合があります。また、同じ OS の複数の異なるバージョンがインストールされている場合もあります。したがって、ハードディスクにインストールされている各 OS の場所、各 OS のロード方法、どの OS をロードするか、メニューを表示するかどうかなどを認識する、OS に依存しないコードを用意する方がよいでしょう。これがブートローダです。
BIOS は、ハードディスク (最初のセクター) の事前定義された場所にあるコードをロードして実行します。このコードをブートローダーと呼びますが、技術的には、Windows を空のハードディスクにインストールした場合、このコードも Windows によってインストールされるため、Windows ブートローダーは Windows 以外の OS をロードできないため、これを Windows の一部と呼ぶことができます。
コンピュータの起動時に最初に実行されるソフトウェアプログラムについて: ファームウェアとソフトウェアの区別は薄く、現代のコンピュータの起動プロセスは非常に複雑です。BIOS自体もモノリシックプログラムではなく、いくつかの異なるステージが連鎖しています。ただし、ブートローダは最初のものです。ユーザーが変更可能実行されるコードです。これは、ユーザーが破損、消去、ウイルス感染などを起こす可能性がある最初のコードです。したがって、技術的には BIOS が最初に実行されるソフトウェアですが、コンピューターが起動しない場合はユーザーが正常かどうかを確認する必要があるという意味では、ブートローダーが最初であると考えられます。
答え3
BIOS が OS カーネルを直接ロードできないのはなぜですか?
3つの理由:
1981 年に導入された当初の PC プラットフォームの BIOS は、CP/M オペレーティング システムと同じ役割、つまり、いくつかのデバイスと単純なディスク ブートローダ用の薄い抽象化レイヤーとして機能することを目的としていました。CP/M には、ファイル システムを処理する「BDOS」と呼ばれる別のレイヤーがありました。DOS は当時流行していたオペレーティング システムであり、多くの点で CP/M と似ており、構造も似ていました。BIOS は、プラットフォームのハードウェア固有の側面を処理することを目的としていました。これは現在では OS のドライバーが果たしている役割です。
ファイルシステムを OS とは別のものとして考えるという概念はまだ定着していませんでした。
当時、RAMとROMは高価で希少なリソースでした。オリジナルのIBM 5150 PCは、わずか16KのRAMで入手できました(参照)。このシステムの ROM サイズは 48K で、BASIC インタープリタが含まれていました。当時は標準のファイル システムもありませんでした。
DOS がこのプラットフォームで最も人気のある OS となり、その後このセットアップで動作する Windows が登場したため、実際のブートローディング機能を含めるために BIOS をこのように拡張することを考えた人は誰もいませんでした。
UEFI の機能についてはよくわかりません。何らかの理由で Windows が使用しない実際のブートローディング機能がある可能性があります (Windows はインストール時に独自のブート マネージャーの使用を要求します)。U-Boot や多くの電話やルーターに搭載されているものなど、その他の非 BIOS ファームウェアはカーネルを直接ロードして実行します。BIOS が ROM 内により多くの処理を実行できるスペースを持つようになって以来、技術的な理由はありません。