勉強

UNIX v6クイズ合戦

はじめに 不意に始まった神々の戯れ(UNIX v6クイズ合戦)。楽しかったのでtogetterで記録しておきます。みなさんもUNIX v6クイズ合戦に参加して知識を深め合いましょう! togetter http://togetter.com/li/342105

UNIX 7th code reading - ブロックデバイスのリソース管理

はじめに 今回はsuperblockに関する処理や、alloc( ), ialloc( )などブロックデバイスのリソース管理を見ていきます。 iinit( ) 起動時のmain( )からiinit( )が呼ばれ、root deviceの初期化が行われます。root deviceの、0から数えた1番目のblock(=superbloc…

UNIX 7th code reading - ファイルのクローズ処理

はじめに 今回はファイルのクローズ処理を見て行きます。 close( ) 下記のようにCのプログラムからオープン済みのファイルディスクリプタを引数にclose( )を実行すると、 close( fp ) ; libcのclose( )からcloseシステムコール(sys close(=6))が発行され、cl…

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

はじめに Lions本読書会#16に参加してきました。メモを残しておきます。今回は21章のパイプの振り返りを行いました。 togetter 関連ツイートをtogetterでまとめました。 http://togetter.com/li/291759 終わりに 次回のLions本読書会は5月27日(日)に開催され…

UNIX 7th code reading - ファイルの読み書き処理

はじめに 今回はファイルの読み書き処理を見ていきます。クローズ処理は次回に回します。 read( ), write( ) read( ) http://www.tamacom.com/tour/kernel/unix/S/99.html#L12 write( ) http://www.tamacom.com/tour/kernel/unix/S/99.html#L20 ユーザプログ…

UNIX 7th code reading - ファイルのオープン処理

はじめに 今回もUNIX 7thのコードを読み解いていき、6thとの差分を明らかにしていきます。今回はファイルのオープン時の処理を見ていきます。 creat( ), open( ) ユーザプログラムからsys open(既存のファイルのオープン), sys creat(新規にファイルを生成。…

とあるPDP11/40のレジスタにまつわる議論

はじめに とあるエイプリルフールの夜に、ふいに始まったPDP11/40のレジスタにまつわる議論をまとめておきます。twitter上でもこのようなやり取りをしながら昔のUNIX, PDP11について読み解いていっているのが見せられたら面白いと思い、まとめました。最近古…

UNIX 7th code reading - data block mapping

はじめに 「itrunc( )が7thと6thではかなり変わっているよ」というコメントを頂きました。 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.create…

UNIX 7th code reading - process switch (context switch)

はじめに 前回のエントリで、UNIX 6thと7thでprocess switch(context switch)の仕様が違うかもしれないという話をしました。今回はそれを明らかにするために、7thのsave( )とresume( )を確認していきます。newproc( )で生成したプロセスがswtch( )で選択され…

UNIX 7th code reading - main

はじめに 今回は起動時に実行されるmain( )を見ていきます。あまり細かいところは追っていかないつもりです。処理を関数に切り出しているところとか、cの文法が変わって変更されているところとかには触れません。論理的・設計的に変更のある箇所だけ注目して…

UNIX 7th code reading - 6thとの差分

はじめに Unix 6th Edition readingが一息ついたので、7th Editionのreadingに移ります。6thのときと同じように、ここでメモを書いていこうと思っています。今回は、6thと7thの差分をざっと明らかにして、どういう方針でメモを書いていくかを決めます。 ソー…

初めてのOS source code reading(UNIX 6th source code readingのススメ)

このエントリはhttp://d.hatena.ne.jp/takahirox/20120131/1328006885を和訳したものです。 はじめに 最近UNIX 6thのソースコードの読書メモを書き終えました。みさなんにもUNIX 6thのソースコードを読むことをオススメします。その理由をこのエントリで書い…

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

はじめに Lions本読書会#13に参加してきました。メモを残しておきます。今回は19章を読みました。 togetter 関連ツイートをtogetterでまとめました。 http://togetter.com/li/249512 終わりに 次回のLions本読書会は2月26日(日)に開催される予定です。「OSの…

UNIX 6th a.out cheat sheet

UNIX v6のa.outについてまとめた内容を一枚の絵にしてみました。ユーザマニュアル5のa.outの項目を絵にした感じです。いくつかはまだ理解できていなくて空白になっていますがご了承を。 この情報はUNIX v6 インタプリタの作成に必要なものなのですが、調べて…

UNIX 6th code reading - 対話型端末その2

はじめに 前回は対話型端末の外枠を確認しました。今回は端末の読み書き処理を見ていきます。インターフェイスにKLを使用しているという前提で読み解いていきます。Lions本で言うと25章にあたります。練習問題を除いた最後の章です。このUNIX v6 code readin…

UNIX 6th code reading - 対話型端末

はじめに 今回は対話型端末の処理方法を見ていきます。Lions本で言うと24章にあたります。 対話型端末とは 対話型端末とは何なのか、まずは調べてみました。テレタイプ端末というのがそれにあたるようです。http://ja.wikipedia.org/wiki/%E3%83%86%E3%83%AC…

UNIX 6th code reading - buffer pool

はじめに 前回のエントリでキャラクタデバイスハンドラの実装を確認しました。今回はその中で使用されていたbuffer pool, putc( ), getc( )の詳細を確認していきます。Lions本で言うと23章の内容です。 buffer pool buffer poolの実態は、7908行目、8140行目…

UNIX 6th code reading - キャラクタデバイスドライバ

はじめに 今回からLions本の最終セクションを見ていきます。今回は22章を扱います。最初にキャラクタデバイスとは何かを解説し、その後ラインプリンタのデバイスドライバを見ていきます。 キャラクタデバイスとは UNIXではデバイスを二つの種類に分けて扱っ…

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構造体の配…

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

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

UNIX 6th code reading - unix/alloc.c

はじめに unix/alloc.cを見ていきます。alloc.cではブロックデバイス中のinode領域やデータ領域の割り当て・解放を行っています。 ブロックデバイスのinode領域の割り当て&解放 各ブロックデバイスに対応したsuperblock(filsys構造体(5561行目))がコア中に…

UNIX 6th code reading - mount

はじめに 前回「ブロックデバイスからコアメモリへのinode割り当てを解説する」と言ったのですが、その前にマウントについてまとめます。 マウントとは? マウントとはデバイスをOSに認識させ、OSから使えるようにする仕組みです。 mount構造体 mount構造体…

合宿の成果発表時に使用した資料&togetterまとめ

はじめに 先日の10/15-16にLions本読書会2011秋合宿に参加してきました。そのときの成果発表資料を公開しておきます。また、合宿関連のtweetをtogetterでまとめました。 資料 成果発表に使用した資料はこちらです。UNIX v6 emulator on HTML5 and JavaScript…