2015-09-01から1ヶ月間の記事一覧
タイムリーなので。 Otto - HashiCorp 突然ですが僕はかなりのヘビーなVagrantユーザーで、僕の全ての開発環境はVagrant上に構築され、Chefでクロスコンパイル環境も自動的に構築されるようにしている。 いくらWindowsを再インストールしても、githubから自…
※ この記事はまだ勉強中のため、いろいろ間違いがあるかもしれません。 さて、xv6のmainに足を踏み入れると、以下のようなコードが記述されている。 github.com extern char end[]; // first address after kernel loaded from ELF file // Bootstrap proces…
MIPSのブートについて理解するためには、まずはMIPSアーキテクチャのメモリマップについて理解しなければ。 このあたりに、メモリマップの説明がある。 ファイル:MIPS32 MemoryMap.png - Wikipedia これを見ると、0xA000_0000-0xBFFF_FFFF, 0x8000_0000-0x9F…
※ この記事はまだ勉強中のため、いろいろ間違いがあるかもしれません。 xv6のbootmain.cなどのブートローダは、まだセグメントやページテーブルが有効な状態としては利用されない。 実際にOSを動かすとなれば、ページテーブルが必須となるが、これはどのよう…
※ この記事はまだ勉強中のため、いろいろ間違いがあるかもしれません。 xv6のbootmain.cをコンパイルしてブートローダを作ってみたが、何とMIPSのコンパイラではオブジェクトのサイズが1セクタ(512バイト)に入り切らなかった! そこで、今回はアーキテクチャ…
※ この記事はまだ勉強中のため、いろいろ間違いがあるかもしれません。 xv6のブートセクションはx86のものに従っているため、ディスクの先頭のセクションに配置されている。 hexdump xv6.img | less -o xv6.img.dmp 0000000 31fa 8ec0 8ed8 8ec0 e4d0 a864 7…
レジスタのCalling Conventionとは。 呼出規約 - Calling Convention(コーリングコンベンション) レジスタはハードウェア的にはFFの塊だが、ソフトウェアとしては、どのレジスタをどの役割として使うかが決められている。 また、それに応じて、レジスタの名…
CUDA by Example 汎用GPUプログラミング入門作者: Jason Sanders,Edward Kandrot,株式会社クイープ出版社/メーカー: インプレスジャパン発売日: 2011/02/14メディア: 単行本(ソフトカバー)購入: 1人 クリック: 36回この商品を含むブログ (11件) を見る CUD…
OSの勉強の一環として、u-bootがどのようにして動作するのかを見てみることにした。 WebHome < U-Boot < DENX U-bootはOSのブートローダとして、特にマイコンや、マイコンボードなどで利用されているようだ。xv6の勉強をしていると、BIOSからの動作ばかりを…
これまでのISSのデコーダは、命令テーブルを探索していって、一度デコードに失敗すると別のキーは探索しないようになっていた。 uint32_t MIPS_DEC_OPCODE_0x10 (uint32_t inst_hex) { if (ExtractFUNCTField (inst_hex) == 0x00) { return MIPS_DEC_OPCODE_…
仕事ではVerilog-HDLばっかり触っているけど、自宅ではRubyとC++ばかり触っている。 C++11とかC++14とかあまり分かっていないので、買ってみた。まだ中身をちゃんとは読んでいないけど、これで今のISSのC++の記述とか改善できればいいなあ。 Effective Moder…
msyksphinz.hatenablog.com 前に日記に書いた、RISC-Vの名前を含むHotChipsの発表について、mynaviニュースのHisa Andoが記事を起こしていたので、読んでみた。 内容としては、淡々と発表内容を説明している感じだ。 news.mynavi.jp news.mynavi.jp news.myn…
github.com http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf ブートプロセスを理解するために、xv6のテキスト: Appendix-B "The Boot Loader"の章を翻訳した。 日本語のクオリティとしてはダメダメだが、何とか理解できるレベルかな? まあ、自分と…
xv6の勉強をしていて、xv6.imgとか、fs.imgとかがロードできたほうが良いなと思ったので、その機能を追加しておいた。 github.com どうやら、単純にimgファイルは中身を読み取ってそれを転送していくだけで良いみたいだ。 ただし、今はテスト段階のため、512…
ISSに関数呼出のトレースを表示する機能を追加した。 --trace_hier : Generate Trace Hierachy tree --trace_out <log> : output log filename for trace hierarchy mode default is same as --out <filename> --trace_hier オプションを有効化すると、以下のような関数呼出</filename></log>…
いろいろ調べたが、以下をしっかり読み直すと参考になる。 MIPSプロセッサ入門―アーキテクチャの解説から評価ボードを使った組み込みプログラミング事例まで (TECH I Processor)作者: インターフェース編集部出版社/メーカー: CQ出版発売日: 2008/06メディア…
bootmain.cに入ると、ディスクからデータのロードを始める。 github.com ここで注目すべきは、カーネルのプログラムとしては、テキストは0x80100000から始まることを想定していることだ。 だがこんな場所にメモリは存在しておらず、ページングを利用して0x00…
現状のISSだが、やはりxv6をフルにブートしようとすると遅い。デバッグモードを有効にするとさらに遅い。 CPUPROFILE=/tmp/profile.out ~/swimmer_riscv/build_mips/swimmer_mips --imgfile ~/xv6-mips/xv6.img --max 1000000 Swimmer-RISCV Version 2015091…
xv6のブートプロセスが難しくて詰まっている。いろいろググっていると、何だ。xv6のテキストにちゃんと書いてあるじゃないか。 という訳で、翻訳ついでに、翻訳中である(笑)。 http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf github.com 1. 最…
ISSでシステムレジスタをサポートしたので、トレースログに表示できるようにしよう。 github.com 基本的にやっていることはこれと一緒。というか、単純に移植しただけだ。 msyksphinz.hatenablog.com システムレジスタにアクセスすると、そのアクセス情報を…
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はどのような仕組みで作られている…
ISSにブレークポイントの機能があるので、それを拡張して、デバッグをしやすくしよう。 レジスタの一覧をダンプする機能と、任意のレジスタの値を取得する機能を追加した。 int Lua_GetReg (lua_State *L) { // Getting Arguments #ifdef ARCH_MIPS MipsEnv …
さて、次は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…
例えば、swimmer_main.cppでは、Google-gflagsを使って、いくつかのオプションフラグを宣言している。 // FLAGs definition DEFINE_string (hexfile, "", "Hex file to simulate."); DEFINE_string (binfile, "", "Binary file to simulate."); DEFINE_strin…
mipsに移植中のxv6のカーネルパニックですっかり止まってしまった、xv6とOSの勉強。とりあえずブートしないと話にならないので、ブートプロセスを必死に勉強中だ。 まずは、xv6を使って、何が起きているのかを調査してみることにする。 ※ この記事はまだ勉強…
xv6のブートプロセスには、idewait()という関数が入っている。IDEコントローラを監視して、BSYではなくなったら、次に進むようになっている。 IDEのコントローラの詳細については、以下を参照した。もちろん、これがMIPSのアーキテクチャと異っていることは1…
ロジクールのゲミングマウスG602を買いました。会社で使う用。 正確には、会社に自宅のG700sを持っていって、会社から帰るときに持って帰っていたのだけれども、週末にレシーバーを会社から持って帰るのを忘れたことに気がついた次第。 どうせなら、ちゃんと…
CUDA by Example 汎用GPUプログラミング入門作者: Jason Sanders,Edward Kandrot,株式会社クイープ出版社/メーカー: インプレスジャパン発売日: 2011/02/14メディア: 単行本(ソフトカバー)購入: 1人 クリック: 36回この商品を含むブログ (11件) を見る 一…
CUDA by Example 汎用GPUプログラミング入門作者: Jason Sanders,Edward Kandrot,株式会社クイープ出版社/メーカー: インプレスジャパン発売日: 2011/02/14メディア: 単行本(ソフトカバー)購入: 1人 クリック: 36回この商品を含むブログ (11件) を見る 5.2…
GPGPUのデバッグ、プラファイラって無いの?ということでいろいろ探していたのだが、nVIDIAの配布するGPUのSDKにはNsightというツールが入っているらしい。 とりあえずチュートリアルだけ使ってみたので、そのやり方をメモしておく。 Visual Studio 2013 を…