web-dev-qa-db-ja.com

マルチスレッド、マルチプロセッシング、マルチタスクは、命令セットまたはOSで実装されていますか?

単一のCPUコアを備えたコンピューターでは、

  • マルチスレッド プログラムをOSに基づいて実装する必要がありますか?命令セットに実装して、OSなしで実行できますか?

  • OSなしで複数のプログラムを multitasking で実行できますか? OSなしでプログラム間のマルチタスクを実装できますか(例:命令セットのみで実装)?

複数のCPU /コアを備えたコンピュータでは、

  • oSに基づいてマルチスレッドプログラムを実装する必要がありますか?命令セットに実装して、OSなしで並列スレッドで実行できますか?

  • OSなしで multiproccessing 並列に複数のプロセスを実行できますか?このマルチプロセス並列処理は、OSなしで(たとえば、命令セット内で)実装できますか?

私の質問の動機は:

  • マルチスレッド、マルチプロセッシング、マルチタスクはそれぞれ、コンピューターアーキテクチャーまたはオペレーティングシステムに固有のものですか? (注:OSは、コンピューターアーキテクチャに基づいて実装され、実行されます。コンピューターアーキテクチャに固有の概念は、OSから独立している場合があります)

  • パイプライン、スーパースカラー、ベクトルコンピューティングなどの一部の並列処理は、コンピューターアーキテクチャに固有であり、OSに依存しません。スレッドおよびプロセスレベルの並列処理は、コンピューターアーキテクチャまたはOSに固有のものですか?マルチタスク(一種の並行コンピューティングとして)は、コンピューターアーキテクチャまたはOSに固有ですか?

ありがとう。

5
Tim

シングルCPUコアを搭載したコンピューターでは、OSに基づいてマルチスレッドプログラムを実装する必要がありますか?

いいえ。プログラムは独自のスレッドとスケジューラを実装できます。ただし、この時点では、プログラムはオペレーティングシステムの役割を担っています。つまり、適切なオペレーティングシステムカーネルがない場合、プログラムは、ドライバーに通常あるすべてのハードウェア通信コードを実装する必要があります。

命令セットに実装して、OSなしで実行できますか?

はいといいえ。最近の多くのCPUの命令セットには、ハードウェアレベルのスレッドに必要な機能が含まれており、この機能はスレッドスケジューラの形式で実装する必要があります。これは確かにプログラムの一部である可能性がありますが、オペレーティングシステムがない場合、プログラムはハードウェアと通信する機能を実装する必要があります。

OSなしで複数のプログラムをマルチタスクで実行できますか? OSなしでプログラム間のマルチタスクを実装できますか(例:命令セットのみで実装)?

これは、オペレーティングシステムの役割に関する混乱を示唆しています。

個別の切断された独立したプログラムをマルチスレッド環境で実行するには、これらのスレッドのスケジューリング、実行、終了を管理するためにプロセスモニターが必要です。非常に高いレベルでは、オペレーティングシステムカーネルは、本質的にプロセスモニターです。

複数のCPU /コアを備えたコンピューターで、OSに基づいてマルチスレッドプログラムを実装する必要がありますか?命令セットに実装して、OSなしで並列スレッドで実行できますか?

複数のコアでのコード実行をスケジュールし、それらのコアの初期化を管理するコードが必要です。これは通常、プロセスモニターの役割です。単一の自己完結型プログラムは、原則としてこれらの機能を実装できますが、上記のように、そのためにはカーネルのすべての役割を担う必要があります。

OSなしで複数のプロセスをマルチプロセス並列で実行できますか?このマルチプロセス並列処理は、OSなしで(たとえば、命令セット内で)実装できますか?

これもプログラムモニターの役割です。典型的な最新の汎用CPUアーキテクチャでは、プライマリコア以外のコアでプロセスをスケジュールするために、このようなモニターが存在する必要があります。原則として、CPUコアcouldはこれらの問題に対処するように設計されており、一部のGPUと他の特定の小さなコア(GreenArraysが頭に浮かびます)は、実際にはこのように、または非常に少なくとも、補助的な汎用CPUに依存してプロセスモニターを実行します。

マルチスレッド、マルチプロセッシング、マルチタスクはそれぞれ、コンピューターアーキテクチャーまたはオペレーティングシステムに固有のものですか?

番号。

スレッドおよびプロセスレベルの並列処理は、コンピューターアーキテクチャまたはOSに固有のものですか?マルチタスク(一種の並行コンピューティングとして)は、コンピューターアーキテクチャまたはOSに固有ですか?

いいえ、ありません。

繰り返しますが、オペレーティングシステムの役割に関する誤解を発見しました。

どちらかコンピュータハードウェアまたはオペレーティングシステムに実装されている並列処理の側面がありますが、どちらも本質的ではありません。歴史的に、これは完全にプロセスモニターの領域であり、特に初期のタイムシェアリングシステムではそうでした。その役割は、協調型マルチタスクシステムのシステムライブラリのドメインに置かれました。このシステムでは、一部のシステムコールは、実行をオペレーティングシステムに一時的に渡して、タスクスケジューリングなどを処理します。最新のマルチプロセッシングオペレーティングシステムは、ハードウェア管理専用のプロセスを管理するプロセスモニターに過ぎません。

5
greyfade

ソフトウェアがOSなしで何かを実行できるかどうかという概念は、あまり意味がありません。

OSはソフトウェアであり、実際にOSをコンピュータ上で実行されている他のソフトウェアと区別する唯一のことは、(少なくとも最新のマルチタスクシステムでは)OSが特定の種類の操作を自分自身に予約し、他のソフトウェアがそれらを実行できないようにすることです。 OSがなければ、複数のスレッドやプロセッサを使用して実行するなど、OSが通常行うことを実行している他のソフトウェアを停止することはできません。これは通常、OSが存在する場合に防止されるレベルでハードウェアとのやり取りを伴いますが、1つがなければ、そのような制限は適用されません。

このような機能を実装することで、ソフトウェア(または少なくともそのモジュール)自体がOSになることは間違いありませんが、これはセマンティクスの問題であり、実際には生産的ではありません。

質問の下のレイヤーに到達しようとすると、実際に質問しようとしていることは、「オペレーティングシステムの下のレベルで完全なマルチタスク機能をプロセッサアーキテクチャが提供できるか」に近いものだと思います。これに対する答えは難しいです。現在の設計よりもプロセッサがこの方向に進むことは可能ですが、結局、新しいスレッドがスケジューリングを必要とするため、オペレーティングシステムの協力が必要であり、それはOSの責任です。

2
Jules