応用情報技術者仮想記憶・キャッシュ・デバイスI/Oオリジナル・公式資料照合難易度★★★★☆

キャッシュラインが64バイトのSMP機で、CPU AとBがそれぞれ別の8バイトカウンターを頻繁に更新する。二つのカウンターは同じ64バイトライン内にあり、更新自体は正しく同期されているが、キャッシュ間の無効化・転送が多い。false sharingを減らす配置はどれか。

A
二つのカウンターをさらに密に詰めて、同じラインへ確実に置く

同じラインの別変数でも書込みによりライン単位の競合が起きるため、密に詰めると解消しません。

B
同期をすべて外せば、正しさと性能の両方が必ず改善する

必要な同期を外すとデータ競合を起こし得ます。atomicな更新でもfalse sharingは別に生じます。

C
各カウンターを別の64バイト境界の領域へ分離・パディングし、頻繁な独立更新が同じラインを共有しないようにする★ 正解

キャッシュコヒーレンスの単位を分けることで、独立した書込みによる同一ラインの行き来を減らせます。

D
各カウンターをatomic型にするだけで、同じラインの無効化は必ずなくなる

atomicな更新は不可分性を扱います。同じラインへ頻繁に書くと、正しく同期されていてもfalse sharingの転送は生じ得ます。

解説

false sharingは異なる変数でも同じキャッシュラインを共有して起きます。分離はメモリ使用量を増やすので、実測に基づいて配置・CPUごとの集計・集約頻度などを調整します。

根拠資料・確認情報

対応範囲:2026年度 応用情報技術者試験

資料確認日:2026-10-28

同じレッスンの問題

問題 1
Linuxのforkによるcopy-on-writeを簡単化して考える。親は常駐する通常ページ16枚の私有・書込み可能領域を持ち、fork直後は親子が同じ16枚をCOWで共有する。子だけがそのうち異なる3ページへ書き込み、各ページで1枚ずつ複製される。親は書き込まず、解放・回収・共有メモリ・巨大ページはない。ページテーブル等の管理領域を除く、この領域の物理ページ数は幾つか。
問題 2
理想的なLRUページ置換を行う仮想記憶モデルを考える。ページ枠は3枚で初めは空、参照列は1,2,3,1,4,2,5である。最も長く参照されていないページを追い出し、初回読込みもページフォールトに数える。フォールト回数は幾つか。実際のLinuxがこの厳密なLRUをそのまま実装するという前提ではない。
問題 3
アドレス変換を保持するTLBに512エントリーがある簡単化モデルを考える。各エントリーは1ページを表し、全エントリーで同じページサイズを使える。競合・予約領域・別サイズ用TLBの差は無視する。ページサイズが4KiBの場合と2MiBの場合、それぞれ一度に保持できる変換対象の最大範囲はどれか。1KiB=2^10バイト、1MiB=2^20バイト、1GiB=2^30バイトとする。
問題 5
LinuxのPCIデバイスドライバーで、ioremapした制御レジスターへwritelで設定を書く。PCIの書込みはposted writeであり、CPUから戻った時点ではデバイス未到達の場合がある。デバイス仕様で副作用なく読める同じデバイスの状態レジスターがあり、読取りで先行書込みの完了を確認できる。次段階へ進む前に適切なのはどれか。

アプリで毎日学習しよう

ゲーミフィケーションで 応用情報技術者 合格を目指す。無料・課金なし。

更新: 2026/10/28