ブートローダーなしでブートローダーを書く


8

正直な答えが本当に見つからないという質問があります。ステップバイステップのチュートリアルを求めているのではなく、何をするつもりでもないということから始めましょう。気になるだけです。

私はオペレーティングシステムの開発と、それらが最初からどのように構築されるかについて、一日中読んでいます。私はその理論をかなりしっかりと把握しています。しかし、答えを見つけることができないように思えるステップが1つあります。

完全なツールが満載のオペレーティングシステムが存在する前に、ブートローダーなどのブートローダーを持たないコンピューター用の単純なブートローダーをブートセクターに作成するにはどうすればよいでしょうか。最小限のコンピュータを購入した後の最初のステップは何ですか?(つまり、画面、キーボード、プロセッサ、RAM、HDD、フロッピー)


回答:


9

歴史的にはさまざまな方法がありました:-

  • OSはまったくありません。実行可能ファイルは最初のカード、テープファイルなどからロードされました。
  • Osは磁気コアメモリにハードコードされています。コアはプレーンフェライトではなく永久磁石であり、磁石のN / S方向に応じて1または0でした。ジェミニとアポロ宇宙船のコンピュータは、すべてのプログラムをこのように「編んだ」。
  • ディスクの最初のセクター。これは、PDP-11などの「ミニ」コンピュータではかなり標準的でした。コンピュータは、最初のディスクから最初のトラックを読み取り、EOFマーカーにヒットしたときにコードを実行するようにハードワイヤードされていました。
  • カスタムブートデバイス。第2世代のIBMメインフレームには、「マイクロコード」OSにロードするための専用の12インチフロッピーディスクがありました。次に、ディスク上のどこかで実際のOSを検索しました。OSをロードするための専用カセットテープドライブを備えたマイクロも見ました。オペレーターはテープを巻き戻すか「裏返す」必要がありました。

  • BIOS。最小限のOSがROMに格納され、プロセッサは「電源投入」時にROMコードを実行するようにハードワイヤードされています。次に、ROMはどこからでも実際のOSを取得します。これは、現代のすべてのコンピュータが機能する方法とほぼ同じです。ROMが実際に行うことは、プロセッサによって異なります。Itelボックスには通常、各プロセッサの「世代」専用の非常に洗練されたBIOSプログラムがあります。Unixタイプのボックスは、一般に、はるかに単純なBIOSを備えています。Sun/ Oracleボックスは、有名な「FORTH」インタープリターをロードしてから、単純なスクリプトを実行してSolarisをロードします。


2
トグルスイッチを忘れないでください!初期のコンピューターの多くにはトグルスイッチの列があり、フロッピーまたはテープからプレブートローダーを手動で読み込んで実際のブートローダーとOSを読み込むことができました
Earlz

@Earlz-そのことを忘れていました。pdp-11では、パネルのトグルスイッチを使用して、ブートデバイスのバイナリアドレスを設定できます。
James Anderson、

@Earlzポールアレン(Microsoftの共同創設者)が彼とビルゲイツのBASICインタープリター用にブートローダーを作成し、飛行機で Altairを作成した方法について有名な話があります。(en.wikipedia.org/wiki/Altair_BASICを参照してください。詳細については詳しく説明していませんが、ストーリーを詳しく説明しています。)
Ryan Reich

4

非常に古い時代(IBM 650やPDP1など)では、フロントパネルのスイッチを使用してメモリに値を入力する必要がありました。本当に初期のコンピューターの写真を見ると、住所とデータの2列のライトが見えました。16ビットのコンピューターでは、これらの16個が実行され、通常、それぞれ8進数または16進数で3または4のグループに色分けされています。

「リセット」ボタンは「アドレス」カウンターをゼロに設定します。次に、データバスのスイッチを目的の値に設定し、「データ書き込み」ボタンを切り替えます。これにより、スイッチ設定がメモリのアドレス0に書き込まれます。上下のトグルスイッチがあり、次または前のアドレスに移動できます。アドレスのスイッチを設定し、「アドレス書き込み」をクリックすることもできます。その新しいアドレスにあったものが16個のデータライトに表示されます。

通常、この手法を使用して、カードリーダーまたは紙テープから値を読み取るための読み取りループに切り替えます。これは、OSまたはアプリケーションのロードを続行するために、より大きなコードブロックをロードするのに十分です。当時、このようなコンピューターには4Kから16Kワード(または8Kから32Kバイト)があったため、このようなローダーは現代の標準では非常に小さかった。読み取りループは、16ビットワードが3つまたは5つしかない場合があります。

フロントパネル図


3

マザーボードにインストールでき、ブートローダーを含むROMまたはEEPROMチップを作成する方法が必要です。実際には一連のブートステップがあり、さまざまなチップ(CPU、ビデオカードなど)による内部チェックから始まり、バスのアクティブ化と検出が続きます(PCI-eバスコントローラーは、それに接続されているすべてのものを見つけ、IDを割り当てるなど)。次に、マザーボードはブートROMを探してそのコードを実行します。次に、そのコードがBIOSブート順序を見つけ、それを調べて一致するデバイスを探し、そこからブートプログラムをロードします。これは順番にOSをロードします。

元のブートチェーンは、ROMを形成するスイッチをフリックし、その後、スイッチを使用してRAMをプログラムするなど、最新のマルチステージブートローダーまで続きました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.