FreeBSD初心者運用日記 このページをアンテナに追加

 | 

2008-06-07

[]「UNIXシステムプログラミング」読書メモ 20:46 「UNIXシステムプログラミング」読書メモ - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - 「UNIXシステムプログラミング」読書メモ - FreeBSD初心者運用日記 「UNIXシステムプログラミング」読書メモ - FreeBSD初心者運用日記 のブックマークコメント

  • ファイルシステム(パーティション、デバイス)は、以下で構成される
    • ブートブロック
      • システムディスクではブートストラップがここに格納される。
    • スーパーブロック
      • ファイルシステムの大きさ、空きブロックの情報、iノードの情報など。
      • マシン動作中はメモリ上に展開され、定期的にsyncで同期が行われる。
    • iノードリスト
      • ファイルの種類、所有者、所有グループ、タイムスタンプ、ファイルサイズ。findでよく指定するパラメタなんかが格納されているみたい。
      • ひとつのファイルに対して、ひとつのiノードが作成される。
    • データブロック
      • ファイルそのもののデータ。ファイル名(ディレクトリファイルの中身として格納されている)
  • デバイスファイルについて
    • デバイスノードとも呼ばれ、通常/dev配下におかれている。
    • ユーザは周辺装置をデバイスファイル名で指定するが、システムはデバイス番号で識別する。これらを紐付ける役割がデバイスファイルとなる。(iノード内にデバイス番号が格納されている。)
    • デバイスファイルの作成は、mknodコマンドで行う。
    • デバイスファイルにもiノードはあるが、データブロックはない。代わりにデバイス番号がある。
  • デバイス番号について
    • メジャー番号とマイナー番号で構成される。
    • あるデバイスに対するデバイス番号を知りたい場合は、デバイスドライバのソースを見れば書いてある。
    • /dev配下をls -lすると通常ファイルサイズが表示されるところにデバイス番号が表示される。
/dev/fd# ls -asl
total 1
1 dr-xr-xr-x  2 root  wheel       512  6  8 07:00 .
1 dr-xr-xr-x  4 root  wheel       512  6  8 07:00 ..
0 crw-rw-rw-  1 root  wheel  247,   0  6  8 07:00 0
0 crw-rw-rw-  1 root  wheel  247,   1  6  8 07:00 1
0 crw-rw-rw-  1 root  wheel  247,   2  6  8 07:00 2
    • 上を例にすると、247がメジャー番号でfdを表し、その隣の0~2がマイナー番号でfdのそれぞれの装置を表す。
  • デバイスドライバ
    • カーネル内のプログラム
    • 機能としては、オープン、クローズ、読み、書き、割り込みなどがある。
    • カーネル内のサブルーチンとしてopen,close,read,write,strategy,ioctl,...などがあり、新たな周辺装置を追加する場合は、これらのサブルーチンをカーネル内に追加すればよいことになります。
    • 実際には上記関数名の前に装置を表す文字列をつけて区別している。(ハードディスクならhdopen,プリンタならlpopenなど)
    • これらのサブルーチンを呼び出す入口となるシステムコール名としては、open,closeといった名前になる。
  • デバイスファイルの作成方法について
    • FreeBSD5.0以降のシステムではdevfs(デバイスファイルシステム)が何かやってる。
    • 5.0より前のシステムでは、MARKDEV(8)スクリプトを使ってデバイスファイルを作成します。
    • この他にも、mknodコマンドというものがあり、デバイスファイルや/dev/nullを間違って削除したり、なんらかの理由で作成されていない場合に使用するらしいですが、どのバージョンで使うのかは調査中。
 |