応用情報技術者カーネルとスレッドの並行制御オリジナル・公式資料照合難易度★★★★☆
単一CPUのプリエンプティブな固定優先度スケジューリングで、低優先度Lがmutexを保持し、高優先度Hがそのmutexを待っている。中優先度MがCPUを使い続け、Lが解放まで進めない。mutexが優先度継承をサポートし、Lの保護区間は有限でほかの待ちはない。優先度継承の働きはどれか。
A
HをLより低い優先度へ下げ、すべての待ちを無視する
待ち側Hを低くする仕組みではありません。ロック所有者の一時的な優先度を調整します。
B
Hの優先度だけをさらに上げ、mutex所有者Lへの継承は行わない
Hはロック待ちで実行できないため、Hの優先度だけを上げてもMがLを妨げる状態は解消しません。所有者Lが解放へ進める必要があります。
C
待つHの優先度を必要な間だけ所有者Lへ継承し、Lが解放へ進めるようにする★ 正解
LがHの優先度を継承するとMより先に保護区間を進められます。解放等で不要になった継承は解除・再評価されます。
D
mutexを自動的にHの所有へ移し、Lの処理途中の状態をそのまま使わせる
ロックの所有を処理途中で横取りすると共有状態が壊れます。所有者が整合性を保って解放する必要があります。
解説
中優先度の処理が低優先度のロック所有者を妨げる優先度逆転を、所有者の一時的な優先度引上げで抑えます。すべてのデッドロックや締切超過を解決する保証ではありません。Linuxのrt-mutexもこの原理を使います。
根拠資料・確認情報
対応範囲:2026年度 応用情報技術者試験
資料確認日:2026-10-28
同じレッスンの問題
問題 1
Linuxカーネルの共有atomic_tカウンターは0で始まる。2スレッドがそれぞれ1,000回、次の処理を行う。処理完了後にカウンターを読む。整数の範囲超過や他の更新はない。常に2,000にする修正はどれか。
v = atomic_read(&counter);
atomic_set(&counter, v + 1);
この2行の間には他スレッドの処理が入り得る。
問題 2
LinuxのSMPカーネルで、CPU Aがデータを作ってCPU Bへ一度だけ公開する。dataとreadyは0で初期化済み、readyは整列した整数でAだけが0から1へ一度変更し、公開後dataは変更しない。Bはready=1を観測した後にdataを読む。弱いメモリ順序のCPUも対象に、data=42を公開する組合せはどれか。
A: WRITE_ONCE(data, 42); 【公開操作】
B: 【確認操作】でready=1を確認後、READ_ONCE(data);
問題 3
PREEMPT_RTを使わないLinuxカーネルのプロセスコンテキストで、spinlock_tを保持したまま、睡眠して待つ可能性のある処理を呼んでいる。この共有状態を使うのはプロセスコンテキストだけで、hard IRQ等からの利用はない。設計の見直しとして適切なのはどれか。
問題 4
PREEMPT_RTを使わないLinuxのSMPカーネルで、同じspinlock_tをプロセスコンテキストとhard IRQハンドラーが使用する。プロセスがローカルIRQを有効にしたままspin_lockで取得すると、そのCPUで割込みが起き、ハンドラーも同じロックを待つ場合がある。適切な対策はどれか。クリティカルセクション内で睡眠はしない。