はじめてのOSコードリーディング #1 ことはじめ
UNIXカーネルなどの低レイヤなところに詳しくなりたい。 ずっとそんなことを思っていたので、「はじめてのOSコードリーディング」で勉強を始めた。
はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)
著者の@superhogeさんのブログ↓
「はじめてのOSコードリーディング」という本を出版します - やる気のないはてだ
@7shiさん主催の読書会にも参加してきたので、その内容も含めながら覚え書き。
UNIX V6ソースコードのダウンロード
ここがUNIXの歴史のトップページ。http://minnie.tuhs.org/cgi-bin/utree.pl
ソースコードのアーカイブはここから。http://minnie.tuhs.org/Archive/PDP-11/Distributions/research/Dennis_v6/
第1章: UNIX V6の全体像
カーネルとは?
OSの中核を成す部分。システムを構築するために必要な機能を提供する。
カーネルは、アプリケーションに対してH/Wの抽象化を行い、またシステムコールを提供する。アプリケーションプログラムは、システムコールを使ってカーネルに対して要求を出す。
システム管理機能をカーネルに集約・隠蔽することでセキュリティと保守性を保っている。 また、POSIXという移植性を高めるための規格がある。(Unix TSS 5〜6からPOSIXができてきたらしい)
Pre K&R C
UNIX V6はPre K&R Cで書かれていて、その記法にとてもクセがある。 プロトタイプ宣言なし、キャストなし。
キャストがないのでレジスタ操作は以下の様な無名構造体を用い、1ワードのデータをint型で無理やり読み出し、書き込みする。
PDP-11
UNIX V6を構成するプロセッサ。資料へのリンクを貼っておく。
- PDP-11 - Wikipedia
- PDP-11 Processor Handbook : プロセッサ詳細や命令セット調査で参照する
- PRP-11 Processor Handbook(PDF): twitterで@7shiさんに教えていただき追記