昨日に引き続き第3章 boot loader。なんとか今日こそ起動したい。
昨日見たブログの次の章を読んでいく。
https://os.phil-opp.com/ja/minimal-rust-kernel/
しかしながら、私達のターゲットシステムには、いくつか特殊な設定パラメータが必要になります(例えば、その下ではOSが走っていない、など)。なので、既存のtarget tripleはどれも当てはまりません。ありがたいことに、RustではJSONファイルを使って独自のターゲットを定義できます。
サンプルにあったJSONはカスタムターゲットの設定ファイルだった。どうりでtarget tripleに無いはずだ。
kernelにも同じJSONを配置して試してみる。
そもそもELFの知識が足りな気がするので、ブログと自作OS本を読み進める。
カスタムターゲットの指定方法がわからなかったんだけど、--target
オプションに規定のtarget tripleではなく、JSONファイル名(おそらくパス)を設定すれば良いらしい。
cargo build --target x86_64-none-elf.json --package kernel --bin kernel
あんまり関係ないけど、SIMDのデメリットが載ってて参考になった。Apache ArrowとかSIMDちょっと興味あったので。
しかし、大きなSIMDレジスタをOSカーネルで使うことは性能上の問題に繋がります。 その理由は、カーネルは、割り込まれたプログラムを再開する前に、すべてのレジスタを元に戻さないといけないためです。これは、カーネルがSIMDの状態のすべてを、システムコールやハードウェア割り込みがあるたびにメインメモリに保存しないといけないということを意味します。
話はkernelに戻って、やっとcore見つからないエラーが出たので、ブログの通りbuild-std設定を入れて進める。
ブログだとUEFIについて描いてないし、ELFじゃないので、ここを自作OS本と合わせる必要がありそう。
Top comments (0)