1890-1950-システム固有の操作
ごく初期のコンピューターには、OSが現在組み込んでいるものと同等のものがありました。あなた(オペレータ)もオペレーティングシステムの一部でした。レジスタスイッチをひっくり返して(またはパンチカードを使用して)、バスワイヤを物理的に交換し(昔ながらの電話オペレーターステーションのように考えて)、メモリを(物理的なワイヤを介して)電球(その日のモニター)とプリンタ(長期保存)プログラム出力が点灯し、出力メモリバッファに配置されたときにデバイスに直接印刷されるような方法で。(これらの物理的なワイヤの配線方法のため)それらが「ちょうど動作した」ため(これらの日にはモニターのようなものもなかったので)これらのものに必要なドライバーはありませんでした。実際に、デジタル数値ディスプレイが発明されて、レジスタに既に入力した数字と出力を10進数として実際に見ることができるようになるまで、この時代にはまだ数十年がかかりそうでした。プリンタはモニターするまでこの時代全体を支配しました。正しく動作するために必要なとおりに配線されました。この部分はどれも、機械式(1890年代)から電気アナログ(1910年代)からデジタル(1930年代)への切り替えによって実際に大きな変化はありませんでした。この「プラグアンドプレイ」アーキテクチャは、この期間中に割り込みシステムに置き換えられ、90年代後半まで再び登場しませんでした。もちろん、それまでにはプラグの接続はずっと少なくなるでしょう。割り込みにより、デバイスはCPU時間を費やすことができたため、ハードウェアに直接結び付けられていますが、これが実際にx86アーキテクチャ(およびそれ以降)で見られる合理化されたプロセスになるには、数世代かかりました。初期のシステムでは、恐ろしい競合状態、ハードウェアの互換性と遅延の問題、その他の割り込みに関する奇妙な動作が頻繁に発生していました。各マシンはこの期間に根本的に異なる(実験的な)アーキテクチャを使用したためです。ほぼすべてのデバイスは、作業対象のマシン用にカスタムメイドされていました。
1950-1973-システム内での操作
この時代には、真のオペレーティングシステムについて話すときに、考えられるほとんどの機能が登場しました。デバッグ、プログラミング言語、マルチユーザー、マルチタスク、端末、ディスク型ドライブ、ネットワーク、コンポーネントの標準化などがすべてこの時代に導入されました。今回はこの多くの標準化に向けて大きな飛躍を遂げました。つまり、より標準化されたデバイスがありましたが、各OSは各マシンごとに手作りされていたため、特定のシステムを設計したエンジニアが必要と判断したものによってOS機能が厳しく制限されていました。この間、オペレーティングシステムがかなり灰色の領域にありました。これは、異なるアーキテクチャが物事を非常に異なる方法で処理するためです。実際には、ハードウェアは常にソフトウェアよりも高速であり、実際にソフトウェアで行われることは理論的にはハードウェアで行うことができます(cost \ flexibility \ size \ time \ etcです。日)。OSは特定のコンピューターまたはコンピューターのタイプ用に作成されました。他の場所では機能しません。新しいコンピューターの設計では、特定のマシンモデルで動作するように、すべての低レベルOSソフトウェアをゼロから書き直す必要がありました。この終わり近くに、新しいパラダイムをすぐに変更する新しいOSが登場しました。UNIXは、ケントンプソンとデニスリッチーによってBell Labsで書かれました。
1973-システム間の操作
単一のプログラムでこのすべてが変更されましたが、UNIXではありませんでした。それはCコンパイラでした(ベルラボがカットした後、ケントンプソンとデニスリッチーによってガレージで有名に作られました)。この時点まで、コードを書いたときは、マシンコード(マシンは直接理解しているが移植性がないコード)か、コードをバイトコードにコンパイルした言語(別のプログラムによって解釈されるコード)でした実行)。CがもたらしたOSの大きな違いは、マシンコードへのクロスコンパイルとして知られていることを実行できることでした。これは、そのマシン用にコンパイラが記述されている限り、コードを一度書くだけで多くの異なるマシンタイプでネイティブに実行するようにコンパイルできることを意味していました。マシンコードは文字通りマシンが知っている唯一のコードであるため、オペレーティングシステムはマシンコードで記述する必要があります。
KenとDennisが最初にCコンパイラを使用してUNIXカーネルをコンパイルするまで、現代的な意味での真のOSが生まれたのではないと思います。それ以前は、OSは物理オブジェクトであるか、特定のマシン用に特別に設計された事前に初期化されたメモリスペースのチャンクでした。システムに新しいデバイスを追加するには、文字通り「カーネル」コードを書き換える必要がありました。特定のマシン用に設計されたUNIX OSは、すべてを書き直さずに再コンパイルして他のマシンで実行できました(そのマシンがブートストラップ環境からCコンパイラをコンパイルできる限り、OSの残りの部分を書き込むことができます)比較的高レベルのCコード)。