2011-12-01から1ヶ月間の記事一覧

UNIX 6th code reading - パイプ

はじめに 今回はパイプを見ていきます。ソースコードのunix/pipe.cを中心に追っていきます。 パイプの仕組み パイプとはプロセス間の通信を実現する仕組みのことです。各プロセス毎に固有のアドレス空間を持っているため、通常は他プロセスが持っているデー…

UNIX 6th code reading - unix/sys3.c

はじめに 今回はunix/sys3.cを見ていきます。 fstat( ), stat( ) fstat( )(6014行目)はfstatシステムコールのハンドラです。stat( )(6028行目)はstatシステムコールのハンドラです。fstatもstatもファイルのinode情報を取得するシステムコールです。異なるの…

UNIX 6th code reading - unix/sys2.c

はじめに 今回はunix/sys2.cを見ていきます。ファイルシステム関連のシステムコールがそろっています。各システムコールの説明はユーザマニュアルにも載っているので、合わせて目を通すことをお勧めします。 read( ), write( ) read( )(5711行目)はreadシス…

UNIX 6th code reading - unix/rdwri.c

はじめに 今回はunix/rdwri.cを見ていきます。ファイルの読み書き処理が中心です。 readi( ) readi( )(6221行目)は、inodeに対応するデータの内容をディスクから読み出します。readi( )を呼び出す前に、u.u_base, u.u_offset, u.u_count, u.u_segflgを設定し…

UNIX 6th code reading - unix/fio.c

はじめに 今回はunix/fio.cを見ていきます。u.u_ofile[ ]やfile[ ]の割り当てや、権限チェックなどの関数が揃っています。 getf( ) getf( )(6619行目)は、ファイルディスクリプタから、該当のfile構造体を取得してそれをreturnします。ファイルディスクリプ…

UNIX 6th code reading - unix/subr.c

はじめに 今回はunix/subr.cを見ていきます。仮想的なblock Noから物理デバイスのblock Noに変換するbmap( )を中心に、subr(サブルーチン)の名前の通り、他の関数からよく呼ばれる関数が揃っています。 bmap( ) ファイル中のアクセスしたいデータのオフセッ…

UNIX 6th code reading - unix/namei.c

はじめに 今回はunix/namei.cを見ていきます。システムの中で、ファイルがどのように扱われているかが見えてくると思います。 namei( ) 以前のエントリで書いたように、ファイルはディレクトリによって木構造として管理されています。パスを使うことで、各フ…

UNIX 6th code reading - unix/iget.c

はじめに 今回はunix/iget.cを見ていきます。iget.cはコア中のinode[ ]リソース管理が主です。他に、新たなinodeの生成(ファイルの生成)や、ディレクトリへのエントリ追加に関する処理などがあります。 コア中のinode[ ] unix/inode.hの中でinode構造体の配…

UNIX v6で削除したファイルの復元をしてみた

はじめに 先日、Lions' Commentary on UNIXの読書会に参加したときにUNIX v6のファイルシステム周りのコードを読みました。ファイルのクローズ・削除のあたりを読んでいたときに、あることに気づきました。「ファイル削除するときに、ブロックデバイスのデー…

Lions’ Commentary on UNIX 読書会メモ#12

はじめに Lions本読書会#12に参加してきました。メモを残しておきます。今回は18章を読みました。 togetter 関連ツイートをtogetterでまとめました。 http://togetter.com/li/222603 私のツイートは表記のゆれが大きいので、参考にされる場合は注意して呼ん…