
コンピューティングにおいて、ブートとは、コンピュータの物理ボタンなどのハードウェアまたはソフトウェアコマンドによって開始されるコンピュータの起動プロセスであり、1950年代に「ブートストラップ技術」として初めて説明されました。[ 1 ]電源を入れた後、コンピュータの中央処理装置(CPU)のメインメモリにはソフトウェアがないため、ソフトウェアを実行する前に何らかのプロセスがメモリにソフトウェアをロードする必要があります。これは、CPU内のハードウェアまたはファームウェア、あるいはコンピュータシステムの別のプロセッサによって行われる場合があります。一部のシステムでは、電源投入リセット(POR)ではブートが開始されず、PORが完了した後にオペレータがブートを開始する必要があります。IBMは、一部の製品ラインで初期プログラムロード(IPL )という用語を使用しています。[ nb 1 ]
コンピュータの再起動はリブートとも呼ばれ、CPUへの電源をオフにしてからオンにするなどの「ハード」な方法と、電源を切らない「ソフト」な方法があります。一部のシステムでは、ソフトブート時にオプションでRAMをゼロクリアすることができます。ハードブートとソフトブートはどちらも、ボタンを押すなどのハードウェア、またはソフトウェアコマンドによって開始できます。ブートは、通常オペレーティングシステムといくつかのアプリケーションであるオペレーティングランタイムシステム[ nb 2 ]が起動した時点で完了します。
コンピュータをスリープ状態(サスペンド状態)から復帰させるプロセスにはブートは含まれませんが、休止状態から復帰させるにはブートが必要です。最低限、一部の組み込みシステムは動作開始に目立ったブートシーケンスを必要とせず、電源を入れると読み出し専用メモリ(ROM)に格納されているオペレーティングプログラムを実行するだけです。すべてのコンピューティングシステムはステートマシンであり、意図しないロック状態から指定されたゼロ状態に戻る唯一の方法は再起動である場合があります。
起動プロセスでは、オペレーティングシステムやスタンドアロンユーティリティをロードするだけでなく、オペレーティングシステムの問題を診断するためのストレージダンププログラムをロードすることもできます。
Boot はbootstrapの略で[ 2 ] [ 3 ] 、 「自力で立ち上がる」というフレーズに由来します[ 4 ] [ 5 ]。この用法は、ほとんどのソフトウェアがコンピュータ上で既に実行されている他のソフトウェアによってコンピュータにロードされる場合、最初のソフトウェアをコンピュータにロードするための何らかのメカニズムが必要であるという要件に注意を促します[ 6 ] 。初期のコンピュータは、この問題を解決するために、小さなプログラム (「ブートストラップ ローダー」または「ブートストラップ」) をメモリにロードするためのさまざまなアドホックな方法を使用していました。さまざまな種類の ROM の発明により、コンピュータのブート ROMに格納され消去できない起動プログラムをコンピュータとともに出荷できるようになったことで、このパラドックスが解決されました。ROM の容量の増加により、ますます複雑な起動手順を実装できるようになりました。
「boot」が「bootstrap」の短縮形として記録された最も古い例は1975年である。[ 7 ]

コンピュータに短い初期プログラムをロードする方法は数多く存在する。これらの方法は、単純な物理的な入力から、より複雑なプログラムを格納できるリムーバブルメディアまで多岐にわたる。
1940年代から1950年代にかけての初期のコンピュータは、他に類を見ない高度な技術の結晶であり、プログラミングに数週間かかることもありました。プログラムのロードは、解決しなければならない多くの問題の一つでした。初期のコンピュータであるENIACは、メモリにプログラムを格納するのではなく、相互接続ケーブルの構成によって問題ごとにセットアップされていました。ENIACにはブートストラップは適用されず、電源が投入されるとすぐにハードウェア構成が問題解決の準備を整えていました。
EDSACシステムは、構築された2番目のプログラム内蔵型コンピュータであり、スタートボタンが押されると、ステップスイッチを使用して固定プログラムをメモリに転送しました。1948年末にデイビッド・ウィーラーが完成させたこのデバイスに格納されたプログラムは、パンチテープからさらに命令をロードし、それらを実行しました。[ 8 ] [ 9 ]
UNIVAC IやIBM 701 [ 10 ]など、商用販売された最初のプログラム可能なコンピュータには、操作を簡素化する機能が含まれていました。通常、完全な入力または出力操作を実行する命令が含まれていました。同じハードウェアロジックを使用して、単一のボタンを押すだけで、ブートストラップ プログラムを含むパンチ カード(最も一般的なもの) または磁気ドラムや磁気テープなどの他の入力メディアの内容をロードすることができました。このブートの概念は、1950 年代から 1960 年代初頭のIBMコンピュータではさまざまな名前で呼ばれていましたが、IBM はIBM 7030 Stretch [ 11 ]で「初期プログラム ロード」という用語を使用し、その後、1964 年のSystem/360 を皮切りに、メインフレーム製品ラインで使用しました。

IBM 701コンピュータ (1952 ~ 1956 年) には、「ロード」ボタンがあり、ロードセレクタスイッチの位置に応じて、カードリーダーのパンチカード、テープドライブの磁気テープ、または磁気ドラムユニットから最初の36 ビットワードをメインメモリに読み込む処理が開始されました。次に、左側の 18 ビットのハーフワードが命令として実行され、通常は追加のワードがメモリに読み込まれました。 [ 12 ] [ 13 ]ロードされたブートプログラムが実行され、人間のオペレーターの介入なしに、その媒体からより大きなプログラムがメモリにロードされました。IBM 704、[ 14 ] IBM 7090、[ 15 ]およびIBM 7094 [ 16 ]も同様のメカニズムを備えていましたが、デバイスごとに異なるロードボタンが使用されていました。「ブート」という用語は、少なくとも 1958 年以降、この意味で使用されています。[ 17 ]

同時代の他のIBMコンピュータにも同様の機能が備わっていた。例えば、IBM 1401システム(1959年)は、カードリーダーを使ってパンチカードからプログラムをロードしていた。パンチカードに格納された80文字はメモリ位置001~080に読み込まれ、その後コンピュータはメモリ位置001に分岐して最初の格納命令を読み込んだ。この命令は常に同じで、最初の80個のメモリ位置の情報をアセンブリ領域に移動し、そこでパンチカード2、3、4などの情報を組み合わせて格納プログラムを作成するというものだった。この情報がアセンブリ領域に移動されると、マシンは位置080の命令(カードの読み取り)に分岐し、次のカードが読み込まれてその情報が処理された。
別の例として、10進数マシンであるIBM 650(1953年)があり、その操作パネルにはメモリワード(アドレス8000)としてアドレス指定でき、命令として実行できる10個の10ポジションスイッチのグループがありました。したがって、スイッチを7004000400に設定して適切なボタンを押すと、カードリーダーの最初のカードがメモリに読み込まれ(オペコード70)、アドレス400から開始され、400にジャンプしてそのカード上のプログラムの実行が開始されます。[ 18 ] IBM 7040と7044は同様のメカニズムを備えており、ロードボタンを押すと、フロントパネルの入力キーで設定された命令が実行され、その命令で設定されたチャネルにアドレス00100から始まるメモリへのデータ転送コマンドが与えられます。転送が完了すると、CPUはアドレス00101にジャンプします。[ 19 ]
IBMの競合他社も、ボタン一つでプログラムをロードできる機能を提供していた。
この注目すべきバリエーションはBurroughs B1700に見られ、ブートROMもハードワイヤードIPL操作もありません。代わりに、システムがリセットされた後、フロントパネルに取り付けられたカセットテープドライブからマイクロ命令を順次読み込んで実行します。これにより、RAMにブートローダーが設定され、それが実行されます。 [ 23 ]ただし、これはシステムについてほとんど仮定を置かないため、CPUが重大な故障の場合でもフロントパネルに理解可能なコードを表示する診断(メンテナンステストルーチン)テープをロードするために同様に使用できます。[ 23 ]
IBM System/360とその後継機(現行のz/Architectureマシンを含む) では、起動プロセスは初期プログラムロード(IPL)と呼ばれています。
IBM はこの用語を7030 (Stretch)用に考案し、[ 11 ] System/360 の設計で復活させ、現在もこれらの環境で使用し続けています。[ 24 ] System/360 プロセッサでは、コンピュータ オペレータが 3 桁の 16 進数のデバイス アドレス (CUU; C = I/O チャネル アドレス、UU = コントロール ユニットおよびデバイス アドレス[ nb 3 ] ) を選択し、 LOADボタンを押すことで IPL が開始されます。ハイエンドのSystem/360モデル、ほとんどの[ nb 4 ] System/370 、および一部のそれ以降のシステムでは、スイッチと LOAD ボタンの機能は、多くの場合[ nb 5 ] IBM 2250のようなデバイスまたはIBM 3270のようなデバイスであるグラフィック コンソールの画面上の選択可能な領域を使用してシミュレートされます。例えば、System/370 Model 158では、キーボードのシーケンス0-7-X(0、7、Xの順)を入力すると、入力領域に入力されたデバイスアドレスからIPLが実行されます。Amdahl 470V/6および関連CPUは、オプションの第2チャネルユニットが搭載されたCPUでは4桁の16進数をサポートし、合計32チャネルとなりました。後にIBMも16チャネルを超えるチャネルをサポートするようになりました。
System/360 およびIBM Zより前の後継機種、ならびに Amdahl などの互換機における IPL 機能は、オペレータが指定したデバイスから 24 バイトを読み取り、実アドレス 0 から主記憶装置にロードします。2 番目と 3 番目の 8 バイトのグループは、起動プログラムのロードを継続するためのチャネル コマンド ワード(CCW) として扱われます (最初の CCW は常に CPU によってシミュレートされ、コマンド チェーンと長さの誤りを示す抑制が強制される Read IPL コマンド02hで構成されます)。I/O チャネル コマンドが完了すると、最初の 8 バイトのグループがプロセッサのプログラム ステータス ワード(PSW) にロードされ、起動プログラムはその PSW で指定された場所から実行を開始します。[ 24 ] IPL デバイスは通常ディスク ドライブであるため、02h読み取りタイプのコマンドは特別な意味を持ちますが、まったく同じ手順が、テープ ドライブやカード リーダーなどの他の入力タイプのデバイスから IPL を行う際にもデバイスに依存しない方法で使用され、たとえば、OS の初期配布磁気テープから新品のコンピュータにオペレーティングシステムをインストールすることができます。ディスク コントローラの場合、02hコマンドは、選択されたデバイスをシリンダ0000h、ヘッド0000hにシークさせ、シーク シリンダおよびヘッド コマンド07hをシミュレートし、レコード01hを検索させ、検索 ID 等価コマンド31hをシミュレートします。テープ コントローラおよびカード コントローラでは、これらのデバイス クラスでは Read IPL コマンドは単なるシーケンシャル読み取りコマンドであるため、シークおよび検索はシミュレートされません。
ディスク、テープ、またはカードデッキには、実際のオペレーティングシステムまたはスタンドアロンユーティリティをメインストレージにロードするための特別なプログラムが含まれている必要があります。この特定の目的のために、スタンドアロンのDASDI(Direct Access Storage Device Initialization)プログラム、またはオペレーティングシステム上で実行される同等のプログラム(例:ICKDSF)によって「IPLテキスト」がディスク上に配置されますが、IPL対応のテープやカードデッキは通常、この「IPLテキスト」が既に存在する状態で配布されます。
IBMはIPLプロセスにいくつかの進化的な変更を加え、System/370 Extended Architecture(S/370-XA)以降では詳細の一部を変更し、z/Architecture向けに新しいタイプのIPLを追加しました。

デジタル・イクイップメント・コーポレーション(DEC)のPDP-5およびPDP-8 (1965年)を皮切りに、ミニコンピュータはCPUを使用して入出力操作を補助することで設計を簡素化しました。これによりコストは削減されましたが、起動はボタンを1つ押すよりも複雑になりました。ミニコンピュータは通常、フロントパネルのスイッチ群を操作することで短いプログラムを切り替える方法を備えていました。初期のミニコンピュータは電源が切れても情報が失われない磁気コアメモリを使用していたため、これらのブートストラップローダーは消去されない限りそのまま残りました。プログラムのバグによってメモリ全体を上書きするループが発生すると、意図せず消去されることがありました。
このようなシンプルな起動方式を採用した他のミニコンピュータとしては、ヒューレット・パッカードのHP 2100シリーズ(1960年代半ば)、初代データゼネラルNova(1969年)、DECのPDP-4 (1962年)およびPDP-11 (1970年)などが挙げられる。
ミニコンピュータの入出力デバイスで読み取り操作を行うために必要な入出力操作は、デバイスコントローラごとに異なるのが一般的であったため、デバイスごとに異なるブートストラッププログラムが必要であった。
DECはその後、1971年にPDP-11用のオプションのダイオードマトリックス読み出し専用メモリを追加し、最大32ワード(64バイト)のブートストラッププログラムを格納するようにした。これは、Unibusに接続するプリント回路カードM792で構成され、32×16の半導体ダイオードアレイを備えていた。512個のダイオードすべてが配置されている場合、メモリにはすべてのビットが「1」で、カードは「0」にするビットに対応するダイオードを切り取ることでプログラムされた。DECはまた、不要なダイオードを省略するだけで多くの標準入力デバイス用にプリプログラムされたバージョンのカード、BM792-Yxシリーズも販売した。[ 25 ] [ 26 ]
以前の方式に倣い、初期のPDP-1にはハードウェア ローダーが搭載されており、オペレータはロードスイッチを押すだけで、紙テープリーダーにプログラムをコア メモリに直接ロードするように指示できます。PDP -4 の後継機であるPDP-7 [ 27 ] 、PDP-9 [ 28 ]、PDP-15 [ 29 ]には、紙テープからプログラムを読み込んでジャンプするための Read-In ボタンが追加されています。Data General Supernova は、フロント パネル スイッチを使用して、フロント パネルのデータ スイッチで指定されたデバイスから命令をメモリに自動的にロードし、ロードされたコードにジャンプするようにコンピュータを動作させました。[ 30 ]
紙テープリーダーを備えたミニコンピュータでは、ブートプロセスで最初に実行されるプログラムであるブートローダーが、コアメモリに、チェックサム付きの紙テープを読み取ることができる第2段階ブートローダー(バイナリローダーと呼ばれることが多い)または外部ストレージメディアからのオペレーティングシステムを読み込みます。ブートローダーの擬似コードは、次の8つの命令のように単純なものになります。
関連する例として、1970年代のNicolet Instrument Corporation製ミニコンピュータ用のローダーが挙げられる。これは、Teletype Model 33 ASRテレプリンタの紙テープ読み取り・パンチユニットを使用している。第2段階ローダーのバイトは、紙テープから逆順に読み取られる。
第2ステージローダーの長さは、最後のバイトがアドレス7を上書きするように設定されています。アドレス6の命令が実行された後、アドレス7から第2ステージローダーの実行が開始されます。第2ステージローダーは、オペレーティングシステムを含むはるかに長いテープがテープリーダーに挿入されるのを待ちます。ブートローダーと第2ステージローダーの違いは、紙テープの読み取りエラーを捕捉するためのチェックコードが追加されている点です。これは、Teletype Model 33 ASRのような比較的低コストの「パートタイム使用」ハードウェアで頻繁に発生するエラーです。(Friden Flexowriterははるかに信頼性が高かったものの、価格も比較的高価でした。)
Altair 8800 (1975 年に最初にリリース) や、それよりさらに古い同様のマシン (Intel 8008 CPU をベースにしたもの) のような初期のマイクロコンピュータには、ブートストラップ ハードウェアは存在しませんでした。 [ 31 ]電源を入れると、CPU はランダム データを含むメモリを認識します。これらのマシンのフロント パネルには、アドレスとデータを入力するためのトグル スイッチがあり、コンピュータ メモリ ワードとアドレス バスのビットごとに 1 つのスイッチがありました。ハードウェアに簡単な追加を行うことで、これらのスイッチから一度に 1 つのメモリ位置をロードしてブートストラップ コードを格納することができました。その間、CPU はメモリの内容を実行しようとしないようにしていました。正しくロードされると、CPU はブートストラップ コードを実行できるようになりました。このプロセスは、以前のいくつかのミニ コンピュータで使用されていたものと同様で、面倒でエラーがあってはいけませんでした。[ 32 ]

集積回路読み出し専用メモリ(ROM)の登場により、マスクプログラムROM、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、フラッシュメモリなど、多くのバリエーションが生まれ、ROMの物理的なサイズとコストが削減されました。これにより、ファームウェアブートプログラムをコンピュータの一部として組み込むことが可能になりました。
Data General Nova 1200 (1970 年) とNova 800 (1971 年) にはプログラムロードスイッチがあり、2 つの ROM チップを提供するオプションと組み合わせることで、それらの ROM チップからプログラムをメインメモリにロードしてそこにジャンプすることができました。[ 30 ] Digital Equipment Corporation は、集積回路 ROM ベースの BM873 (1974 年)、[ 33 ] M9301 (1977 年)、[ 34 ] M9312 (1978 年)、[ 35 ] REV11-A および REV11-C、[ 36 ] MRV11-C、[ 37 ]および MRV11-D [ 38 ] ROM メモリを発表しました。これらはすべてブートストラップ ROM として使用できます。 PDP-11/34 (1976)、[ 39 ] PDP-11/60 (1977)、[ 40 ] PDP-11/24 (1979)、[ 41 ]およびそれ以降のほとんどのモデルにはブートROMモジュールが含まれています。
イタリアの電話交換機「Gruppi Speciali」は、CSELTの研究者であるAlberto Ciaramellaによって1975年に特許を取得しており[ 42 ]、外部ROMを搭載していた。Gruppi Specialiは1975年から、フェライトコアではなく半導体で構成されたROMメモリからオペレーティングシステムを起動する、完全にシングルボタン式のマシンだった。ROMデバイスはGruppi Specialiのコンピュータにネイティブに組み込まれてはいなかったが、マシンの設計上、シングルボタンROMブートを、そのように設計されていないマシン(したがって、この「ブートストラップデバイス」はアーキテクチャに依存しない)でも可能にした(例えば、PDP-11)。電源を切った後のマシンの状態を保存する機能も備えており、これは電話交換競争におけるもう1つの重要な機能だった。[ 43 ]
ミニコンピュータやスーパーミニコンピュータの中には、メインプロセッサを起動するための独立したコンソールプロセッサを備えているものがある。PDP-11/44 はコンソールプロセッサとしてIntel 8085 を搭載していた。 [ 44 ] Digital 社の32 ビット スーパーミニコンピュータのVAXラインの最初の機種である VAX-11/780 はLSI - 11ベースのコンソールプロセッサを搭載していた。 [ 45 ]また、VAX-11/730 は 8085 ベースのコンソールプロセッサを搭載していた。[ 46 ]これらのコンソールプロセッサは、さまざまなストレージデバイスからメインプロセッサを起動することができた。
VAX-11/750などの他のスーパーミニコンピュータの中には、起動の最初の段階を含むコンソール機能をCPUマイクロコードで実装しているものもある。[ 47 ]
通常、マイクロプロセッサは、リセットまたは電源投入後に、起動プロセスを実行します。このプロセスは通常、「特定のアドレスから始まるコードの実行を開始する」または「特定のアドレスでマルチバイトコードを探し、指定された場所にジャンプして実行を開始する」という形式をとります。このマイクロプロセッサを使用して構築されたシステムでは、永続ROMがこれらの特別な場所を占めるため、システムは常にオペレータの支援なしに動作を開始します。たとえば、Intel x86プロセッサは常にF000:FFF0から始まる命令を実行することで起動しますが[ 48 ] [ 49 ] 、 MOS 6502プロセッサでは、$FFFD(MSバイト)と$FFFC(LSバイト)の2バイトのベクトルアドレスを読み取り、その場所にジャンプしてブートストラップコードを実行することで初期化が開始されます[ 50 ] 。
1976年に発表されたApple Computer初のコンピュータであるApple 1は、PROMチップを搭載しており、商用コンピュータでは(Altair 8800のように)起動プロセス用のフロントパネルが不要でした。Appleの発表広告によると、「スイッチもライトも不要…PROMのファームウェアにより、キーボードからプログラム(すべて16進数)を入力、表示、デバッグできます。」[ 51 ]
当時、読み出し専用メモリが高価だったため、Apple IIはディスクオペレーティングシステムを起動する際に、非常に小さな段階的な処理を繰り返し、それぞれの段階で制御を次の段階へと渡していくという方式を採用していました。(「Apple DOS: ブートローダー」を参照)。ディスクオペレーティングシステムはROMにほとんど依存していなかったため、ハードウェアも非常に柔軟で、多様なカスタムディスクコピープロテクション機構に対応していました。(「ソフトウェアクラッキング: 歴史」を参照)。
オペレーティングシステムの中には、特にAppleの1995年以前のMacintoshシステムのように、ハードウェアと密接に結びついているものがあり、標準のオペレーティングシステム以外のものをネイティブに起動することは不可能です。これは、前述のスイッチを使用するシナリオとは正反対の極端なケースです。柔軟性に欠けますが、すべてのハードウェアが正常に動作している限り、比較的エラーがなく、確実な方法です。このような状況における一般的な解決策は、標準OSに属するプログラムとして動作し、システムを乗っ取って代替OSをロードするブートローダーを設計することです。この手法は、AppleがA/UX Unixの実装で使用し、さまざまなフリーウェアのオペレーティングシステムやBeOS Personal Edition 5にも採用されました。
Atari STマイクロコンピュータのような一部のマシンは「インスタント オン」で、オペレーティングシステムは ROM から実行されました。そのため、ブートストラップの特徴的な操作の 1 つとして、セカンダリ ストアまたはターシャリ ストアからの OS の取得は不要になりました。システムのカスタマイズ、アクセサリ、およびその他のサポート ソフトウェアを自動的にロードできるようにするために、ブート プロセス中に Atari のフロッピー ドライブが読み込まれ、追加のコンポーネントが検索されました。システムが追加のコンポーネントを検索している間、手動でフロッピーを挿入する時間を与えるタイムアウト遅延がありました。これは、空のディスクを挿入することで回避できました。Atari ST のハードウェアは、Atari が電子ゲームを製造していた歴史の名残として、カートリッジ スロットでゲーム用のネイティブ プログラム実行ができるようにも設計されていました。ゲーム スロットに Macintosh システム ROM を含むSpectre GCRカートリッジを挿入して Atari の電源を入れると、Atari 独自のTOSではなく Macintosh オペレーティングシステムを「ネイティブにブート」することができました。
IBMパーソナルコンピュータには、 BIOSと呼ばれるROMベースのファームウェアが搭載されていました。このファームウェアの機能の一つは、マシンの電源投入時に電源投入時自己診断テストを実行し、その後ブートデバイスからソフトウェアを読み込んで実行することでした。IBMパーソナルコンピュータのBIOSと互換性のあるファームウェアは、IBM PC互換コンピュータで使用されています。UEFIは、元々はItaniumベースのマシン向けにIntelによって開発され、後にIntelプロセッサを搭載したApple Macなど、 x86ベースのマシンでもBIOSの代替として使用されるようになりました。
Unixワークステーションは当初、ベンダー固有のROMベースのファームウェアを使用していた。その後、Sun MicrosystemsはOpenBoot (後にOpen Firmwareとして知られる)を開発し、 Forthインタープリタを組み込み、ファームウェアの大部分をForthで記述した。これはIEEEによってIEEE標準1275-1994として標準化され、この標準を実装したファームウェアはPowerPCベースのMacやその他のPowerPCベースのマシン、そしてSun自身のSPARCベースのコンピュータで使用された。Advanced RISC Computing仕様では別のファームウェア標準が定義され、これは一部のMIPSベースおよびAlphaベースのマシン、そしてSGI Visual Workstation x86ベースのワークステーションで実装された。
コンピュータの電源がオフになると、オペレーティングシステム、アプリケーション コード、データなどのソフトウェアは不揮発性メモリに保存されたままになります。コンピュータの電源がオンになると、通常はランダム アクセス メモリ(RAM) にオペレーティングシステムやそのローダーはインストールされません。コンピュータはまず、読み取り専用メモリ(ROM、後に EEPROM、NOR フラッシュ) に格納されている比較的小さなプログラムを実行します。このプログラムは、その場で実行をサポートし、CPU とマザーボードを初期化し、メモリ (特に x86 システム) を初期化し、オペレーティングシステム プログラムとデータを RAM にロードできるストレージ (通常はブロック アドレス指定デバイス、たとえばハードディスク ドライブ、NAND フラッシュ、ソリッドステート ドライブ) を初期化してアクセスし、その他の I/O デバイスを初期化します。
この一連の処理を開始する小さなプログラムは、ブートストラップローダー、ブートストラップ、またはブートローダーと呼ばれます。多くの場合、マルチステージブートローダーが使用され、その過程で複雑さが増していく複数のプログラムがチェーンローディングと呼ばれるプロセスで次々とロードされます。
初期のコンピュータシステムの中には、人間のオペレータまたは周辺機器から起動信号を受信すると、特定のメモリ位置にごく少数の固定命令をロードし、少なくとも1つのCPUを初期化し、CPUをその命令に向け、実行を開始するものがあった。これらの命令は通常、何らかの周辺機器(オペレータがスイッチで選択できる場合もある)からの入力操作を開始する。他のシステムでは、周辺機器またはI/Oコントローラにハードウェアコマンドを直接送信し、非常に単純な入力操作(例えば、「システムデバイスのセクタ0をメモリの1000番地から読み込む」など)を実行させ、実質的に少数のブートローダ命令をメモリにロードする。その後、I/Oデバイスからの完了信号を使用して、CPUによる命令の実行を開始する。
小型コンピュータでは、柔軟性は劣るものの自動化されたブートローダー機構が用いられることが多く、これによりコンピュータが迅速に、かつあらかじめ決められたソフトウェア構成で起動することが保証されます。例えば、多くのデスクトップコンピュータでは、ブートストラップ処理は、CPUがROMに格納されたソフトウェア(例えば、IBM PCのBIOS )を所定のアドレスで実行することから始まります(Intel x86シリーズを含む一部のCPUは、リセット後に外部からの支援なしにこのソフトウェアを実行するように設計されています)。このソフトウェアには、ブートに参加できるデバイスを検索し、最も有望なデバイスの特別なセクション(最も一般的にはブートセクタ)から小さなプログラムをロードする基本的な機能が含まれています。通常、プログラムはセクタの先頭などの固定エントリポイントから開始されます。
ブートローダーは、特にサイズに関して、特有の制約を受ける場合があります。たとえば、IBM PC および互換機では、ブートコードはマスターブートレコード(MBR) とパーティションブートレコード(PBR) に収まる必要があり、これらは単一セクターに制限されています。IBM System/360では、サイズは IPL メディア (カードサイズ、トラックサイズなど) によって制限されます。
このような制約のあるシステムでは、RAM に最初にロードされるプログラムはオペレーティングシステムをロードするのに十分な大きさではない場合があり、代わりに別のより大きなプログラムをロードする必要があります。RAM に最初にロードされるプログラムは第 1 段階ブートローダーと呼ばれ、それがロードするプログラムは第 2 段階ブートローダーと呼ばれます。多くの組み込み CPU では、CPU 内蔵ブート ROM (ゼロ 段階ブートローダーと呼ばれることもあります) [ 52 ] が第 1 段階ブートローダーを見つけてロードできます。
第1段階(ハードウェア初期化段階)のブートローダーの例としては、BIOS、UEFI、coreboot、Libreboot、Das U-Bootなどがあります。IBM PCでは、マスターブートレコード(MBR)とパーティションブートレコード(PBR)のブートローダーは、少なくとも32KB [ 53 ] [ 54 ] ( 後に64KB [ 55 ]に拡張)のシステムメモリを必要とし、オリジナルの8088/8086プロセッサでサポートされている命令のみを使用するようにコーディングされていました。
shim、 [ 56 ] GNU GRUB、rEFInd、BOOTMGR、Syslinux、NTLDR などの第2段階(OS初期化段階)ブートローダーは、それ自体はオペレーティングシステムではありませんが、オペレーティングシステムを適切にロードして実行を移すことができます。オペレーティングシステムはその後自身を初期化し、追加のデバイスドライバをロードする場合があります。第2段階ブートローダーは、自身の動作にドライバを必要としませんが、BIOS、UEFI、Open Firmwareなどのシステムファームウェアによって提供される汎用ストレージアクセス方法を使用する場合があります。ただし、通常はハードウェア機能が制限され、パフォーマンスが低下します。[ 57 ]
多くのブートローダー(GNU GRUB、rEFInd、Windows の BOOTMGR、Syslinux、Windows NT/2000/XP の NTLDR など)は、ユーザーに複数の起動オプションを提供するように構成できます。これらのオプションには、異なるオペレーティングシステム(異なるパーティションまたはドライブからのデュアルブートまたはマルチブート用)、同じオペレーティングシステムの異なるバージョン(新しいバージョンに予期しない問題がある場合)、異なるオペレーティングシステムのロードオプション(レスキューモードまたはセーフモードでの起動など)、およびメモリ テスター( memtest86+など)、基本的なシェル(GNU GRUB など)、さらにはゲーム( PC Booter ゲームのリストを参照)など、オペレーティングシステムなしで機能できるスタンドアロン プログラムが含まれます。[ 58 ]一部のブートローダーは、他のブートローダーをロードすることもできます。たとえば、GRUB は Windows を直接ロードする代わりに BOOTMGR をロードします。通常、デフォルトの選択肢が時間遅延とともに事前に選択されており、その間にユーザーはキーを押して選択を変更できます。この遅延の後、デフォルトの選択肢が自動的に実行されるため、操作なしで通常の起動が可能になります。
コンピュータがユーザーと対話できる状態になったとき、またはオペレーティングシステムがシステムプログラムやアプリケーションプログラムを実行できる状態になったときに、ブートプロセスは完了したとみなされます。
Das U-BootやiBootなどの一部のブートローダーには、第1段階と第2段階の両方のブート機能が含まれています。
多くの組み込みシステムは即座に起動する必要があります。例えば、デジタルテレビやGPSナビゲーション機器の起動に1分も待つのは一般的に許容されません。そのため、これらの機器にはROMやフラッシュメモリにソフトウェアシステムが搭載されており、すぐに動作を開始できるようになっています。ロードは、機器製造時に事前に計算してROMに保存できるため、ほとんど、あるいは全く必要ありません。
大規模で複雑なシステムでは、起動手順が複数の段階を経て進行し、最終的にオペレーティングシステムやその他のプログラムがロードされて実行準備が整う場合があります。オペレーティングシステムは起動も停止もしない設計になっているため、ブートローダーはオペレーティングシステムをロードし、システム内の単なるプロセスとして自身を構成した後、オペレーティングシステムに制御を完全に移譲します。その後、ブートローダーは他のプロセスと同様に正常に終了します。
ほとんどのコンピュータは、コンピュータネットワーク経由で起動することも可能です。この場合、オペレーティングシステムはサーバーのディスクに保存され、その一部がTFTP( Trivial File Transfer Protocol )などのシンプルなプロトコルを使用してクライアントに転送されます。これらの転送が完了すると、オペレーティングシステムが起動プロセスの制御を引き継ぎます。
第2段階ブートローダーと同様に、ネットワークブートは、ネットワークインターフェースのブートROMが提供する汎用ネットワークアクセス方式を使用して開始されます。ブートROMには通常、プレブート実行環境(PXE)イメージが含まれています。ドライバは不要ですが、オペレーティングシステムカーネルとドライバが転送され起動されるまでは、システムの機能は制限されます。そのため、ROMベースのブートが完了すると、ネットワークインターフェースを使用する機能を持たないオペレーティングシステムでも、ネットワークブートを実行することが可能です。

ブートデバイスとは、オペレーティングシステムがロードされるストレージデバイスのことです。最新のPCのUEFIまたはBIOSファームウェアは、さまざまなデバイスからのブートをサポートしています。通常、ローカルのソリッドステートドライブまたはハードディスクドライブ(GPTまたはマスターブートレコード(MBR)経由)、光ディスクドライブ(El Toritoを使用)、USBマスストレージデバイス(USBフラッシュドライブ、メモリーカードリーダー、USBハードディスクドライブ、USB光ディスクドライブ、USBソリッドステートドライブなど)、またはネットワークインターフェイスカード(PXEを使用)からのブートが可能です。古い、あまり一般的ではないBIOSブート可能なデバイスには、フロッピーディスクドライブ、Zipドライブ、LS-120ドライブなどがあります。IBM互換PCは、水平統合ハードウェアとUEFI/BIOSファームウェアを使用する例です。
通常、システムファームウェア(UEFIまたはBIOS)では、ユーザーが起動順序を設定できます。起動順序が「1番目にDVDドライブ、2番目にハードディスクドライブ」に設定されている場合、ファームウェアはDVDドライブからの起動を試み、それが失敗した場合(例えば、ドライブにDVDが入っていない場合)、ローカルのハードディスクドライブからの起動を試みます。
例えば、ハードドライブにWindowsがインストールされているPCでは、ユーザーは上記のようにブート順序を設定し、Linux Live CDを挿入することで、ハードドライブにオペレーティングシステムをインストールすることなくLinuxを試すことができます。これはデュアルブートの一例で、コンピュータが電源投入時の自己診断テスト(POST)を実行した後、ユーザーが起動するオペレーティングシステムを選択します。このデュアルブートの例では、ユーザーはコンピュータからDVDを挿入または取り外すことで選択しますが、選択したデバイスのブートマネージャメニューから選択するか、コンピュータのキーボードを使用してBIOSまたはUEFIブートメニューから選択するか、あるいはその両方によって起動するオペレーティングシステムを選択する方が一般的です。ブートメニューは通常、 POST中にキーF8またはキーを押して入ります。BIOSセットアップは通常、 POST中にキーまたはキーを押して入ります。 [ 59 ] [ 60 ]F12F2DEL
インターネットアクセスなどのさまざまな簡単なタスクのために、通常はLinuxの派生版にユーザーがすぐに起動できるデバイスがいくつかあります。例としては、 SplashtopとLatitude ONがあります。[ 61 ] [ 62 ] [ 63 ]


IBM互換パーソナルコンピュータのx86 CPUは起動時に、リセットベクタ( 16ビットx86プロセッサでは物理メモリアドレスFFFF0h [ 64 ]、32ビットおよび64ビットx86プロセッサではFFFFFFF0h [ 65 ] [ 66 ] )にある命令をリアルモードで実行します。この命令は通常、ROM内のファームウェア(UEFIまたはBIOS)のエントリポイントを指しています。このメモリ位置には通常、ファームウェア(UEFIまたはBIOS)の起動プログラムの場所に実行を転送するジャンプ命令が含まれています。このプログラムは、電源投入時自己診断テスト(POST)を実行して、メインメモリ(DRAM)、PCIバス、PCIデバイス(組み込みオプションROMの実行を含む)などの必要なデバイスをチェックして初期化します。最も複雑な手順の1つは、 SPD上のDRAMの設定ですが、この時点ではメモリが非常に限られているため、さらに複雑になります。
必要なハードウェアの初期化後、ファームウェア(UEFIまたはBIOS)は、事前に設定された不揮発性ストレージデバイスのリスト(「ブートデバイスシーケンス」)を順に確認し、起動可能なデバイスを見つけます。
BIOS は起動可能なデバイスを見つけると、ブート セクタをリニア アドレス7C00h (通常はセグメント:オフセット0000h : 7C00h、[ 53 ] [ 55 ] : 29 ですが、一部の BIOS では誤って07C0h : 0000hを使用します) にロードし、実行をブート コードに渡します。ハードディスクの場合、これはマスター ブート レコード(MBR) と呼ばれます。従来の MBR コードは、MBR のパーティション テーブルをチェックして、起動可能として設定されているパーティション (アクティブフラグが設定されているパーティション) を探します[ nb 6 ] 。アクティブなパーティションが見つかった場合、MBR コードはそのパーティションからブート セクタコード (ボリューム ブート レコード(VBR)と呼ばれます) をロードして実行します。MBR ブート コードは多くの場合、オペレーティングシステム固有です。
ブート可能な MBR デバイスは、読み取り可能であり、最初のセクターの最後の 2 バイトにリトルエンディアンのワードAA55hが含まれているもの(ディスク上ではバイト シーケンス55h、AAhとして見つかるもの) ( MBRブート署名とも呼ばれる)、またはセクター内のコードが x86 PC で実行可能であることがその他の方法で確認されているものと定義されます。
ブートセクタコードは、ブートローダーの第一段階です。これは固定ディスクとリムーバブルドライブに配置され、BIOSが適切なブートローダーに必要とする、4つのパーティションエントリを持つデフォルトの64バイトのパーティションテーブルと2バイトのブート署名のための領域を確保するために、マスターブートレコードの最初の446バイトに収まる必要があります。ただし、一部の環境では、4つ以上のパーティションエントリ(それぞれ16バイトで最大16個)、ディスク署名(6バイト)、ディスクタイムスタンプ(6バイト)、アドバンストアクティブパーティション(18バイト)、または特別なマルチブートローダーなどの追加機能もサポートする必要があるため、さらに少ないサイズで済む場合もあります。フロッピーおよびスーパーフロッピーのボリュームブートレコードでは、 DOS 4.0 以降、FAT12およびFAT16ボリュームの拡張 BIOS パラメータブロックに最大 59バイトが占有されますが、DOS 7.1 で導入されたFAT32 EBPB では 87 バイトも必要となり、セクターサイズを 512 バイトと想定すると、ブートローダー用に残されるのは 423バイトのみとなります。そのため、従来、Microsoft のブートセクターはブートプロセスに一定の制限を課していました。たとえば、ブートファイルはファイルシステムのルートディレクトリの固定位置に配置され、連続したセクターとして格納される必要がありました。[ 67 ] [ 68 ]この条件はコマンドによって処理され、後のバージョンの DOS では若干緩和されました。[ 68 ] [ nb 8 ]その後、ブートローダーはファイルの最初の 3 つのセクターをメモリにロードすることができ、そのメモリには、ファイルの残りの部分をメモリにロードできる別の組み込みブートローダーが含まれていました。[ 68 ]マイクロソフトがLBAとFAT32のサポートを追加した際、サイズ上の理由から、 2つの物理セクターにまたがり、386命令を使用するブートローダーに切り替えた。同時に、他のベンダーは、最小限のメモリ(32KB )とプロセッササポート(8088/8086)という当初の制約を緩和することなく、1つのブートセクターにさらに多くの機能を詰め込むことに成功した。[注9 ]例えば、DR-DOSのブートセクターは、FAT12、FAT16 、FAT32ファイルシステム内のブートファイルを見つけ、 CHSを介して全体をメモリにロードすることができる。 SYS または LBA の場合、ファイルが固定された場所や連続したセクターに格納されていなくても構いません。[ 69 ] [ 53 ] [ 70 ] [ 71 ] [ 72 ] [ nb 10 ] [ nb 9 ]
VBRは多くの場合OS固有のものですが、その主な機能は、アクティブなパーティションからオペレーティングシステムのブートローダーファイル(やなど)をロードして実行することですbootmgr。ntldrこれは第2段階のブートローダーです。その後、ブートローダーはストレージデバイスからOSカーネルをロードします。
アクティブなパーティションがない場合、またはアクティブなパーティションのブートセクタが無効な場合、MBR はセカンダリ ブート ローダをロードし、パーティションを選択して (多くの場合、ユーザー入力によって) そのブート セクタをロードします。ブート セクタは通常、対応するオペレーティングシステム カーネルをロードします。場合によっては、MBR はアクティブなパーティションの起動を試みる前にセカンダリ ブート ローダをロードしようとすることもあります。すべてが失敗した場合、 BIOS に制御を戻すためにINT 18h [ 55 ] [ 53 ] BIOS 割り込み呼び出し(INT 18h が戻る場合に備えて INT 19h が続く) を発行する必要があります。その後、BIOS は他のデバイスからの起動を試み、ネットワーク経由でリモート ブートを試みます。[ 53 ]
多くの最新システム(Intel Macや新しいPC)はUEFIを使用しています。[ 73 ] [ 74 ]
BIOSとは異なり、UEFI( CSM経由のレガシーブートではない)はブートセクタに依存しません。UEFIシステムはブートローダー(USBディスクまたはEFIシステムパーティション内のEFIアプリケーションファイル)を直接ロードし、[ 75 ] OSカーネルはブートローダーによってロードされます。
多くの最新のCPU、SoC、マイクロコントローラ(例えば、TI OMAP)や、場合によってはデジタル信号プロセッサ(DSP)にも、シリコンに直接ブートROMが統合されている場合があります。そのため、このようなプロセッサは、NANDフラッシュやeMMCなどのブートソースからブートプログラム(ファームウェアまたはソフトウェア)をロードし、簡単なブートシーケンスを独自に実行できます。このようなデバイスを処理するために必要なすべてのロジックをハードワイヤリングすることは困難であるため、このようなシナリオでは統合ブートROMが使用されます。また、ブートROMは、UART、SPI、USBなどのシリアルインターフェイスを介してブートローダーまたは診断プログラムをロードすることもできます。この機能は、システムの復旧目的でよく使用されますが、不揮発性メモリにソフトウェアがまだない場合の初期不揮発性メモリプログラミングにも使用できます。多くの最新のマイクロコントローラ(例えば、USBフラッシュドライブのフラッシュメモリコントローラ)には、シリコンに直接ファームウェアROMが統合されています。
組み込みシステム設計の中には、中間ブートシーケンスステップを含むものもあります。たとえば、Das U-Boot は2 つのステージに分割される場合があります。プラットフォームは、U-Boot の簡略版である小型の SPL (Secondary Program Loader) をロードし、SPL は初期ハードウェア構成 (たとえば、 CPU キャッシュを RAM として使用したDRAM の初期化) を実行して、より大規模でフル機能の U-Boot をロードします。[ 76 ]このような組み込みシステムでは、高度にカスタマイズされた垂直統合型のハードウェアとソフトウェアが使用される場合があり、ブートプログラムはよりシンプルになる場合があります。[ 77 ]一部の CPU や SoC では、ブートプロセスで CPU キャッシュを RAM として使用せず、統合ブートプロセッサを使用してハードウェア構成を実行してコストを削減する場合があります。[ 78 ]
JTAGなどのハードウェアデバッグインターフェースを使用してシステムを制御することも可能です。このようなインターフェースは、プロセッサコアに不揮発性メモリへの書き込みに必要な動作を実行するように指示することで、ブートローダープログラムをブート可能な不揮発性メモリ(フラッシュメモリなど)に書き込むために使用できます。あるいは、デバッグインターフェースを使用して診断コードまたはブートコードをRAMにアップロードし、プロセッサコアを起動してアップロードされたコードを実行するように指示することもできます。これにより、例えば、サポートされているブートデバイスにソフトウェアが残っておらず、プロセッサにブートROMが内蔵されていない組み込みシステムの復旧が可能になります。JTAGは標準的で普及しているインターフェースであり、多くのCPU、マイクロコントローラ、その他のデバイスがJTAGインターフェースを備えて製造されています(2009年現在) 。)
一部のマイクロコントローラは、システムを任意に制御したり、コードを直接実行したりするために使用できない特殊なハードウェアインターフェースを備えています。このインターフェースは、シンプルなプロトコルを介してブートコードをブート可能な不揮発性メモリ(フラッシュメモリなど)に挿入することを可能にします。製造段階では、このようなインターフェースを使用してブートコード(およびその他のコード)を不揮発性メモリに注入します。システムのリセット後、マイクロコントローラは不揮発性メモリにプログラムされたコードの実行を開始します。これは、通常のプロセッサがブートにROMを使用するのと同様です。この技術は、特にAtmel AVRマイクロコントローラなどで採用されています。多くの場合、このようなインターフェースはハードワイヤードロジックによって実装されます。また、GPIOピンからオンチップブートROM上で動作するソフトウェアによって作成される場合もあります。
ほとんどのDSPには、シリアルモードブートとパラレルモードブートがあり、ホストポートインターフェース(HPIブート)などがその例です。
DSPの場合、システム設計には2つ目のマイクロプロセッサまたはマイクロコントローラが存在することが多く、これはシステム全体の動作、割り込み処理、外部イベントの処理、ユーザーインターフェースなどを担当し、DSPは信号処理タスクのみに特化しています。このようなシステムでは、DSPは別のプロセッサによって起動されることがあり、このプロセッサはホストプロセッサ(ホストポートの名前)と呼ばれることもあります。このようなプロセッサは、通常、まず自身のメモリから起動し、DSPの起動を含むシステム全体の動作を制御し、さらにDSPの動作を制御するため、マスターと呼ばれることもあります。DSPは多くの場合、独自のブートメモリを持たず、必要なコードを供給するためにホストプロセッサに依存しています。このような設計を採用した最も有名なシステムは、DSPとCPU/マイクロコントローラが共存する携帯電話、モデム、オーディオプレーヤー、ビデオプレーヤーなどです。
多くのFPGAチップは、電源投入時に外部構成ROM(通常はシリアルEEPROM)から構成情報をロードする。
ブートプロセスのセキュリティを強化するために、さまざまな対策が実施されています。これらの対策の中には必須のものもあれば、エンドユーザーが無効にしたり有効にしたりできるものもあります。従来、ブートには暗号化は使用されていませんでした。ブートローダーのロックを解除することでセキュリティを回避できますが、これはメーカーによって承認されている場合とされていない場合があります。最新のブートローダーは並列処理を利用しており、複数のプロセッサコアとスレッドを同時に実行できるため、ブートのセキュリティをさらに強化しています。
マシュー・ギャレットは、セキュリティを起動することは正当な目的を果たすが、そうすることでユーザーにとって不利なデフォルト設定を選択することになると主張した。 [ 79 ]
並行分散システム・オブ・システムをデバッグする際、ブートループ(ブートループまたはブートループとも表記)は、コンピューティングデバイス上で発生するエラー状態の診断条件です。デバイスがブートシーケンスが完了する前にブートプロセスを繰り返し失敗して再起動すると、再起動によってユーザーが通常のインターフェースにアクセスできなくなる可能性があります。
今日の製品の複雑さが増すにつれ、単一のプロジェクト、単一の部門、あるいは単一の企業でさえ、製品全体を開発することはもはや不可能になり、同時並行かつ分散的な開発が求められています。今日、そして世界中で、業界は複雑な製品開発と、プロジェクト組織、プロジェクト管理、製品品質に関連する膨大な数の関連問題に直面しています。多くのプロセスも分散化されるでしょう。製品品質を測定し、最終的に達成するために非常に重要な欠陥検出プロセスは、通常、プロジェクトの分散的な性質によって引き起こされる問題が最初に発生するプロセスの1つです。欠陥検出活動を複数の関係者に分散すると、作業成果物のレビューが不十分になったり、テストカバレッジに関して「盲点」が発生したり、コンポーネントの過剰テストが発生したりといったリスクが生じます。したがって、欠陥検出活動の有効性と効率性を確保するには、ライフサイクル全体にわたる欠陥検出の調整が必要です。 —JJM Trienekens; RJ Kusters. (2004) [ 81 ]
システムは、例えば明示的なブートループやブルースクリーンなどのエラー状態を示してから、復旧が示される可能性がある。[ 82 ]エラー状態の検出には、分散システムのリアルタイム運用のために分散イベントストアとストリーム処理プラットフォームが必要になる場合がある。
エラー状態はブートループを引き起こす可能性があります。この状態は、以前は正常であった操作からの設定ミスによって発生する可能性があります。エラー状態からの回復試行では、正常な状態に戻るために再起動が行われます。たとえば、Windows OS の操作では、回復手順は 3 回再起動することであり、再起動によって使用可能なメニューに戻ることができました。[ 83 ] [ 84 ] [ 82 ]
復旧は、セキュリティアサーションマークアップ言語(SAML)によって指定される場合があり、SAMLは一部のアプリケーションでシングルサインオン(SSO)を実装することもできます。ゼロトラストセキュリティモデルでは、識別、認可、認証はSSOセッションで分離可能な関心事です。サイトの復旧が示された場合(例えば、空港ターミナルの画面にブルースクリーンが表示された場合)[ a ]状況を改善するために、現地への訪問が必要になる場合があります。[ 81 ]
+1FEh55h AAh55h+1FEhAAh+1FFhAA55h55AAh年。「ブートストラップ手法」と呼ばれることもある手法…
...ブートオーバーレイコードは、ローダーの最初の2つの命令を上書きします。
CS レジスタには F000 が格納されており (これにより、物理アドレス F0000 から始まるコード セグメントが指定されます)、命令ポインタには FFF0 が格納されているため、プロセッサは物理アドレス FFFF0H で最初の命令を実行します。
RESET 後、アドレス ライン A31〜20 は命令フェッチのために自動的にアサートされます。この事実と CS:IP の初期値により、命令の実行は物理アドレス FFFFFFF0H から開始されます。
ハードウェア リセット後にフェッチおよび実行される最初の命令は、物理アドレス FFFFFFF0h にあります。 このアドレスは、プロセッサの最上位の物理アドレスから 16 バイト下です。 ソフトウェア初期化コードを含む EPROM は、このアドレスに配置されている必要があります。
[…]
DR DOS 5.0では
SYSが
改良されている
ため、起動可能なディスクの最初のクラスタを空けておく必要はありません。DR
DOSのシステムファイルはディスク上のどこにでも配置できるため、十分な空き容量のあるディスクであればどれでもシステムの起動ディスクとして設定できます。 […]
{{cite magazine}}: CS1メンテナンス: 非推奨のアーカイブサービス (リンク) (注: ソースではこれをSYSユーティリティによるものとしていますが、実際にはこれはブートセクタ内の高度なブートストラップローダーの機能です。SYSは単にこのセクタをディスクに書き込むだけです。)[…]
DR-DOSブートセクタは […]
IBMBIO.COM
(
DRBIOS.SYS
) ファイルを検索し
、制御を渡す前にそのファイル全体をメモリにロードします。 […]
[…]
DR-DOSブートセクタは、
IBMBIO.COM
ファイル全体を実行する前にメモリにロードします。IBMBIO.COM によってロードされる
IBMDOS.COM
ファイルについては全く気にしません
。 […] DR-DOS ブートセクタは […] カーネルファイルが論理的にルートディレクトリに格納されている限り、それらを見つけることができます。ディスク上の物理的な場所や、断片化されているかどうかは、DR-DOS ブートセクタでは気にしません。したがって、カーネルファイルをディスクにコピーするだけで (単純な
COPY
を使用した場合でも)、ブートセクタが DR-DOS セクタになるとすぐに、それらを見つけてロードします。もちろん、これらすべてを1セクターのサイズであるわずか512バイトに収めるのは困難ですが、DR-DOSシステムをセットアップする必要がある場合、これは大きな利便性の向上であり、DR-DOSマルチOSローダー
ユーティリティ
が動作するための鍵でもあります。MS
-DOS
カーネルファイルは特定の場所に配置する必要がありますが、DR-DOSファイルはどこにでも配置できるため、他のOSを起動するたびに物理的にファイルを入れ替える必要はありません。また、カーネルファイルを古いファイルに上書きコピーするだけでDR-DOSシステムをアップグレードでき、
SYSは不要で、MS-DOS/
PC-DOS
に必要なような複雑なセットアップ手順も必要ありません。同じドライブに異なるファイル名で複数のDR-DOSカーネルファイルを保存することもでき、ローダーは
BOOT.LST
ファイルにリストされているファイル名に従ってそれらを切り替えます
。[…]
[…]
DR-DOS
FDISK は
ディスクをパーティション分割するだけでなく、新しく作成されたボリュームをフォーマットし、ブートセクタを一度に初期化することもできるため、誤って間違ったボリュームを壊してしまうリスクはなく、
FORMAT
/S や
SYS
も必要ありません。その後、システム ファイルを含む残りの DR-DOS ファイルをコピーするだけで済みます。
MS-DOS
/
PC-DOS
とは異なり
、DR-DOSには「スマート」ブートセクタがあり、ファイルシステムを実際に「マウント」してルートディレクトリ内のシステムファイルを検索・ロードします。システムファイルは特定の場所に配置されていることを前提とするのではなく、物理的にはどこにでも配置でき、断片化されていても構いません。[…]