オペレーティングシステムの前に、それらを機能させるためにどのような概念が使用されましたか?[閉まっている]


50

オペレーティングシステムはコンピューターアーキテクチャと密接に関連しており、OSはコンピューターシステムのすべての入出力を処理します。ユーザー、プロセス、メモリ管理、印刷、通信、ネットワークなどを管理します。コンピューターに接続されたディスク、プリンター、スクリーン、その他の周辺機器にデータを送信します。

オペレーティングシステムの導入前に、

それらを機能させるためにコンピューターシステムで使用されたものは何ですか?

コンピューターの進化において、オペレーティングシステムにどの概念が使用されましたか?


5
「この前は、コンピューターシステムで使用されていたもの...」 -今日のOSを実行していない場合と同じでした。コンピューターシステム全体を1人のユーザーに1つずつ引き渡すことにより、バッチジョブを実行します。
おがくず14


4
マイクロコントローラで実行されるコードを考えてください。オペレーティングシステムでは実行されませんが、マシンコードにコンパイルされるCコードであり、実際の物理デバイスで実行されます(このマシンコードがファームウェアに「フラッシュ」された後)。オペレーティングシステムは、リソース共有プロセススケジューリングの概念を使用することにより、コンピュータのすべての部分と複数のプログラム同時に対話することを容易にします。同様に、必要に応じて、その小さなマイクロコントローラーでオペレーティングシステムを使用することもできます。
ブレークスルー14

答えの多くは、I / O、プログラムのロード方法、および周辺機器に焦点を当てています。しかし、これはOSの目的、つまりリソー​​ス管理と共有、そして場合によってはマルチユーザー機能をあいまいにします。OSの目的は、ワイヤーボードやパンチテープやドラムからコードをロードしたり、最新のSDカードを使用したりしても変わりません。
おがくず14

カードデッキ。パンチ紙テープ。コンピューターを介して同じフィードするオペレーター。
ダニエルRヒックス14

回答:


42

初期のコンピューターは一度に1つのプログラムを実行していました。

プログラムは、(たとえば)穴が開けられた紙テープから直接ロードされました。

多数のオンオフスイッチを設定することにより、最も初期のコンピューターをプログラミングします

巨像:

アトラス:

マンチェスター:


私は「コンピューター」という言葉を使用して、現在数十億に存在する種類のデバイスを意味しています。この膨大な数のコンピューターのうち、ごくわずかを除くすべてが、プログラムが保存されたデジタル電子プログラマブルコンピューターです。もともとの質問は、「コンピューター」という肩書きを持つ人々がどのように仕事をしたかに関するものではないと確信しています。これらの2種類のコンピューターの間に、この回答ではカバーされていない興味深いデバイスの進歩があります。


1
2番目の図のこれらのスイッチを使用するハードウェアがあります。また、まったく同じ方法でプログラムを実行します。このような素晴らしい写真を使用するための賛成票
ラムハウンド14

ENIACのように配線が早い人はいないでしょうか?切り替えも保存プログラムもありませんか?それとも、これはそのためのコンピュータなくなった...好奇心
リッチHomolka

1
@RichHomolka:あなたが暗示するように、それは本当にあなたがコンピューターとみなすものに依存します。今日のほとんどの人は、おそらくデジタル電子プログラマブルコンピュータを意味します。もちろん、たとえば機械式のアナログコンピューターがあり、最も初期のコンピューターは人でした(役職でした)。時間に余裕があれば、これに対処するために答えを拡大するかもしれません。ENIACは、スイッチとケーブルを操作してプログラムされたと思います。
RedGrittyBrick 14

オペレーティングシステムはかなり早い時期に登場しました(1956-en.wikipedia.org/wiki/GM-NAA_I/Oを参照)。最初の大量生産コンピューターは1954年頃でした
ブルースマーティン14

「元の質問は、「コンピュータ」という肩書きを持つ人がどのように仕事をしたかに関するものではないと確信しています」-私の祖母はコンピュータでした。
ポールD.ウェイト14

13

出典:オペレーティングシステムの歴史

オペレーティングシステムは、数十年にほぼ対応するいくつかの明確なフェーズまたは世代を経て進化してきました。

1940年代-第一世代

初期の電子デジタルコンピューターにはオペレーティングシステムがありませんでした。当時の機械は非常に原始的であったため、プログラムは機械スイッチ(プラグボード)の列に一度に1ビットずつ入力されることがよくありました。プログラミング言語は不明でした(アセンブリ言語でさえも)。オペレーティングシステムは前代未聞でした。

1950年代-第二世代

1950年代初期までに、パンチカードの導入により、ルーチンは多少改善されました。ゼネラルモーターズ研究所は、彼らのIBM 701のために1950年代初頭に最初のオペレーティングシステムを実装しました。50年代のシステムは通常、一度に1つのジョブを実行していました。これらは、プログラムとデータがグループまたはバッチで送信されたため、シングルストリームバッチ処理システムと呼ばれていました。

ソース:http : //en.wikipedia.org/wiki/History_of_operating_systems

最古のコンピューターは、オペレーティングシステムをまったく持たないメインフレームでした。

各ユーザーは、スケジュールされた期間、マシンを単独で使用し、プログラムとデータ(多くの場合、パンチ紙カードと磁気テープまたは紙テープ)を使用してコンピューターに到着します。プログラムがマシンにロードされ、プログラムが完了するかクラッシュするまでマシンが動作するように設定されます。

通常、プログラムは、トグルスイッチとパネルライトを使用して、コントロールパネルを介してデバッグできます。アランチューリングは初期のマンチェスターマーク1マシンでこれのマスターであり、ユニバーサルチューリングマシンの原理からオペレーティングシステムの基本概念をすでに導出していたと言われています。


10

コンピューターシステムの最初に戻ると、単一のコンピューターシステムではなく、メインフレームがありました。

ここに画像の説明を入力してください

これらのメインフレームは、プログラム(および多くの場合データ)を含むパンチカードで実行されます。人々はこれらのシステムに時間を割り当てられ、カードを持ってきて処理するためにマシンにプラグインします。マシンは終了するまでプログラムを実行し、次のユーザーがテープとカードを手に入れます。

基本的にそれがどのように機能したかです。


4
だからここの「オペレーティングシステム」は...誰がユーザーのスケジューリングをしているのでしょうか?
カイルストランド14

2
私のポイントは、「厳密に言えば、オペレーティングシステムは長い間、何らかの形で存在してきた」という意味をあなたの答えが実際に説明していないということです。あなたはメインフレームの基本的な説明を提供しますが、これらのメインフレームが私たちが「オペレーティングシステム」と呼ぶものにリモートで類似した何かを持っていることは全く明確ではありません。
カイルストランド14

3
私はあなたが何を言おうとしているのか知っていますが、この説明にはひどく快適ではありません。上記のメインフレームの正確な説明を満たすメインフレームで作業するのに十分な年齢であるが、実際には操作システムが含まれていました。写真のメインフレームは、OS / 360または初期バージョンのMVSを実行している1970年代のIBMメインフレーム(as / 360またはs / 370?)です。
ロブモワー14

2
「パンチされた磁気カード」などはありません。「メインフレーム」のあなたの写真は、ハリウッドと素人のコンピューターのビジョン、つまり磁気テープのトランスポートの行を保持しています。
おがくず14

1
ここにかなりの誤記があります。@sawdustが言ったように、パンチされたカードは磁気的ではありませんでした。また、パンチカードには多くの場合、プログラムデータが含まれていました。または、プログラムが紙(パンチされた)テープ上にある可能性があります。Magテープスプールはずっと後でした。それ以前は、RedGrittyBrickの回答に示されているように、パネルスイッチを介して、またはプラグボードを介してコンピューターを再配線することにより、プログラムが読み込まれていました。父と息子と会社は興味深く有益な歴史を見つけました。
スティーブンP 14

6

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コード)。


1
誰かがOS \ 360がUNIXの前に来たと言いました。これも事実ですが、当時の他のすべてのOSと同様に、それが実行された個々のマシンモデルごとに手動でコーディングされていました。
クロー14

1
誰かが、FORTRANはクロスコンパイルもできると述べました。これは事実です。ALGOL(Cの前身)もそうでしたが、マシンに依存しないOSを構築するためにCが最初にブートストラップされました。
クロー14

1
ケンとデニスが最初にUNIXカーネルをコンパイルするまでは...近代的な意味での真のOSが誕生したことを ..」OMG。このサイトではあまり真実ではない言葉はほとんど書かれていません。このステートメントがリモートで正確であるという意味はありません。
RBarryYoung

1
MULTICS(およびBCPL)も無視します
フランシスデイビー14

UNIXとCの優先順位について上に挙げたほとんどのことは正しくありません。特に、OSの歴史においてUNIXとCが非常に重要だった理由です。これは、(およびその他のAT&T技術の多くが)ことを意味したAT&Tに対して1974同意判決に、ほぼ完全に起因した無料ソースコードを含みます。このため、すべてのソースコードを含む、最初の無料の完全に機能する最新のOSおよび低レベルコンパイラとしての「本当の」最初のものでした。競争相手がそれを与えた利点を正直に認めるまでに、10-20年の間独身の地位を占めていました。
RBarryYoung

3

当初、プログラムはコンピューターに組み込まれており、起動時に特定の場所からプログラムをすぐに実行し始めました。

次に、パンチカード、テープ、ドラム、ディスクなど、さまざまな形式のオフラインストレージが発明されました。はるかに柔軟。ただし、CPUから直接アクセスすることはできません。プログラムは、実行する前にメモリにロードする必要があります。したがって、プログラムを作成してプログラムをロードします。これはローダーまたはブートストラップとして知られています(「ブートストラップで自分を引き上げる」という表現から)。

システムがより複雑になると、単純なローダーにもっと複雑なローダーをロードさせることができます。これはマイクロコンピューターから始まりました。通常のテープローダーは低速だったため、圧縮解除プログラムをロードし、テープの残りを高速ロードしました。または、ディスクで非標準的なことを行うことでコピー保護システムを兼ねたディスクスピードローダー。

または、UEFI以前のPCブートプロセス:プロセッサはBIOSで実行を開始します。これにより、ディスクから最初のセクターがロードされ、そこにジャンプします。これにより、アクティブなパーティションが検索され、そこからブートローダーがロードされ、オペレーティングシステムがロードされます。元々はMSDOSのCOMMAND.COMでした。現在、通常はWindows用のNTLDR.EXEです。


3

初期のハードウェア(1960年以前)では、I / Oがはるかに単純であったことに注意してください。カードを読み取ったり、カードをパンチしたり、プリンターで行を印刷したりすることができます。それぞれ1つの命令で、バッファーサイズが修正され、多くの場合、バッファーアドレスも修正されました。

より高度なプロセッサ(たとえば7090)を備えた60年代前半でさえ、各プログラムに簡単にコピーできる小さなルーチン(約20命令)でカードを読み取りまたはパンチできました。

コンピューターは完全に1つのジョブ専用であるため、カードリーダーが次のカードを読み取る準備ができるのを待つ間、またはラインプリンターが次の行をフィードするのを待っている間にプロセッサーがアイドル状態であったかどうかは関係ありません。

計算時間は実際には高価だったので、それは重要でした。これが、人々がマルチプロセッシング、タイムシェアリング、非同期I / Oの追加、割り込みとデバイスドライバーとオペレーティングシステムを発明した理由です。プログラマにとってハードウェアデバイスインターフェイスはより複雑になり、低レベルのI / Oレジスタにアクセスできるようになりました。これには、デバイスドライバからのより複雑なものが必要でした。この複雑なコスト(メモリ、プログラミング時間)は、オペレーティングシステムによって多重化されたデバイスを「同時に」使用する複数のプログラムで償却されました。

それでも80年代には、マイクロプロセッサベースのコンピューターを使用して、古いシステムの1つをエミュレートしていました。マシン命令は80ビット(10オクテット)を超える統一フォーマットで、最初のハードディスクの最初のセクターを読み取り、アドレス0のメモリに格納する命令は0000000000でした。したがって、ブート手順は毎朝行われました。端末でこの命令を入力し、アドレス0に格納して実行し、ブートセクタをロードして、次の命令(アドレス10)で実行を継続しました。ファイルシステムは、ファイル「名前」を手動で割り当てられたセクターの範囲にマッピングする静的テーブルで構成されていました。I / Oは、アセンブラーでこれらのファイルに対して、セクターを直接読み取りまたは書き込みすることにより行われました。これは、「


2

幅広い個人使用向けに設計されたコンピュータの最初の世代では、ROMに「モニタ」と呼ばれていました(読み取り専用メモリ)。

起動直後に、モニターは非常に限られたコマンドラインインターフェイスを提供し、主にテープレコーダーなどのデータストレージからプログラムをロードし、実行を開始しました(手動でコードを入力するために必要なコマンドはほとんどありませんでした)。一度に実行できるプログラムは1つだけです。

オペレーティングシステムとは異なり、Monitorにはどのような種類のファイルシステムサポートもありません。人間のオペレーターは、適切なテープを見つけてレコーダーに置き、ロードに必要なプログラムの開始位置に配置する責任がありました。

BIOSとオペレーティングシステムの両方の機能を組み合わせて監視し、すでに非常に明確なソフトウェアでした。

オンにした後、短い「リセット」信号は、他のカウンタと同じプログラムカウンタをゼロにすると同時に、メモリマッパー(存在する場合)を切り替えて、アドレス0000をモニターROMにマップしていました。Monitorを後で高アドレス空間に再マッピングするためのハードウェア回路が一般的でした。コードの起動とは別に、「リセット」ボタンを使用して実行中のプログラムを終了し、別のプログラムをロードできるようにしました。

初歩的な「リセット」ボタンは、最近でも一部のデスクトップPCにあります。


これは、家庭用の「パーソナルコンピューター」の第1(または第2)世代にも当てはまります。彼らが存在する前に、中等学校の生徒はタイムシェアリングコンピューターにリモートアクセスできましたが、それは異なる働きをしましたが、それでも「より広い使用のために設計されていた」でしょう。第一世代のホームコンピューターであるAltairsとHeathkitsには、すべてコマンドラインモニターが搭載されていたのかわかりません。
RedGrittyBrick 14

0

オペレーティングシステムの最も直接的な前身は、デバイスとインターフェイスするための標準ライブラリと、プログラムをメモリに入れて実行を開始するためのブートストラップローダーシステムの組み合わせです。

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