UNIX 4.3BSDの設計と実装 読書会(2)
メモと補足.
補足はこんな形.
2.2 カーネルの構成
- VAX依存のメモリ管理機構は4.4BSDで捨てられた.Machから持ってきたものを使用.
参考文献[1] のp.155では,「Mach2.0の仮想メモリシステムに基づいたものだが、Mach2.5や、Mach3.0で加えられた修正も組み込まれている。」と記載あり.
ただし,MachのシステムコールのI/Fは全く残っておらず,4.2BSDのI/Fに置き換えられている.
- FreeBSDではさらに実装し直された?
参考文献[2] のp.68では,「4.4BSDの仮想記憶システムの実装を徹底的に最適化したものを使用している」とある.
マルチプロセッサもサポートしているが,初期のFreeBSDは対応していないように思う.
2.3 カーネルサービス
- 下から4行目.読点は外して読んだほうが読みやすい.
2.4 プロセス管理
- コルーチンとは?ユーザレベルでのスレッドのようなもの.yield がそれ.
2.6 入出力システム
- パイプ:4.2BSDより前(lionsなど)はFSで実装,4.2BSD〜はsocketで実装,
FreeBSDは,パイプを実装するのにsocketは使っていない([2]のp.72).
- FreeBSDは三種類のオブジェクトではなく,四種類のオブジェクトになっている
名前付きパイプが追加されている([2]のp.72).
- scriptコマンドでdup()を使っている?
FreeBSD9.0のscriptのソースコード(src/usr.bin/script)を眺めた限りは使っていないように見える.
- sinkをどう訳すのが適切なのか?
「受信側」とか「出口」とかだろうか?
- readv(),writev()をどのように使用するのか?
- /proc(つまりprocfs)は無かったのか?
あった.最初の実装は,Version 8 UnixにTom J.Killianが実装したもの.
"Processes as Files"という論文がUSENIXで発表されたようだが現在は公開されていない?
BSD系では4.4BSDで実装されている.4.3BSDでは標準ではなかった?*4
FreeBSDではprocfsではなくsysfsを利用すべきとされており,標準では/procはマウントされていない.*5, *6
2.7 ファイルシステム
- 空孔とは?
[2] p.80の説明の方が分かりやすい.
「ホールというのは,ファイルの中でデータが一度も書き込まれたことのない連続する空洞領域である.」
「書き込みポインタをファイルの終端よりも先に設定して書き込」んだり,「trancateシステムコールを使ってファイルの長さを伸ば」したりすることで作れる.
- truncateコマンドはtruncateもextendも可能.
- 4.2BSDより前はファイル名が14文字に制限されていた.以降は255文字以内.
2.8 機器
2.9 端末
- 特になし.
2.10 プロセス間通信
ここではプロセス間通信(IPC)として,ネットワーク通信によった記載がされている.
[2]では,FreeBSDが「セマフォ,メッセージキュー,共有メモリなど」の「ローカルなIPC機構をサポートしている」と記載あり.
PF_UNIXとPF_LOCALは同じ値であり,/usr/include/sys/socket.h で定義されている.
L.299 #define PF_LOCAL AF_LOCAL #define PF_UNIX PF_LOCAL /* backward compatibility */
2.11 ネットワーク通信
1つのドメイン(protcol family)の中に,複数のプロトコルが存在する.
ドメインの通信はソケット間で行われる.
socket()の引数typeでそのソケットの働き(意味,セマンティクス)を指定することになっている.
さらにこのtypeで利用できるプロトコルを引数protocolで指定する.
しかし,通常はtypeで一意にprotocolが決まってしまうため,protocolは指定しない.
- socket()の呼び出し規約は次のとおり.
socket(int domain, int type, int protocol);
- domainとtypeとprotocolで指定する値はそれぞれ何か? → manに記載あり。
2.12 ネットワーク実装
- 特になし.
2.13 システム操作
- 課金とは? → p.64に記載あり.課金用の統計情報を集めている.実際の請求は別途運用次第.
参考文献
[1] Marshall Kirk McKusick他 著,砂原 秀樹 監訳,七丈 直弘 訳,「4.4BSDの設計と実装」,アスキー,2003.
[2] Marshall Kirk McKusick他 著,砂原 秀樹 監訳,歌代 和正 訳,「BSDカーネルの設計と実装−FreeBSD詳解−」,アスキー,2005.
*1:http://msdn.microsoft.com/ja-jp/library/9k7k7cf0.aspx
*2:http://d.hatena.ne.jp/n7shi/20111130 配布資料第7章
*3:http://en.wikipedia.org/wiki/Coroutine
*4:http://en.wikipedia.org/wiki/Procfs
*5:http://lists.freebsd.org/pipermail/freebsd-fs/2011-February/010760.html
*6:http://www.freebsd.org/doc/en_US.ISO8859-1/articles/linux-users/article.html#PROCFS
*7:http://comments.gmane.org/gmane.comp.lib.gnulib.bugs/30377
*8:http://www.gnu.org/software/libc/manual/html_node/Address-Formats.html