【OS】マルチタスクとは
はじめに
パソコンで音楽を聴きながらウェブブラウジングをし、同時にファイルのダウンロードも行なう――こんな光景は今ではごく普通です。
しかし、コンピュータの内部では実際に何が起こっているのでしょうか?実は、ほとんどの場合、CPUコアは一度に一つの命令しか実行できません。それなのに、どうやって複数のアプリケーションが「同時に」動いているように見えるのでしょうか?これは「マルチタスク」という技術によって実現されます。
本記事では、マルチタスクについてわかりやすく解説していきます。
マルチタスクの基本概念
マルチタスクとは、オペレーティングシステム(OS)が複数のタスク(プロセスやスレッド)をあたかも同時に実行しているかのように見せる技術です。実際には、単一のCPUコアでは一度に一つのタスクしか実行できませんが、OSが非常に短い時間間隔で実行するタスクを切り替えることで、人間の目にはすべてが同時に動いているように見えます。
マルチタスクの種類
協調的マルチタスク
協調的マルチタスクでは、実行中のプログラムが自発的にCPUの制御をOSに返すのを待ちます。
これは一見効率的に見えますが、一つのプログラムが制御を返さないとシステム全体が止まってしまうという重大な欠点があります。
例えば、あるアプリケーションが無限ループに陥ると、他のアプリケーションも一切動けなくなります。
先取り型マルチタスク
先取り型マルチタスクでは、OSがタイマー割り込みなどを利用して強制的に実行中のタスクを中断し、他のタスクにCPU時間を割り当てます。これにより、一つのタスクが暴走しても他のタスクは影響を受けずに動作し続けることができます。
現代のOSの安定性は、この先取り型マルチタスクによって大きく支えられていると言えます。
コンテキストスイッチ
マルチタスクの核心となるのが「コンテキストスイッチ」です。これは、あるタスクから別のタスクにCPUの実行権を移す際に、現在のタスクの状態(コンテキスト)を保存し、次に実行するタスクの状態を復元するプロセスです。
※https://www.techtarget.com/whatis/definition/context-switch より引用
コンテキストには、CPUレジスタの内容、プログラムカウンタの値、メモリ管理情報などが含まれます。この切り替えは非常に頻繁に行われるため、OSはこれを極めて効率的に処理する必要があります。
- スケジューリング:誰にどのくらいCPU時間を与えるか?
OSが次にどのタスクを実行するかを決定するプロセスを「スケジューリング」と呼びます。
良いスケジューリングアルゴリズムは、以下のようなバランスを取る必要があります。
- 対話型アプリケーション(例えばテキストエディタ)の応答性
- バックグラウンドタスク(例えばファイルのコピー)のスループット
- システム全体の公平性
- 優先度の高いタスクへの配慮
現代のOSでは、複雑なヒューリスティックに基づいてこれらの要素を考慮したスケジューリングが行われています。例えば、ユーザーが直接操作しているアプリケーションにはより多くのCPU時間が割り当てられ、バックグラウンドのタスクには残りのリソースが分配されるといった具合です。
マルチコア時代のマルチタスク
近年のCPUはほとんどが複数コアを備えており、真の並列処理が可能になっています。しかし、コア数以上のタスクが存在する場合(それが普通です)には、各コア上で従来と同じマルチタスク技術が使われます。マルチコア環境では、OSはコア間でのタスクの分配も行い、負荷バランスを取る必要があります。
また、マルチコア環境では新しい課題も生じます。
例えば、同じデータに複数のコアが同時にアクセスする場合の同期問題(競合状態)や、キャッシュの一貫性維持など、単一コア時代にはなかった複雑さが加わります。
おわりに
マルチタスク技術は、私たちがコンピュータを直感的に使えるようにするための基盤です。
音楽を聴きながら作業をしているとき、その背後でOSが何千回ものタスク切り替えを行ない、複雑なリソース管理を行なっています。この同時に行われているように見えるこの技術は、超高速の切り替えによって実現していることが理解できたと思います。
最後までお読みいただき、ありがとうございました。
参考・画像引用元URL
Discussion