1.4.2. 多重(マルチ)プログラミング(マルチタスク)とスケジューリング

1. 概要

 多重(マルチ)プログラミングとは、1つのCPUで複数のプログラム(タスク)を並行して実行する技術です。この技術により、CPUの利用効率が向上し、システム全体のスループットが改善されます。スケジューリングは、これらの複数のタスクをどのような順序で実行するかを決定する重要な役割を担っています。

 この概念は、現代のオペレーティングシステム(OS)において不可欠であり、効率的なシステム運用を実現する基盤となっています。応用情報処理技術者として、これらの仕組みを理解することは、システム設計や性能最適化において極めて重要です。

2. 詳細説明

2.1. 多重(マルチ)プログラミングの基本概念

 多重プログラミングでは、複数のタスクがメモリ上に同時に存在し、CPUが各タスクを切り替えながら実行します。これにより、1つのタスクが入出力待ちなどでCPUを使用していない間に、他のタスクを実行することができます。

2.2. スケジューリングの方式

2.2.1. プリエンプティブ方式

 プリエンプティブ方式では、OSが強制的にタスクを切り替えることができます。この方式では、以下のような具体的なスケジューリング方法が採用されています:

  • タイムスライス方式:各タスクに一定の実行時間(タイムクウォンタム)を割り当て、それが経過すると次のタスクに切り替わります。
  • ラウンドロビン:タイムスライス方式の一種で、タスクを順番に実行します。

2.2.2. ノンプリエンプティブ方式

 ノンプリエンプティブ方式では、実行中のタスクが自発的にCPUを解放するまで、他のタスクは実行されません。具体的な方式として以下があります:

  • FCFS(First Come First Served):到着順にタスクを実行します。
  • SJF(Short Job First):実行時間が最も短いタスクから順に実行します。

2.3. スケジューリングにおける重要な概念

2.3.1. 優先順位

  • 静的優先順位方式:タスクの優先順位が固定されています。
  • 動的優先順位方式:タスクの状況に応じて優先順位が変動します。

2.3.2. イベントドリブン方式

 特定のイベント(例:入出力終了割込み)の発生に応じてタスクを実行する方式です。

2.3.3. フィードバック待ち行列方式

 タスクの実行履歴に基づいて優先順位を動的に変更する方式です。

2.4. 同期制御と排他制御

 複数のタスクが共有リソースにアクセスする際に、データの整合性を保つために必要な制御です。セマフォやミューテックスなどの仕組みを使用して実現されます。

2.5. マルチスレッドと並列処理

 マルチスレッドは1つのプロセス内で複数の実行単位(スレッド)を持つ仕組みです。マルチCPU環境では、真の並列処理が可能となり、システムのパフォーマンスが向上します。

3. 応用例

3.1. デスクトップOS

 Windows、macOS、Linuxなどのデスクトップ環境では、多重プログラミングとスケジューリングにより、複数のアプリケーションを同時に実行できます。

3.2. モバイルデバイス

 スマートフォンやタブレットのOSでは、バッテリー消費を最小限に抑えつつ、複数のアプリを効率的に実行するためにスケジューリングが重要な役割を果たしています。

3.3. サーバー環境

 Webサーバーやデータベースサーバーでは、大量の同時接続を処理するために高度なスケジューリングアルゴリズムが使用されています。

4. 例題

例題1

問題:以下のタスクがある場合、SJF(Short Job First)方式でのスケジューリング順序を示してください。

  • タスクA:実行時間 8分
  • タスクB:実行時間 4分
  • タスクC:実行時間 2分
  • タスクD:実行時間 6分

回答:

  1. タスクC(2分)
  2. タスクB(4分)
  3. タスクD(6分)
  4. タスクA(8分)

例題2

問題:プリエンプティブ方式とノンプリエンプティブ方式の違いを説明し、それぞれの利点を1つずつ挙げてください。

回答:
プリエンプティブ方式:OSが強制的にタスクを切り替えることができる方式。
利点:重要なタスクに迅速に対応できる。

ノンプリエンプティブ方式:実行中のタスクが自発的にCPUを解放するまで、他のタスクは実行されない方式。
利点:タスクの切り替えが少ないため、オーバーヘッドが小さい。

例題3

問題:リソーススタベーションとは何か、簡潔に説明してください。また、これを防ぐためのスケジューリング方式を1つ挙げてください。

回答:
リソーススタベーションとは、優先順位の低いタスクが長時間CPUを割り当てられず、実行されない状態のことです。

これを防ぐためのスケジューリング方式の例:
フィードバック待ち行列方式 – タスクの実行履歴に基づいて優先順位を動的に変更することで、低優先度のタスクも定期的に実行される機会を得られます。

5. まとめ

 多重(マルチ)プログラミングとスケジューリングは、現代のオペレーティングシステムにおいて中核を成す重要な概念です。プリエンプティブ方式やノンプリエンプティブ方式などの様々なスケジューリング方式、優先順位の管理、同期制御と排他制御の仕組みを理解することが、効率的なシステム設計と運用には不可欠です。

 また、イベントドリブン方式やフィードバック待ち行列方式などの高度なスケジューリング技術、さらにはマルチスレッドや並列処理の概念を把握することで、より複雑なシステムの挙動を理解し、最適化することが可能になります。