表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
13/16

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のもとを辿ろうとすると複数ファイルが該当することがある。

 なぜ同じ名前の関数等を定義したかは不明、おそらく機種依存対応だと思われる。


 以上、本日のレポート。

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ