旧バージョンのWindowsでマルチタスクはどのように可能でしたか?
DOSがシングルタスクOSであり、初期のバージョンのWindowsとの関係を考えると、以前のバージョンのWindowsがマルチタスクを実行するためにどのように成功したのでしょうか。今日のSuperUser Q&Aの投稿では、この質問に対する答えを調べています。.
本日の質疑応答セッションは、コミュニティ主導のQ&A Webサイトのグループである、Stack Exchangeの下位区分であるSuperUserの好意により提供されます。.
Windows 95のスクリーンショット、Wikipedia提供.
質問
SuperUserの読者LeNoobは、古いバージョンのWindowsがどのようにマルチタスクシステムとして動作することができたか知りたいですか?
私はDOSがシングルタスクOSであることを読みました。しかし、古いバージョンのWindows(やはりWindows 95も含む)が単にDOSのラッパーだったとしたら、どうすればマルチタスクOSとして実行できるのでしょうか。?
良い質問!古いバージョンのWindowsはどのようにしてマルチタスクシステムとして動作しましたか?
答え
SuperUserの貢献者であるBobとPeteが私たちのために答えを持っています。最初に、ボブ:
Windows 95は、MS-DOSの「単なるラッパー」以上のものでした。 Raymond Chenを引用します。
- Windows 95では、MS-DOSは2つの目的を果たしました。1.)ブートローダとして機能しました。 &2.)16ビットレガシデバイスドライバレイヤとして機能しました.
Windows 95は実際にはほとんどすべてのMS-DOSをフック/オーバーライドしていましたが、それを互換性レイヤとして保持しながら、すべての重い作業を行いました。 32ビットプログラム用のプリエンプティブマルチタスクも実装しました。.
Windows 95より前
Windows 3.xおよびそれ以前のものはほとんど16ビット(Win32sを除いて、16と32を橋渡しする一種の互換性層ですが、ここではそれを無視します)は、DOSに依存し、協調的マルチタスクのみを使用しました。それは彼らが実行中のプログラムを強制的にスイッチアウトさせないものです。実行中のプログラムが制御権を譲るのを待つ(基本的には、次の待機中のプログラムを実行するようにOSに指示することで「完了しました」と言う)。.
- マルチタスクは、旧バージョンのMacOSとまったく同じように協調的でした(ただし、プリエンプティブマルチタスクを採用していたマルチタスクDOS 4.xとは異なります)。タスクは異なるタスクをスケジュールするためにOSに譲る必要がありました。収量は特定のAPI呼び出し、特にメッセージ処理に組み込まれました。タスクがタイムリーにメッセージを処理する限り、すべてが素晴らしかったです。タスクがメッセージの処理を停止し、処理ループの実行でビジーだった場合、マルチタスクはこれ以上ありませんでした。.
Windows 3.xのアーキテクチャ
初期のWindowsプログラムがどれだけ早く制御を譲るかについては、
- Windows 3.1は協調マルチタスキングを使用します。つまり、実行中の各アプリケーションは、メッセージキューを定期的にチェックして他のアプリケーションがCPUの使用を要求しているかどうかを調べ、制御します。そのアプリケーション。ただし、多くのWindows 3.1アプリケーションは、メッセージキューをチェックすることはほとんどないか、まったくチェックせず、必要な時間だけCPUの制御を独占します。 Windows 95のような先制型のマルチタスクシステムは、実行中のアプリケーションからCPUの制御を奪い、システムのニーズに基づいて優先度の高いものに分配します。.
ソース
すべてのDOSは、この単一のアプリケーション(Windowsまたは他のアプリケーション)が実行されていることを確認し、終了せずに制御を渡します。理論的には、プリエンプティブマルチタスクは、スケジューラを強制的に制御するために、リアルタイムクロックとハードウェア割り込みを使用して、とにかくDOS上で実装することができます。 Tonnyがコメントしているように、これは実際にはDOS上で動作するいくつかのOSによって行われていました。.
386拡張モード?
注:386拡張モードのWindows 3.xが32ビットであり、プリエンプティブマルチタスクをサポートしているというコメントがいくつかあります。.
これは興味深いケースです。リンクされたブログ記事を要約すると、386拡張モードは基本的に32ビットのハイパーバイザーで、仮想マシンを実行していました。それらの仮想マシンのうちの1つはWindows 3.x標準モードを実行しました。.
MS-DOSもそれらの仮想マシンの中で走り、そして明らかにそれらは先制的にマルチタスクであった - それで386拡張モードハイパーバイザーは仮想マシン間でCPUタイムスライスを共有するようですMS-DOSを実行した他の人、そして各VMはそれ自身のことをするでしょう - MS-DOSがシングルタスクである間、3.xは協調的にマルチタスクをするでしょう.
MS-DOS
DOS自体は紙の上でシングルタスクでしたが、ハードウェア割り込みによって引き起こされるまでバックグラウンドで残るTSRプログラムをサポートしていました。真のマルチタスクには程遠いが、シングルタスクではない.
この話のすべてはちょっと煩わしいですか?マルチタスクについて質問しました!
厳密に言うと、ビットネスとマルチタスクは互いに依存しません。任意のマルチタスクモードを任意のビット数で実装することが可能であるべきです。ただし、16ビットプロセッサから32ビットプロセッサへの移行により、プリエンプティブマルチタスクの実装が容易になった可能性のある他のハードウェア機能も導入されました。.
また、32ビットプログラムは新しいため、強制的にスイッチアウトされたときに動作させるのが簡単でした。これは、従来の16ビットプログラムを壊した可能性があります。.
もちろん、これはすべて憶測です。 MSがWindows 3.xでプリエンプティブマルチタスクを実装しなかった理由(386拡張モードにもかかわらず)を本当に知りたいのなら、そこで働いている人に聞いてみる必要があります。.
また、Windows 95はDOSのラッパーにすぎないというあなたの仮定を修正したいと思いました。.
ピートからの回答が続きます:
最新のオペレーティングシステムでは、オペレーティングシステムがすべてのハードウェアリソースを制御し、実行中のアプリケーションはサンドボックスに保存されます。アプリケーションは、OSがそのアプリケーションに割り当てていないメモリにアクセスすることを許可されておらず、コンピュータ内のハードウェアデバイスに直接アクセスすることはできません。ハードウェアアクセスが必要な場合、アプリケーションはデバイスドライバを介して通信する必要があります。.
OSはこの制御を強制することができます、なぜならそれはCPUを保護モードに入らせるからです.
一方、DOSはプロテクトモードには入りませんが、リアルモードのままです(*下記参照)。リアルモードでは、実行中のアプリケーションは必要なことをすべて実行できます。つまり、ハードウェアに直接アクセスできます。しかし、リアルモードで動作しているアプリケーションは、プロテクトモードに入るようにCPUに伝えることもできます。.
そしてこの最後の部分は、Windows 95のようなアプリケーションが基本的にDOSから起動されたとしてもマルチスレッド環境を起動することを可能にします。.
DOS(ディスクオペレーティングシステム)は、私の知る限りではファイル管理システムにすぎません。ファイルシステム、ファイルシステムをナビゲートするためのメカニズム、いくつかのツール、およびアプリケーションを起動する可能性を提供しました。また、マウスドライバやEMMエミュレータなど、一部のアプリケーションを常駐させることもできました。しかし、それは現代のOSがするようにコンピュータのハードウェアを制御しようとしませんでした.
*DOSが1970年代に最初に作成されたとき、保護モードはCPUに存在しませんでした。プロテクトモードがCPUの一部になったのは、1980年代半ばの80286プロセッサまでではありませんでした。.
必ず元のスレッドを参照して、以下のリンクを使用してこのトピックに関する活発な議論を読んでください。!
説明に追加するものがありますか?コメントで音を消す。他の技術に精通したStack Exchangeユーザーからの回答をもっと読みたいですか?こちらのディスカッションスレッドをチェックしてください。.