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の文法が変わって変更されているところとかには触れません。論理的・設計的に変更のある箇所だけ注目して…

JavaScriptとHTML5で作ったUNIX v6 emulatorっぽい何かの紹介

http://d.hatena.ne.jp/takahirox/20110827/1314441832の続き 紹介動画 免責 まだバグバグな状態です。無限ループなどにはまる可能性もあります。自己責任で使用してください。ローパワーなマシンだと結構遅いです。 使い方 下記のリンクをクリックしてくだ…

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のソースコードを読むことをオススメします。その理由をこのエントリで書い…

Why we should read UNIX 6th source code

Introduction Lately, I finished writing the note of UNIX 6th code reading.I recommend you to read the UNIX 6th source codes, too.I'll show you why it's so worthy, here. Summary UNIX 6th is appropriate for who has never read the source code…

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

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

はてなダイアリーの記事一覧をcsvファイル化するchrome extension

https://chrome.google.com/webstore/detail/mjldmihpfjefdkkmnpijmdeafgfkfjmi?hl=ja&gl=JP 本文は取得しません。日付とカテゴリとURLとタイトルのみ。スクリーンショット 解説動画(英語) the subscription of the movie. i'll introduce my chrome extensi…

the notes of ZIP workshop 1-4, compression and decompression with deflate and fixed Huffman

introduction this entry follows http://d.hatena.ne.jp/takahirox/20110723/1311406642this is the notes of ZIP workshop. the blog of the host is here. you can get handout. http://d.hatena.ne.jp/n7shi/20110529 atnd http://atnd.org/events/14792…

Microsoft paint+マウス+白黒で絵を描いてみた

遅い年賀の挨拶。単なる現実逃避。たまには技術的な話題以外もね。ペンタブほしー。

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