高速システムコール vs 低速システムコール:シグナルがブロックされたシステムコールをウェイクアップする方法
2025-06-03
この記事では、オペレーティングシステムにおける高速システムコールと低速システムコールの根本的な違いについて掘り下げます。高速システムコール(`getpid()`など)はすぐに返りますが、低速システムコール(`read()`など)は外部イベントを待つためにブロックされる可能性があります。この記事では、シグナルがブロックされた低速システムコールをどのように中断するか、`EINTR`エラーの処理方法と`SA_RESTART`フラグの使い方をコード例で示します。さらに、ディスクI/Oのニュアンスと、カーネルがさまざまなタイプのシステムコールを処理する方法についても考察し、さまざまなI/Oモデル(ブロッキングI/O、ノンブロッキングI/O、I/Oマルチプレクシング、シグナル駆動I/O、非同期I/O、I/O Uring)の長所と短所を比較します。