Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
linuxとしては、デバイスからの割り込みがどのCPUに入っても問題がないように作られており、複数の割り込みハンドラが別々のCPU上で動作する。割り込みハンドラ間で共有する資源がある場合、ハンドラ間で割り込みの排他を行う必要がある。
また、Linuxカーネル処理も複数のCPU上で並列動作するが、これらのカーネル処理からも上記資源を参照することがあり、その場合排他処理が必要となる。
排他処理動作の基本方針は以下の通りである。
また、Linuxカーネルはシステム全体の割り込みを全て禁止する方法も提供している。cli関数(global_cli関数)がその処理を行う。いづれかのCPUでこの関数が呼び出されると、システム上では割り込みハンドラおよび旧型のBHハンドラの実行は禁止される。他のCPUが割り込み禁止区間走行中に当CPUが割り込みを受けた場合、他のCPU上の割り込み禁止区間終了(sti...global_sti関数)を当CPUはビジーウェイトして待ち続ける。
逆に、他のCPUで割り込みハンドラの実行中の時は、当CPUは割り込み禁止区間に入ることはできず、当CPUはハンドラ終了を待ち続ける。
下図に、二つのCPU上での割り込みハンドラと割り込み禁止区間が相互に同期をとりながら実行する様子を示す。縦軸は時間を表し、時間の経過に従って下方向へ進んで行く。
(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST1
[PageInfo]
LastUpdate: 2008-08-27 14:19:07, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members