変更要約: 初版
2.5ソフトウェア(OS)
OSが果たす資源管理という役割と、タスク(プロセス)管理における状態遷移、CPU時間を割り当てるスケジューリング方式(ラウンドロビン等)を学びます。さらに複数のタスクが資源を奪い合う際に必要な排他制御(セマフォ)と、そこから起こりうるデッドロック、ファイル管理の基礎、そしてOSS(オープンソースソフトウェア)の考え方まで扱います。
OS(オペレーティングシステム)は、CPUやメモリといった限られたハードウェア資源を、複数のプログラムや利用者に公平かつ効率よく割り当てる縁の下の力持ちです。この資源管理の考え方を理解すると、なぜ複数のアプリを同時に動かせるのか、なぜ時々処理が固まってしまうのかが説明できるようになります。
2.5.1OSの役割とタスク管理
- OSの中核的な役割は資源管理です。CPU時間・主記憶・補助記憶・入出力装置といった限られたハードウェア資源を、複数のプログラムに割り当て、利用者から見て使いやすい形に抽象化します。この抽象化により、アプリケーション開発者はハードウェアの詳細を意識せずにプログラムを作れます。
- タスク(プロセス)=OSが管理する実行中プログラムの単位。実行状態(CPUを使って実際に処理中)・実行可能状態(実行の準備は整っているがCPUの順番待ち)・待ち状態(入出力の完了など、実行状態以外の条件が整うのを待っている)の3状態を行き来しながら進行します。CPUは同時に1つのタスクしか実行できないため、実行可能状態のタスクが複数あればスケジューリングによって順番が決められます。
2.5.2スケジューリング方式
| 方式 | 概要 |
|---|---|
| ラウンドロビン | 一定時間(タイムクウォンタム)ずつ順番にCPUを割り当てる公平な方式 |
| 優先度方式 | タスクに優先度を付け、優先度の高いものから実行する方式 |
| 到着順方式(FCFS) | 到着した順にそのまま実行する単純な方式 |
- スケジューリング=実行可能状態にある複数のタスクへ、どの順番でCPU時間を割り当てるかを決める仕組み。代表例がラウンドロビン方式で、各タスクへ一定時間(タイムクウォンタム)ずつ順番にCPUを割り当て、時間切れになったタスクは実行可能状態に戻して列の最後尾に回すことで、特定のタスクがCPUを独占するのを防ぎます。
- スケジューリング方式の選び方は用途次第です。応答性を重視する対話型システムではラウンドロビンのように公平に順番が回る方式が好まれ、緊急度に差がある処理が混在する環境では優先度方式が適します。ただし優先度方式では、優先度の低いタスクがいつまでもCPUを割り当てられない飢餓状態に陥るリスクがあり、対策が必要になる場合があります。
「タスクの3状態=実行状態/実行可能状態/待ち状態」「ラウンドロビン=一定時間ずつ公平に割り当て」「セマフォによる排他制御が不適切だとデッドロックが起こりうる」「デッドロック回避の代表策=資源を確保する順序を統一する」が最頻出です。「デッドロックはセマフォを使えば絶対に起きない」という誤解も定番のひっかけです。
複数のタスクが同じ資源(例:共有ファイルやデータベースのレコード)を同時に更新しようとすると、更新内容が競合してデータの整合性が崩れる危険があります。これを防ぐ仕組みが排他制御で、代表的な実現手段がセマフォです。セマフォは資源の空き数を表すカウンタ(計数器)で、タスクが資源を使う前にP操作(カウンタを減らし、0未満なら空くまで待つ)を行い、使い終えたらV操作(カウンタを増やして解放を通知する)を行うことで、同時アクセスを制御します。ここで注意すべきなのがデッドロックです。例えばタスクAが資源1を確保した状態で資源2の空きを待ち、同時にタスクBが資源2を確保した状態で資源1の空きを待つと、お互いが相手の解放を待ち続け永遠に処理が進まなくなる状況に陥ります。セマフォという仕組み自体を正しく使っていても、資源を確保する順序が誤っているとデッドロックは起こり得るため、「セマフォさえ使えばデッドロックは起きない」という理解は誤りです。実務でのデッドロック対策としては、全てのタスクが資源を確保する順序を統一する(例:常に資源1→資源2の順で確保する、と決めておけば上記のような循環待ちは起こらない)、確保できない場合は一定時間で処理を中断してやり直す、といった方法が使われます。ファイル管理の観点では、OSはファイルやディレクトリを階層構造で管理し、各ファイルへのアクセス権限(読み取り・書き込み・実行)を利用者やグループごとに設定できるようにしています。これも広い意味での資源管理の一部です。
2.5.3OSSの考え方
- OSS(Open Source Software)=ソースコードが公開され、定められたライセンスの下で誰でも利用・改変・再配布ができるソフトウェア。主要なOSの中でも、LinuxはOSSカーネルとして広く普及し、サーバ用途をはじめ組込み機器(Androidの基盤等)まで幅広く使われています。企業がOSSを採用する利点には、ライセンス費用の低減や、コミュニティによる改善の恩恵を受けられる点が挙げられます。
ひっかけ: 「セマフォを使って排他制御を実装すればデッドロックは絶対に起きない」は誤りです。セマフォ自体は正しく動作していても、資源を確保する順序を誤ると循環待ちが発生しデッドロックに陥りえます。また「ラウンドロビンでは優先度の高いタスクが必ず先に処理される」も誤り=ラウンドロビンは一定時間ずつの公平な割り当てが原則で、優先度を考慮するのは優先度方式です。「OSSは無償である以上、ライセンス条件を確認せずに自由に再配布してよい」も誤り=OSSであってもライセンスごとに定められた条件(表示義務・改変時の再公開義務等)を守る必要があります。
2.5.4この節のまとめ
- OSの中核=資源管理。タスクの3状態(実行・実行可能・待ち)をスケジューリング(ラウンドロビン等)で制御
- 排他制御(セマフォ)で資源の同時アクセスを防ぐ。資源確保の順序を誤るとデッドロックが発生しうる(セマフォ使用は防止を保証しない)
- OSはファイルを階層構造とアクセス権限で管理。OSSはソース公開・改変/再配布可だがライセンス条件の遵守が必要
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. CPUを使って実際に処理が進行中のタスクの状態はどれか。
Q2. タスクAが資源1を確保したまま資源2の解放を待ち、タスクBが資源2を確保したまま資源1の解放を待っており、双方の処理が永遠に進まなくなっている。この状況を指す用語はどれか。
Q3. デッドロックの発生を防ぐための代表的な対策として、最も適切なものはどれか。

