冬休みが尽きそうなのに, 睡眠時間が削られていて全然休んでいないので, とりあえず一気に進めるのはここまでにする.
二週間で16章まで, まぁ言語を変えたにしてはそこそこ進んだのではないだろうか.
ここまでの感想として,
- コンテキストスイッチはもっと大変だと勝手に想像していたけれど意外に簡単で面白かった.
- 割り込みというもの, 存在は知っていてもローレベルなものを陽に使ったことは(ターミナルで
SIGINT
を使ったり,SIGUSR1
を受け取った時にデバッグ出力をする関数をスクリプト言語で書いたことはあっても)無かったので, 「存在はと効果はなんとなく知っているけれどよく知らない」ものだったが, 少しは知れた. - Rust で書いたのはかなりよかった.
no_std
や非alloc
については, 「対応はしているが, それがstd
環境のように気軽に使えるものではない」という, あたりまえの感想. 特に, crate が少ないのが辛い. - OS のレイヤーには, 特に高速で Wait-free なデータ構造, もしくは Lock-free, いやせめて Obfuscation-free なものが求められている気がした. いや残念ながらそんなものは無いんですが.
- lock を取った箇所もかなり(static mut のため)あるが, グローバルなものを弄らないときはなるべく Obstruction-free になるよう書いた. いや結局 malloc/free なんかで lock 取ったりするのでアレなんだけれど, lock を取る所はなるべく小さくし, interruption を切ることによって, 現実的には atomic な操作にしている.
この後も, 興味がある章がいくつかあるので, 暇を見つけてやっていったりやっていかなかったりしたい.
この本を読み始めた動機としては, Nand2Tetris をやって
その一部として "OS" を実装するのだが, 確かにハードウェアである screen や keyboard とプログラムの橋渡しをするという意味では OS と呼んでよいのだろうが, 違和感が拭えなかったし, "OS を作りました" と主張できる気はしなかったのが心残りであった.
という感想があったからだ. 今回は, 本を終わらせては居ないけれど, まぁ OS と呼んでよいものが, いや機能はだいぶ足りていないのだが, 出来た気がする.