- Linux カーネルは3,600万行の巨大なオープンソースだが、最初のバージョンは 10239 行だった(コメント・空行を除くと 8670)
- Linux v0.01 はその簡潔さゆえに、Unix スタイル OS カーネルの内部を学ぶための良い出発点
- v0.01 には 66 個のシステムコールしかない
- ファイル/ディレクトリの作成、削除、書き込み
- chmod, chown, pipe, fork, execve
- Socket の概念が導入されていないため、ネットワークをサポートしない
- mount はまだ実装されていない
- Intel 386 アーキテクチャ向けにハードコードされている(MINIX の作者がこれを批判した)
- strcpy が i386 命令を使ったアセンブリで書かれている
- PC/AT 機器のみをサポート
- CMOS, PIT(Programmable Interval Timer), ATA(PIO), VGA(テキストモード), Intel 8042 PS2 キーボード(アセンブリ)
- まだ drivers フォルダもなく、サブシステムにハードコードされている
- Linus が元々付けていた名前である "FREAX" Kernel と書かれたコメントが Makefile にある
- ファイルシステムは MINIX のみをサポート(ext は MINIX に着想を得た)
- スケジューラのコードに「この部分はあらゆる環境で動作するかなり良いコードなので、変更する理由はないはず!」というコメントがある
- もちろん現在ではさまざまな改善やアルゴリズムが導入されて修正されているため、この予言は外れた
- カーネルパニックの実装部はわずか 5 行: "カーネルパニック: 原因" を出力し、
for(;;) でシステムを停止
- カーネル空間で fork(2) を呼び出している箇所がある
- そう見えるが、実際にはその前にある move_to_user_mode() がトリック
- Linus は 8Mb を超える RAM を搭載した機器を持っていなかった(自分は持っておらずテストしていないので、持っている人がうまくやってほしいと…)
- 現代のツールチェーンではコンパイルが難しい
- GCC は下位互換性があるとはいえ、それだけでは十分ではない
- Linus には
-mstring-insns というオプションを持つ独自の GCC があった(おそらく x86 の文字列命令をサポートするオプションのようだ)
2件のコメント
興味深いですね
Hacker Newsのコメント
counterの動作についての説明があり、タスクが実行可能でない場合は 2 * 優先度 まで指数的に減少するという主張がある。