オペレーティング システムは、ソフトウェアがハードウェアを管理できるようにするものです。明らかに、一部の OS は他の OS よりも洗練されています。
つまり、コンピューターの起動時に、プログラム カウンターを事前に定義されたアドレスに設定し、マシン コードの実行を開始します。
ほとんどのコンピュータでは、この「ブートストラップ」プロセスにより、既知の周辺機器 (ディスク ドライブなど) が即座に初期化されます。初期化されると、ブートストラップ プロセスは事前定義されたシーケンスを使用して、これらの周辺機器を活用します。ディスク ドライバを再び使用すると、プロセスはハード ドライブの最初のセクタからコードを読み取り、それを RAM 内の既知の領域に配置してから、そのアドレスにジャンプします。
これらの事前定義されたシーケンス (CPU の開始、ディスクのロード) により、プログラマーは CPU 起動の初期段階でコードをどんどん追加することができ、時間が経つにつれて、最終的には非常に洗練されたプログラムを起動することができます。
現代の世界では、洗練された周辺機器、高度な CPU アーキテクチャ、および非常に膨大なリソース (GB または RAM、TB のディスク、および非常に高速な CPU) を使用して、オペレーティング システムは開発者向けの非常に強力な抽象化 (複数のプロセス、仮想メモリ) をサポートできます。 、ロード可能なドライバーなど)。
ただし、リソースが制限された単純なシステムの場合、「OS」にそれほど多くは必要ありません。
簡単な例として、多くの小型コントローラ コンピュータは非常に小さな「OS」を備えており、シリアル ポート (または端末、または LCD ディスプレイ) への簡単なアクセスを提供するだけの「モニタ」と見なされるものもあります。確かに、このような状況では大規模な OS の必要性はあまりありません。
しかし、古典的な Forth システムのようなものも考えてみてください。ここでは、ディスク I/O、コンソール I/O、メモリ管理、および実際のプログラミング言語とアセンブラを提供する「OS」を備えたシステムがあり、これは 8K 未満のメモリに収まります。 8ビットマシン。
または、BIOS と BDOS を備えた CP/M の昔の時代。
CP/M は、単純な OS が抽象化レイヤーとしてうまく機能し、移植可能なプログラムを膨大な数のハードウェア上で実行できるようにする良い例ですが、それでもシステムの起動と実行に 8K 未満の RAM しか必要としませんでした。
最新の OS で使用されるメモリの MB とはかけ離れています。しかし、公平を期すために言えば、私たちは数 MB のメモリを持っており、そのおかげで私たちの生活は (ほとんどの場合) はるかにシンプルになり、はるかに機能的になっています。
OS を書くのは楽しいです。HARDWARE に "Hello World" と出力させて、不明瞭な I/O ポートから一度に 1 バイトずつデータを押し込んだり、魔法のメモリ アドレスにデータを詰め込んだりするのは興味深いからです。
x86 エミュレーターを手に入れて、ブート セクターに自分の名前を言ってもらいましょう。それは笑いの御馳走です。