mem.cを読む
やっとの思い出mem.cを解読した。
概要
nullを読み込む場合、0を返している。
イテレーション関数もこのあたりに集中して依存している。
読み込みの場合copy_to_userを使用して読み込んでいる。
終了条件不明、要検証。
カーネルエリアのメモリ読み込みも前処理して同じ関数を呼んでいる。
書き込みの場合、
copy_from_userを利用してバッファに書き込んでいる。
成功の場合も失敗の場合も書き込み数を返している。
メモリをシーク処理しているらしき場所もある、ランダムアクセス可能なメモリでシークの必要性は不明。
構造体群
基本的に
.read .write .open .llseek
が実装されている、必要ならイテレーション処理もここで実装。
デバイスの初期化もここ。
レポート
今回のソース読みで意外と機種依存箇所が多い、特にIA64が多い。
amd64が主流になった今でもIA64をLinuxはサポートするためにリソースを割いている。
Intelさえもamd64を作りIA64がほぼディスコン状態なのにサポートする必要はあるのだろうか?
少なくともi386アーキテクチャのサポートをやめてIA64を残している理由は不明。
おそらくメインフレーム等で使われていることを考慮していると思われる。
nullがデータを捨てていて、zeroが0を読み書きしていることがおそらく確定。
日本語のカーネル書籍が少ないため詳細な実装にはもっと調査が必要。
今回はmem.cを読んだ。
まだまだ詳細実装時ついては不明点が多い。
GNU GLOBALを使用して関数および構造体、typedefのもとを辿ろうとすると複数ファイルが該当することがある。
なぜ同じ名前の関数等を定義したかは不明、おそらく機種依存対応だと思われる。
以上、本日のレポート。