July 2025
Intermediate to advanced
492 pages
8h 23m
Japanese
本章はカーネルの同期について説明します。マルチスレッド環境でプログラミングをしている開発者であれば、馴染みがあるでしょう。2つ以上のスレッドが書き込み可能なデータを共有する場合には同期が必要です。同期なしで共有データにアクセスすると競合、あるいはレースコンディションが発生します。競合が発生するとデータが不正となり予期しない動作となりえます。これをデータ競合と呼びます。データ競合は複数のスレッド、または割り込み処理により発生します。
純粋なコードは読み込み権限と実行権限(r-x)のパーミッションであればデータ競合は発生しません。複数のCPUから同時の読み込みや実行は、むしろスループット向上のため推奨されます。しかし書き込み可能な共有データは注意が必要です。
マルチコアシステムで複数のコードパスを並列で実行することは望ましいことです。書き込み可能な共有データへのアクセスがあるコードパスの並列実行は、1つのスレッドだけがそのデータにアクセスすることを保証する必要があります。
単純に複数のコードパスが、並列に書き込み可能な共有データ上で動作している場合、データを破壊してしまう可能性があります。
次の2つを満たすコードパスのことをクリティカルセクションと呼びます。
つまりクリティカルセクションには並列処理に対する保護が必要です。別の言い方をすると、クリティカルセクションは排他的に、またはアトミックに動作しなければならないコードの一部分です。
排他的に動作するとは、データを安全に扱うために1つのスレッドだけがクリティカルセクションのコードを実行することです。アトミックとは他の処理に割り込まれずに処理を完了するということです。 ...
Read now
Unlock full access