xv6のコンテキストスイッチを読む

第2回APASEC+第2期サイボウズ・ラボユース合同勉強会の発表資料です.


xv6はMITで開発された教育用OSで,UNIX V6をもとにx86向けに書き直されています.主な特徴として,
マルチプロセッサに対応
・バイナリがELF
・スワッピング機能などUNIX V6にある一部機能がない
・qeum+gdbで動作可
が挙げられます.内容が非常に洗練されていて実質的なコードは8000行程度です.かなり読みやすいのではないかなと思います.
講義資料も公開されています(2012年度版): http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf


上のスライドはxv6のコンテキストスイッチ部を説明したものです.x86コンテキストスイッチを理解するためにはx86の機構を知る必要がありますが,その辺の説明は省略してあるので,詳しいことははじめて読む486なんかを参考にするといんじゃないかと思います.


補足をしておくと,スライドでは例としてCPU時間切れでタイマ割り込みによってコンテキストスイッチが発生するとしていますが,実際にはI/O待ちやsleep()などの要因でコンテキストスイッチが発生することが多いと思います.


xv6で特徴的だなと思うのはマルチプロセッサのサポートがされている点です.複数のCPUで競合しないように注意深くロックを使用したプログラミングがされています.


まだ全体としては一部しか読めてないのでもう少し読み進めていきたいと思います.