お馴染み (といってオイラは参加するの二回目だけど) id:hyoshiok さん主催のカーネル読書会。
今回はブートローダ GRUB の開発者奥地さんのお話。
資料は YLUG の資料ページ に上がってるので見よう。
あ、奥地さんのプレゼンの前に FixStars さんから Cell/B.E. (ご存知のとおり、PowerPC ベースの PS3 の CPU です) の話とかあったんだけど、オイラ的にはイマイチ興味外だったので省略。でもいくらなんでも Qosmio に積むのはやりすぎじゃないですか? 東芝さん。
内容詳細?
手元のメモから。
ブートローダから OS へ
# 小ネタ:ディスクの数を知る BIOS コールは(なぜか)存在しない
- Intel の執念の (笑) 互換性維持のため、x86 系 CPU は必ずリアルモードで起動する
- ちなみにリアルモードとは「アドレス空間が仮想化されてない」って意味で ”Real” なんだそうな
- ただし 32bit レジスタの上位ビットも使える (遅くてオペコード長いけど)。
- Gate A20 問題
- A20 とはむろんアドレスライン 20 のこと。
- デフォルトでは Disable になっている
- ので、1MB ごとにアドレスがラップしてしまう
- しかし標準的 PC アーキテクチャではまともな方法で Enable にする方法がない
- PC 系の起動シーケンス '資料の8ページ見てもらえば早いんだけど)
- まてまて?「最初のディスク」って?
- MBR のユーウツ
- GRUB の歴史……は (資料 p.14) を見ればいいんで省略
- GRUB の構造
- さすがにブログで書く内容ではなくなってきたので省略。
- 簡単に言えば、ディスクの1シリンダ目 (63 セクタ) は OS は使わないということを利用して、
- まずは割り込みを Disable にして (チェーンローダで割り込み Enable にするタコがいるから)
- A20 ラインを Enable にして (まずは BIOS → ダメなら KBD。SysCon は怖いので使わない)
- CS:IP がぐちゃぐちゃになってるときがあるので 0000:7C00 に Jump してきれいにして
- スタックも掃除して (ここまで他人の後始末)
- 次のセクタを読んで
- 起動
- 次のセクタには圧縮伸長ルーチンなど基本的なコードが入ってる。
- それと圧縮されたいろいろな基本サービスが。
- まずは圧縮を解いてメモリへ展開し、そこにジャンプ
- そうするとファイルシステムにアクセスできるようになるので、ファイルシステムの定義ファイルをよんでごにょごにょ。
OS からブートローダーへ
- 一言で言えば「Linux はダメ OS」。
- Linux のブートシーケンスは The Linux Boot Protocol by H. Peter Anvin (hpa) に書かれている。
- これは奥地さんのアピールでやっとかかれたドキュメント。
- でも hpa はどうやら GRUB が好きじゃないらしい。Too big だからって。
雑駁な感想
ローレベル (ハードウェアに近いという意味ね) 過ぎてオイラのへっぽこ脳みそではついていけないかと思ったけど、かなり面白かったよ。
ローレベルにはローレベルの技術があってさ、それは例えば、すごい新しいファイルシステムを作るとか、エレガントなLLの仕様をつくるとか、そういう行為に匹敵するすごい仕事なんだなって改めて思った。
その後のビアバッシュも面白かったし、さらに2次会(あれ、3次会になるのかな?)の奥地さんの壊れ方も面白かった ;ー)
Linux カーネルにワクチン用の入り口をつくろうとか言う議論の話もちょっと面白かったな。
今だとワクチンソフト自身がカーネルのシステムコールフックするとか言うウィルスっぽいことやってる。それは ugly なのでカーネルにサービス入れてくれと。そしたら当然、そのサービス悪用してウィルス作るやつって出るんじゃね? と。そもそもお前らが使ってるウィルスパターンに Linux のウィルスなんかあるのかと。一個もないだろと。そんなののためにサービスなんか作れるかボケ、みたいな議論があったとかなかったとか。酒の席なので覚えていない。
Printing みたいに関わってる人間が少ないコミュニティと違って、カーネルコミュニティはいろんな議論があって大変なんだろなーと。
最後に。
奥地さん、1時間枠に2時間オーバーはしゃべりすぎです (笑)