マルチプログラミングとマルチタスクの違いは何ですか


10

マルチプログラミングとマルチタスクを明確に区別するのは難しいと感じています。

私の主な情報源はWikipediaでしたが、WPの記事は、評判の低い情報源(大学の教授など)とは少し矛盾しているようです。

私がWPを読んだとき、マルチプログラミングは、プロセスがI / Oを待機しているときにコンテキストを切り替えることにより、CPUスループットを向上させる基本的な方法です。

マルチプログラミングでは、プログラムがタイムリーに実行されるという保証はありません。実際、最初のプログラムは、周辺機器へのアクセスを必要とせずに何時間も実行することができます。

協調時分割と同義で、協調マルチタスクは、(それは同義ではないしている)マルチプログラミング上の改良です。CPUは定期的にコンテキストを切り替えて同時実行の印象を与えますが、プロセスは引き続き生成される必要があり、設計が不十分なプログラムはシステムの残りの部分を使い果たす可能性があります。

プリエンプティブマルチタスクは、スケジューリングをより積極的に制御し、一部のプロセスを他のプロセスよりも優先させます。

  1. この概要は正しいですか?そうでない場合は、WPが正しくないためか、WPを誤って読み取ったためですか?
  2. 一部のソースがマルチプログラミングとマルチタスクを混同しているように見えるのはなぜですか?

1
「評判の悪い情報源(私の大学教授のように)」-ああ、親愛なる。私は彼がウィキペディアよりも評判が良く、CSに中途半端なコンテンツがたくさんあることを願っています。
ラファエル

「マルチプログラミング」はより歴史的なアプローチのようです。最新のマルチタスク処理は確かにIOブロッキングに関連していますが、これはプロセスを操作するために使用される要因の1つにすぎません。さらに、ほとんどすべての最新のマルチタスク処理は、CPUからのサポートによりプリエンプティブです(CPUからのサポートが常にあったわけではなく、適切に動作するプロセスは、連携をサポートするOSベースの待機メソッドを呼び出すはずでした)。
vzn 2013年

2
@ラファエル、あなたはそれらを完璧に焼くことによって全世界に有利に働くことができます。
フォンブランド2013年

1
@vonbrand試してみましたが、残念ながら、そのような試みに対抗するのに十分な中途半端な専門家がいます。
ラファエル

@ラファエル、そしてその群衆はここにも表示されませんか?
フォンブランド2013年

回答:


9

彼らは多かれ少なかれ同義です。マルチプログラミングは、1つのCPUが関与している場合、つまりプロセスから別のCPUに切り替えられている場合に使用されます。スレッドがやって来て、それはもはやプログラムを切り替えていません...

プロセッサ、特にIntelラインには、少なくとも80286以降、真のマルチタスク(タイマー割り込み、特権命令)のメカニズムがありました。非常に最初のMacで使用されていたM68000は、本格的なマルチテイキング機能を備えたプロセッサでした。これは、最近のアーキテクチャの開発ではありません。初めて共有されたシステムはユーザーのプログラムを入れ替えたため、複数のプログラムが同時にメモリに存在するという意味では、実際にはマルチプログラミングではありませんでした。

アイデアは、複数のプログラムを同時にメモリに常駐させることです。これにより、(終了または待機によって)CPUを解放すると、他のCPUを使用する準備ができ、CPU使用率が増加します(各CPUバーストをI / Oの使用の準備、全体的な使用量の増加)。これにより、スループットが向上します(バッチシステムでは重要です)。

時が経つにつれ、数人のインタラクティブユーザーがマシンに接続しました。同じ考え、彼らのプログラムを維持しつつ、彼らを「自分自身にコンピューターを持っている」という幻想を持っているので、十分に速くそれらの間で切り替えます。独占を回避するために、CPUに割り込むタイマーが必要です。

個人のマシンでは、少なくとも最初は、一度に複数のプログラムを実行するインセンティブはあまりありませんでした(非常に制限されたマシンの前にいる1人のユーザーはあまり期待していませんでした)。マシンが成長するにつれて、これを回避し、オペレーティングシステムをあまり変更せずに一度に複数のプログラムを許可する方法すべてのプログラムは、実行する別のプログラムを選択するために、オペレーティングシステムに定期的に譲歩することになっているという点で、「協調マルチタスク」でした。これを行うプログラムは完全に制御されているので、他のユーザーが何も台無しにしないように選択できます。言うまでもなく、譲歩する義務を完全に果たすことを「忘れる」プログラムは、パフォーマンスの興味深いブーストを取得します...初期のMacシステムはこのように機能し、上記の理由により、これは長続きしませんでした。初歩的なオペレーティングシステムがない、または基本的なオペレーティングシステムしかなく、厳しく制御された一連のプログラムが実行されている組み込みシステムでは、これは確かに魅力的なオプションです。


WPの記事は、マルチプログラミング(システム)とは対照的に、マルチプログラミングには仮想メモリが不足していることを示唆しているようです。歴史的には真実かもしれませんが、定義は直交していますか?
ディディエルク2013年

1
私たちはここ70年代にマルチプログラムされたIBM S / 370を持っていました、そしてそれは確かに仮想メモリを持っていませんでした(私はそれがスプーリングのためだけに使用されたディスクを持っていたことを覚えているようです)。仮想メモリを使用すると、限られたRAMにさらに多くのプログラムを置くことができ(「最も使用されている」部分のみを手元に保持しているため)、そのように使用するとさらに効果的です。だからはい、私はそれらを完全に独立していると考えます。しかし、実際には、今日、もう1つがなければ見つけることはできません。おそらくあなたのWiFiルーターや携帯電話を除いて...
フォンブランド2013年

OK。実際、私もそう思いました。実際、組み込みシステムには適切なメモリ保護が欠けていることがよくあります。それでも、適切に動作するプログラムであれば、問題にはなりません。もちろん、それはプログラムベンダーによって異なります。
ディディエルク2013年

@didierc直交?あなたは相互に排他的な権利を意味しますか?
jsj 2013年

2

マルチタスクとマルチプログラミングの違いは?マルチタスクは、マルチプログラミングの論理的な拡張です。マルチプログラミング環境での古典的な方法では、複数のユーザーがCPUを共有し、CPUは1人のユーザーから別のユーザーにすばやく切り替えて、お互いに完全な透過性を提供します。マルチタスクでは、ユーザーはプログラムに置き換えられます。つまり、複数のプログラムがCPUを共有し、CPUは1つのプログラムから別のプログラムにすばやく切り替えます。実際、ディスクに常駐するソフトウェアはプログラムです。実行のためにRAMに読み込まれたときはプロセスまたはタスクと呼ばれ、CPU内にあり実行されているときはスレッドと呼ばれます。したがって、マルチプログラミングは基本的にマルチユーザー向けであり、マルチタスクは複数のプログラムを使用するシングルユーザー向けです。最近のほとんどのOSは両方をサポートしているため、多くの場合、スペルは交換可能です。


0

マルチタスクとマルチプログラミングの間には多くの違いがあります。

マルチタスクは、一度に複数のタスクを実行しています。たとえば、歌を聞いている、紙を印刷している、同時にMS-Wordを入力しているとします。

マルチプログラミング中、このタイプのOSでは、バッファリングとスプーリングを使用してCPU使用率を向上させます。逐次実行では、CPUはプログラムの実行後にアイドル状態になり、メインメモリから次のプログラムをロードします。I / O操作中、CPUもアイドル状態になり、CPUもアイドル状態になりますが、マルチプログラミング環境を使用して、CPUは次のプログラムに切り替えて処理します。これは、バッファリングとスプーリングの助けを借りて使用される手法です。

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