はじめてのOSコードリーディング #1 ことはじめ

UNIXカーネルなどの低レイヤなところに詳しくなりたい。 ずっとそんなことを思っていたので、「はじめてのOSコードリーディング」で勉強を始めた。

はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)
はじめての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を構成するプロセッサ。資料へのリンクを貼っておく。