コンピューターはどのオペレーティング システムを起動するかをどうやって知るのでしょうか?

コンピューターはどのオペレーティング システムを起動するかをどうやって知るのでしょうか?

コンピュータの電源を入れると、どのオペレーティング システムを起動するかを選択するソフトウェアとは何ですか。また、複数のオプションがある場合、どのように決定するのですか。

もっと具体的に言うと、同じディスクに複数のオペレーティング システムが存在するコンピューターがある場合はどうなるでしょうか。また、外付けドライブがある場合はどうなるでしょうか。すべてのストレージ デバイスのすべてのパーティションを検索して、認識できる形式を検索するのでしょうか。

私の理解では、すべてのディスクには、コンピューターがどのパーティションを起動するかに関する情報を含む独自のブート セクターがあります。しかし、複数のディスクが接続されていて、各ディスクに異なるブート セクターがある場合は、どのブート セクターがロードされるのでしょうか。

このトピックを調査しようとしたとき、すべてのテクノロジが同じように動作するわけではないため、混乱が生じました (たとえば、ブート可能フラグが重要であると主張する人もいれば、無視されると主張する人もいます)。さまざまなシステムがどのように動作するかについて明確に説明していただければ幸いです。

答え1

残念ながら、コンピュータが進化するにつれて、これはさらに複雑になりました。

当初 (つまり最初の PC) は、ケーブル接続に応じて順序が固定されていました。

ほとんどすべてのコンピューターには、BIOS によって制御/影響を受けるデフォルトのブート順序がまだあります。新しいコンピューターでは、この機能が UEFI で補完され、ある意味で BIOS に取って代わります。

BIOS ブートには優先順序があります。BIOS は各ドライブでブート可能なブート セクターを探し、ブートできるまでオプションのリストを順にたどってこれらをロードしようとします。

UEFI の場合、ディスク上にファイルシステムがあります (UEFI というラベルが付いた小さなファット パーティションで、第 1 段階のブート ローダーと命令が含まれています。場合によっては、UEFI にプログラムされた命令 (つまり、BIOS と同様に nvram に保存された設定) によって補完されます)

ブートローダー/UEFI パーティションが見つかると、プログラムがブートプロセスを引き継ぎ、さまざまなモードや OS でブートできるようになります。

答え2

他の人が言ったように、少し複雑になっていますが、私が理解している方法は次のとおりです。

コンピュータの電源を初めてオンにしたとき、ハード ドライブはまったく問題になりません。マザーボード上のチップに特別なソフトウェアがあり、これが最初に読み込まれ、CPU がそれを実行し始めます。これは BIOS または UEFI と呼ばれます (UEFI は実際には BIOS の後継です)。

このコードは、ハードウェアのさまざまな部分を初期化する作業をいくつか行い、次に制御を渡す次の対象を探し始めます。さて、それが正確に何であるかは、多くの要因に依存します。内部ハードドライブ、外部ドライブ、ネットワーク アダプター、RAID コントローラー、アドオン カードなど、考えられるオプションは多数あります。

BIOS/UEFI には、これらのオプションをチェックする順序を決定する設定もあります。 BIOS/UEFI は、設定された順序で各オプションをチェックし、「起動を続行できますか?」と尋ねます。デバイスは「はい」または「いいえ」と答えます。 最初に「はい」と答えたデバイスが続行します。 次に、そのデバイスはメモリにロードされるコードの一部を BIOS に渡し、CPU はそれを使用して実行を続行します。

ハード ドライブの場合、ディスク自体は起動できるかどうかは実際にはわかりません。そのため、BIOS はドライブの最初のセクター (通常は 512 バイト) を読み取り、セクターの特定の場所に特別な数バイトがあるかどうかを確認します。そこに 55 AA (16 進数) という値が含まれている場合、このセクターはコードとして実行されます。それ以外の場合は、次のディスクのチェックに進みます。

512バイトはそれほど大きなスペースではありませんが、いくつかの簡単なことを行うには十分です。たとえば、古典的なDOSでは、そこに「ブート可能」とマークされたパーティションを見つけ、そのパーティションの最初のセクターをロードするコードが少しありました。それパーティションを作成して実行しました。次のセクターには、さらにいくつかのセクターをロードし、ファイル システムの解析を開始して、そこからファイルをロードする、といった処理を実行するのに十分なコードが含まれていました。

しかし、実際には、このコードが何をしなければならないかは何も示されていません。また、アクティブなパーティションをロードするのではなく、より多くのコードが存在するディスク上の他のセクターをロードすることもできます。そして、そのコードは、複数のブート可能なパーティションや OS などから選択できるメニューを提供する可能性があります。

とにかく、ドライブの最初のセクターにあるコードは「ブートローダー」と呼ばれています。世の中にはさまざまなブートローダーがあります。最近の Linux の世界では grub に大きく依存しており、Windows には独自のものがあります。ブートローダーは本当に前にオペレーティング システムですが、オペレーティング システムをメモリにロードして制御する方法を知る必要があります。

これで分かりやすくなりましたか?

答え3

起動時に、マザーボードは接続されているすべての (またはほとんどの) 電子コンポーネントに電力を供給します。そのうちの 1 つはハード ドライブまたは SSD で、主要なオペレーティング システムが格納されているため、システム ドライブと呼ばれます。BIOS または (U)EFI を別の外部ドライブ (USB、FireWire、ネットワークなど) から起動するように設定していない限り、最初に使用されるドライブはそれです。

このドライブには、通常は読み取り専用 (ただし、bcdedit.exe コマンド セットを使用して編集可能) のマスター ブート レコード パーティション (簡略化のため) があり、ドライブ上の利用可能なすべての OS を確認します。1 つは、ユーザーによって、または工場出荷時またはメイン OS を再インストール/アップグレードしたときにインストールされたときに自動的に、デフォルトとして設定されています。

WindowsではUSBからの起動は許可されませんハードドライブまたはSSDUSBで起動できます、特定の USB コントローラーをホストしていますが、ケーブル経由で接続された USB ドライブからの起動は Windows によって許可されていません。必要なドライバーは、最初の Windows サービスとプロセス (smss.exe と crss.exe) が読み込まれてからかなり経ってから読み込まれます。つまり、Windows 自体が起動したことになります。

答え4

コンピュータにはソフトウェアが組み込まれており、どのディスクを最初、2 番目 (最初のディスクが利用できない場合)、3 番目などに配置するかを指定するように構成できます。

これはかつては「BIOS」で、EEPROM(バッテリーで駆動)に保存されていました。しかし、現在でははるかに複雑になり、Linux ベースの OS もハードウェアに組み込まれています(これにより、コンピューターが外部からの攻撃を受けやすくなります)。

各ディスクにはパーティション テーブルがありますが、必ずしもブート セクターがあるわけではありません。

関連情報