Atomic 操作( 3 )
n Atomic 操作関数
atomic_set
セットatomic_read
読み出しatomic_add
加算atomic_sub
減算atomic_inc
インクリメントatomic_dec
デクリメントatomic_inc_and_test +1
して検査atomic_dec_and_test -1
して検査atomic_add_and_test
加算して検査atomic_sub_and_test
減算して検査atomic_test_and_inc
atomic_test_and_dec
test_and_set_bit
ビットを立てる 用意され ていない!
SpinLock と Atomic 操作
n 典型的な処理の例
SpinLock
状態調査 処理可能?処理
Atomic
判定?処理 成功
成功 失敗
失敗
Atomic
変数復帰カーネルスレッド
n カーネルスレッド
スレッド アプリケーション
スレッド スレッド
アプリケー ション
スレッド スレッド
ユーザモード
カーネルモード
スケジューリングの単位
カーネルスレッド (2)
PID TTY STAT TIME COMMAND 1 ? S 0:04 init [3]
2 ? SW 0:00 [keventd]
3 ? SW 0:00 [kapmd]
4 ? SWN 0:00 [ksoftirqd̲CPU0]
5 ? SW 0:48 [kswapd]
6 ? SW 0:32 [bdflush]
7 ? SW 0:00 [kupdated]
8 ? SWN 0:10 [mdrecoveryd]
13 ? SW< 0:04 [raid1d]
14 ? SWN 0:11 [raid1syncd]
15 ? SW< 0:00 [raid1d]
テスト用に作成した カーネルスレッド
# ps ax
の表示例ユーザモードとカーネルモード
n IO 処理の高速化
ユーザアプリケーション バッファ バッファ
ドライバ ドライバ
Hardware Hardware
制御アプリケーション
バッファ
ドライバ ドライバ
Hardware Hardware
ユーザモード
カーネルモード処理の例
n ネットワークパケット処理の例
ネットワーク パケット キャプチャ
ドライバ
FIFO
または リング バッファファイル
IO
ドライバ
ストレージ
対応策
n まずはコードを書くこと
n
カーネル2.6
のドライバ・モジュールn プログラミングのヒント
n
シリアル処理とパラレル処理n
マルチプロセッサ対応プログラミングn
ユーザモードとカーネル・モードn カーネル 2.6 機能の使いこなし
n sysfs / kobject / libsysfs / udev
sysfs / kobject / udev / libsysfs
n sysfs
n
システム、デバイス、バス、ドライバを管理する新し い仮想ファイルシステムn kobject
n sysfs
の構成要素n udev
n
従来のdevfs
を置き換える「仮想デバイスノード・ファイル・システム」
n libsysfs
IO スケジューラ
n デバイス IO のスケジューリング
n elevator = as(anticipatory)
予測スケジューラ(
デフォルト)
n elevator = deadline
IO
待ちを最小限にするn ファイルIO、データベース処理
n elevator = cfq (Complete Fair Queuing disk I/O scheduler )
n マルチメディア用、レイテンシの押さえ込み
n elevator = noop
n IO スケジューラの動的な変更
まとめ: 新時代のプログラミング
n 根本的には設計段階から考慮する
n パラレル処理とシリアル処理の使い分け
n
リソースを複数個持たせて同時実行n before
イメージ・ベースのコーディングn SpinLock → Atomic 操作の使い分け
n
ループするだけでは勿体無い…
n lock
プレフィックス:asm()
でオリジナル関数も…
n カーネルスレッドの活用
n カーネル内モジュールでの処理
最新 Linux デバイスドライバ開発応用
n
現状と問題点n
対応策n デモンストレーション
n
今後の見通しデモンストレーション
n ソースの公開
http://www.devdrv.co.jp/download/LKC/
ご自身の責任において ご利用下さいますよう
お願い致します。
最新 Linux デバイスドライバ開発応用
n
現状と問題点n
対応策n
デモンストレーションn 今後の見通し
今後の見通し
n カーネル 2.7 は( 当分)無い
n Linus
が2.7
の検討よりも2.6
の安定化を優先すると 考えているn (
おそらく)2.6
は進化し続けるn
(おそらく)2.4
の進化は止まるn CMP
が出ると世の中が変わるn Hack する事!
n
とにかくテストしてみる とにかくコードを書く
ドキュメント内
最新Linuxデバイスドライバ開発応用-修正版-PDF.PDF
(ページ 34-49)