雑記帳

ソフトを中心に雑記を書いてる割とすぐ転職したい人。コメント貰えると私が喜びます。

Linuxカーネル解読室(3日目)

毎日と言いつつ、3日目で死んだでござる。
昨日は地震がグラグラしてて原発爆発しないかとビビっておりました@いわき。
なので、勘弁して下さい。
気を取り直して再開です。

  • 序章 0.7 ファイルシステム
    • ファイルシステムはOSの中心です。
    • 記憶装置上のデータに対して、ファイルという形式でアクセスする手順を規定し、提供しています。
    • ファイル形式はバイトストリームで、データ型はアプリ依存。デバイスやカーネル内データもファイルに見える。
    • ルート(/)から始まるツリーの下に、管理されている。
    • iノードで対象のデータの位置を知ることが出来る。
    • ファイルへのアクセスはopenシステムコールで開始。与えたファイル記述子に応じた(ファイル)入出力をする。
    • キャッシュは、一度読んだメモリを保持しておくページキャッシュと、順次アクセスで使いそうなデータを先に読む先行読み出しと、

iノードキャッシュ、ファイル名キャッシュなどがある。

  • 序章 0.8 ネットワーク
    • プロセス間通信インターフェースではソケット一般的。通信プロトコルではTCP/IPが利用率が高い。
    • ソケットインターフェースはLinuxカーネル内に実装がある。
    • ソケットで扱うデータはソケットバッファと呼ばれる仕組みで管理されている。
    • ただ単に実装するとデータコピーが頻発するけど、何やら工夫があって気にしなくて大丈夫らしい。
    • LinuxカーネルにはTCP/IPプロトコルスタックが実装されている。積極的に遅延処理を行ってスループットを得ているらしい。
    • IPv6もお手のもの。
    • パケットフィルタリングやNAT機能や負荷分散機能も付いてるよ。
  • 序章 0.9 プロセス間通信
    • Linuxカーネル上ではプロセスは独立しているが、プロセス間通信を使えば連携可能。
    • 親子プロセス間で通信するパイプが有名。
    • SystemV IPCと呼ばれるものもある。共有メモリ、セマフォ、メッセージがそれ。
    • カーネル2.6からはFUTEXというものが登場。同一マシン上の複数プロセス間での軽い資源のロック機構を提供。
  • 序章 0.10 Linuxカーネル起動
    • 電源->ブートローダ(LILO,GRUB)が起動。カーネルイメージを実メモリ上に読み込み、Linuxカーネルの起動エントリから実行が開始される。
    • 起動されたカーネルはメモリ上のデータ構造を初期化する。
    • 次にプロセスID=1のプロセスが起動し、各デバイスの初期化やルートファイルシステムのマウント、カーネルスレッド起動などしたあと、initプログラムをexecしてinitプロセスになる。
    • 起動終わり。あとはシステムコールの発行や割り込みを待つだけ。


うん、ネットワーク周りは良く解らん。