xv6
github.com http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf ブートプロセスを理解するために、xv6のテキスト: Appendix-B "The Boot Loader"の章を翻訳した。 日本語のクオリティとしてはダメダメだが、何とか理解できるレベルかな? まあ、自分と…
いろいろ調べたが、以下をしっかり読み直すと参考になる。 MIPSプロセッサ入門―アーキテクチャの解説から評価ボードを使った組み込みプログラミング事例まで (TECH I Processor)作者: インターフェース編集部出版社/メーカー: CQ出版発売日: 2008/06メディア…
bootmain.cに入ると、ディスクからデータのロードを始める。 github.com ここで注目すべきは、カーネルのプログラムとしては、テキストは0x80100000から始まることを想定していることだ。 だがこんな場所にメモリは存在しておらず、ページングを利用して0x00…
xv6のブートプロセスが難しくて詰まっている。いろいろググっていると、何だ。xv6のテキストにちゃんと書いてあるじゃないか。 という訳で、翻訳ついでに、翻訳中である(笑)。 http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf github.com 1. 最…
github.com ビルドプロセスの中に、mkfsによりファイルシステムfs.imgを作る工程がある。 ./mkfs fs.img README _cat _echo _forktest _grep _init _kill _ln _ls _mkdir _rm _sh _stressfs _usertests _wc _zombie fs.imgはどのような仕組みで作られている…
さて、次はbootasm.S とbootmain.cの勉強だ。 ※ この記事はまだ勉強中のため、いろいろ間違いがあるかもしれません。 http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf http://pdos.csail.mit.edu/6.828/2014/xv6/xv6-rev8.pdf github.com # Physica…
mipsに移植中のxv6のカーネルパニックですっかり止まってしまった、xv6とOSの勉強。とりあえずブートしないと話にならないので、ブートプロセスを必死に勉強中だ。 まずは、xv6を使って、何が起きているのかを調査してみることにする。 ※ この記事はまだ勉強…
xv6のブートプロセスには、idewait()という関数が入っている。IDEコントローラを監視して、BSYではなくなったら、次に進むようになっている。 IDEのコントローラの詳細については、以下を参照した。もちろん、これがMIPSのアーキテクチャと異っていることは1…
UARTのモジュールを追加して、xv6の実行時の動作を観察できるようにしよう。 xv6のスタートアップルーチンを見てみると、UARTの初期化をしている。 さらに、uart.cを見てみると、Intel 8250というUARTのモジュールを想定していることが分かった。 mit-pdos/x…
xv6の起動方法を追い掛ける - FPGA開発日記msyksphinz.hatenablog.com 前の記事ではあまりにも中身が無かったが、今回も作業ログで中身が無い。 xv6のコンパイル結果のバイナリ 調べてみると、xv6でコンパイルしたコードの中で、オブジェクトとして残ってい…
土日は出勤だったため、集中して勉強することが出来なかった... xv6を勉強していきたくて、ひととおりテキストは読み込んだものの、実際のコードはどこから手を付けていいのか分からない。 まずは、xv6の動作の仕組みを分かるところから探っていこう。 make …
6月に、xv6のテキストを翻訳して、ある程度の知識を手に入れたが、まだまだマスターしたとはいい難い。 そこで、せっかくシミュレータも作ったし、xv6をx86以外のアーキテクチャに移植して、xv6の構造を勉強してみることにしよう。 対象としては、RISC-V、MI…
http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf xv6の教科書を勉強するために、まずは翻訳をしてみた。 所要時間は会社から帰ってから1時間くらい。まだ途中な部分がたくさんあるけど、とりあえず公開してみます。 翻訳の間違いがまだ多々あるのだ…
ロギングといのは、ディスクへのアクセス中にクラッシュが発生しても回復するための構成。 多くのファイルシステムの操作では、ディスクへの複数回の書き込みが発生し、クラッシュは、ある一部分の書き込みがファイルシステム上のディスクに対して実行された…
xv6の教科書も第6章に入ってきた。次はファイルシステムについてだ。 xv6のファイルシステムは、以下のようなレイヤを取っている。 ディスクレイヤは、IDEハードドライブのブロックを読み書きする。 バッファキャッシュレイヤはディスクブロックをキャッシュ…
sleepとwakeupの例として、生産者/消費者モデルが紹介されている。 生産者 : キューにデータを書き込んでいく。一定数までキューにデータを書き込むとスリープする。 消費者 : キューからデータを読み込む。キューが空になるまで読み込むとスリープする。 こ…
6.828 / Fall 2014 ロックを獲得しているときに問題となるものとして、ロック最中に割り込みが発生したときについての説明だ。 ロックを獲得している最中に割り込みが発生して、その割り込みルーチンが同じロックを獲得しようとしていると、デッドロックにな…
6.828 / Fall 2014 複数のロックを獲得するときの注意事項として、ロックは別のプロセスであっても同じ順番で獲得しなければならない、というのがある。これについて説明がなされている。 プロセスAがロック1→ロック2の順番で獲得する プロセスBがロック2→ロ…
http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf 第4章では、ロックについての説明がなされている。ロックをどのように実装するかということについて、モデルとしては、 21 void 22 acquire(struct spinlock *lk) 23 { 24 for(;;) { 25 if(!lk->loc…
6.828 / Fall 2014 この章から、ロックの説明に入る。まずは、ロックが必要なのかという説明から。こんなものMITの学生にしてみれば全く常識的な話だとは思うが、一応説明されている。 struct list { int data; struct list *next; }; struct list *list = 0…
システムコールを呼び出すには、syscall()を呼び出すのだが、xv6ではどのような方法を取っているのだろうか。 void syscall(void) { int num; num = proc−>tf−>eax; if(num > 0 && num < NELEM(syscalls) && syscalls[num]) { proc−>tf−>eax = syscalls[num]…
http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf トラップを処理するのも大変だなー。 xv6ではperlを使って、ベクタテーブルを作っているみたいだ。まあそこは問題じゃなくて、trapが発生すると、それを処理するためにまずalltrapsというルーチンに…
第3章の先頭では、割り込みの仕組みについていろいろと書いてある。x86では、トラップとは呼ばずに、割り込み(interrupt)と呼ぶのが正解のようだ。 割り込みの仕組みによって、プロセスの切り替えを発生させたり、システムコールを発生させてカーネルにサー…
そもそも、僕はx86のページテーブルの構造が分かってねえや(笑)。 まずはいろいろ調べてみよう。 0から作るOS開発 ページングその1 ページとPTEとPDEsoftwaretechnique.jp 仮想メモリ方式の分類 Intelのx86では、セグメント方式とページング方式を同時に…
OSの実装の勉強をするために、MITの開発したxv6のソースコードを読みながら、勉強していくことにした。 OSのソースコードリーディングと言えば、前にこれを読んだばかりだ。 はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Desig…