FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

xv6

xv6のテキストAppendix-B "The Boot Loader" を翻訳しました

xv6

github.com http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf ブートプロセスを理解するために、xv6のテキスト: Appendix-B "The Boot Loader"の章を翻訳した。 日本語のクオリティとしてはダメダメだが、何とか理解できるレベルかな? まあ、自分と…

MIPSのブートプロセスについての勉強(YAMONについて勉強)

xv6

いろいろ調べたが、以下をしっかり読み直すと参考になる。 MIPSプロセッサ入門―アーキテクチャの解説から評価ボードを使った組み込みプログラミング事例まで (TECH I Processor)作者: インターフェース編集部出版社/メーカー: CQ出版発売日: 2008/06メディア…

テキストを読んで、xv6のブートプロセスを理解する(2)

xv6

bootmain.cに入ると、ディスクからデータのロードを始める。 github.com ここで注目すべきは、カーネルのプログラムとしては、テキストは0x80100000から始まることを想定していることだ。 だがこんな場所にメモリは存在しておらず、ページングを利用して0x00…

テキストを読んで、xv6のブートプロセスを理解する(1)

xv6

xv6のブートプロセスが難しくて詰まっている。いろいろググっていると、何だ。xv6のテキストにちゃんと書いてあるじゃないか。 という訳で、翻訳ついでに、翻訳中である(笑)。 http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf github.com 1. 最…

mkfs.cによりファイルシステムが作られる仕組み(まだ勉強中3)

xv6

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はどのような仕組みで作られている…

xv6のブートプロセスで学ぶコンピュータの起動(まだ勉強中2)

xv6

さて、次は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…

xv6のブートプロセスで学ぶコンピュータの起動(まだ勉強中)

xv6

mipsに移植中のxv6のカーネルパニックですっかり止まってしまった、xv6とOSの勉強。とりあえずブートしないと話にならないので、ブートプロセスを必死に勉強中だ。 まずは、xv6を使って、何が起きているのかを調査してみることにする。 ※ この記事はまだ勉強…

ISSにIDEコントローラを組込む

xv6

xv6のブートプロセスには、idewait()という関数が入っている。IDEコントローラを監視して、BSYではなくなったら、次に進むようになっている。 IDEのコントローラの詳細については、以下を参照した。もちろん、これがMIPSのアーキテクチャと異っていることは1…

ISSにUARTのモジュールを追加する

xv6

UARTのモジュールを追加して、xv6の実行時の動作を観察できるようにしよう。 xv6のスタートアップルーチンを見てみると、UARTの初期化をしている。 さらに、uart.cを見てみると、Intel 8250というUARTのモジュールを想定していることが分かった。 mit-pdos/x…

xv6の起動プロセスを追い掛けるためのシミュレータの準備

xv6

xv6の起動方法を追い掛ける - FPGA開発日記msyksphinz.hatenablog.com 前の記事ではあまりにも中身が無かったが、今回も作業ログで中身が無い。 xv6のコンパイル結果のバイナリ 調べてみると、xv6でコンパイルしたコードの中で、オブジェクトとして残ってい…

xv6の起動方法を追い掛ける

xv6

土日は出勤だったため、集中して勉強することが出来なかった... xv6を勉強していきたくて、ひととおりテキストは読み込んだものの、実際のコードはどこから手を付けていいのか分からない。 まずは、xv6の動作の仕組みを分かるところから探っていこう。 make …

xv6を試そう(移植のための基礎知識の勉強)

xv6

6月に、xv6のテキストを翻訳して、ある程度の知識を手に入れたが、まだまだマスターしたとはいい難い。 そこで、せっかくシミュレータも作ったし、xv6をx86以外のアーキテクチャに移植して、xv6の構造を勉強してみることにしよう。 対象としては、RISC-V、MI…

xv6の翻訳をしてみた(まだ途中)

xv6

http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf xv6の教科書を勉強するために、まずは翻訳をしてみた。 所要時間は会社から帰ってから1時間くらい。まだ途中な部分がたくさんあるけど、とりあえず公開してみます。 翻訳の間違いがまだ多々あるのだ…

MITのxv6を読もう - 第6章 データのロギング -

xv6

ロギングといのは、ディスクへのアクセス中にクラッシュが発生しても回復するための構成。 多くのファイルシステムの操作では、ディスクへの複数回の書き込みが発生し、クラッシュは、ある一部分の書き込みがファイルシステム上のディスクに対して実行された…

MITのxv6を読もう - 第6章 ファイルシステムの階層構造 -

xv6

xv6の教科書も第6章に入ってきた。次はファイルシステムについてだ。 xv6のファイルシステムは、以下のようなレイヤを取っている。 ディスクレイヤは、IDEハードドライブのブロックを読み書きする。 バッファキャッシュレイヤはディスクブロックをキャッシュ…

MITのxv6を読もう - 生産者/消費者モデルでデッドロックを避ける方法 -

xv6

sleepとwakeupの例として、生産者/消費者モデルが紹介されている。 生産者 : キューにデータを書き込んでいく。一定数までキューにデータを書き込むとスリープする。 消費者 : キューからデータを読み込む。キューが空になるまで読み込むとスリープする。 こ…

MITのxv6を読もう - 第4章 ロック獲得時の割り込み処理(Interrupt handlers) -

xv6

6.828 / Fall 2014 ロックを獲得しているときに問題となるものとして、ロック最中に割り込みが発生したときについての説明だ。 ロックを獲得している最中に割り込みが発生して、その割り込みルーチンが同じロックを獲得しようとしていると、デッドロックにな…

MITのxv6を読もう - 第4章 複数のロックを獲得するときの注意事項 (Lock ordering) -

xv6

6.828 / Fall 2014 複数のロックを獲得するときの注意事項として、ロックは別のプロセスであっても同じ順番で獲得しなければならない、というのがある。これについて説明がなされている。 プロセスAがロック1→ロック2の順番で獲得する プロセスBがロック2→ロ…

MITのxv6を読もう - 第4章 ロック獲得の仕組み -

xv6

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…

MITのxv6を読もう - 第4章 ロックは何故必要なのか -

xv6

6.828 / Fall 2014 この章から、ロックの説明に入る。まずは、ロックが必要なのかという説明から。こんなものMITの学生にしてみれば全く常識的な話だとは思うが、一応説明されている。 struct list { int data; struct list *next; }; struct list *list = 0…

MITのxv6を読もう - 第3章 システムコールの呼び出し方法について -

xv6

システムコールを呼び出すには、syscall()を呼び出すのだが、xv6ではどのような方法を取っているのだろうか。 void syscall(void) { int num; num = proc−>tf−>eax; if(num > 0 && num < NELEM(syscalls) && syscalls[num]) { proc−>tf−>eax = syscalls[num]…

MITのxv6を読もう - 第3章 trapの処理方法 -

xv6

http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf トラップを処理するのも大変だなー。 xv6ではperlを使って、ベクタテーブルを作っているみたいだ。まあそこは問題じゃなくて、trapが発生すると、それを処理するためにまずalltrapsというルーチンに…

MITのxv6を読もう - 第3章 x86の割り込みの仕組みについて -

xv6

第3章の先頭では、割り込みの仕組みについていろいろと書いてある。x86では、トラップとは呼ばずに、割り込み(interrupt)と呼ぶのが正解のようだ。 割り込みの仕組みによって、プロセスの切り替えを発生させたり、システムコールを発生させてカーネルにサー…

MITのxv6を読もう - 第1章 entryはどのような構造? -

xv6

そもそも、僕はx86のページテーブルの構造が分かってねえや(笑)。 まずはいろいろ調べてみよう。 0から作るOS開発 ページングその1 ページとPTEとPDEsoftwaretechnique.jp 仮想メモリ方式の分類 Intelのx86では、セグメント方式とページング方式を同時に…

MITのxv6を読もう (はじめに)

xv6

OSの実装の勉強をするために、MITの開発したxv6のソースコードを読みながら、勉強していくことにした。 OSのソースコードリーディングと言えば、前にこれを読んだばかりだ。 はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Desig…