Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

マルチプログラミングとマルチタスキングとタイムシェアリングの違い

これもまぎらわしい。 Computer multitasking - Wikipedia によれば……

マルチプログラミング
実行中プロセスの切り替えは、入出力割り込みが発生した時のみ行われる。バッチ処理(一つのプロセスがずーっと CPU を占有していても OK な環境)向け。
マルチタスキング
実行中プロセスの切り替えは、入出力以外でも発生する。プリエンプティブものではタイマ割り込みを利用することが多い(それ以外の実装はあるのか?)。ノンプリエンプティブなものでは各プログラムが明示的に CPU を解放する。
タイムシェアリング
マルチタスキングを実現するための「方法」を指して言うらしい。また、ノンプリエンプティブマルチタスク(または Cooperative multitasking; 共同マルチタスキング)のことを指して言うこともあるのかな?

あと、「タイムスライシング」という言葉があるけれど、これはタイマ割り込みを利用したプリエンプティブなマルチタスクシステムにおいて、実行中プロセスの切り換えが一定時間(これを「タイムスライス」と呼ぶ)ごとになっていることを指して言うみたい。「タイムスライスマルチプレクシング」とも言うみたいね *1
なお、「マルチプロセッシング」の場合は一つのプロセスを(スレッド化等の方法で?)複数の CPU 上で実行することを言うみたい。

*1:通信で言う時分割多重 (Time Division Multiplexing) と言葉も内容も似ている