Writing an OS in Rustを読んでの気がつき
Rustで自作OSするためのバイブルといっても過言ではないWriting an OS in Rustを読んで気がついたことをメモする
一部日本語訳が追加されているけど、5章の例外のところからはまだっぽいのでコントリビューションチャンスですね
build-stdを使うと標準ライブラリを必要に応じてコンパイルしてくれる。通常はプレコンパイルされたものを使うが、このチュートリアルでは独自のターゲットを自作しているため、自分でコンパイルする必要がある
build-std-featuresでビルド時のオプションも指定できる。
volatileクレートはいいかもしれない。
今までvcellクレートやvolatile_registerクレートにたよってきたが、こっちを使ったほうがシンプルかも?
Testingの章をやっていたらこれにぶち当たった
profile.dev.panic = abort
をしてbuild-std
を有効にするとなぜかcoreライブラリが2回コンパイルされるっぽくて、コンパイルが通らない
原文の方を読みすすめていたのだけど、日本語訳には訳注として説明されていた。原文でも説明してくれ!!!
extern "x86-interrupt"
はまだexperimental
このドキュメントはx86_64を前提につくられている。
Intel SDMではIntel 64アーキテクチャにおけるIA-32eモードのサブモードの一つである64-bitモードというものに等しい…のかな?
Vol.1 3.1.1に概要がある
IA-32eでは仕様が大きく変わっている部分も多々あるので、SDMを読む時はIA-32eにおけるものなのか、それ以外のものについてなのかに注意しながら読まなければならない
Recursive Page Tablesはページテーブル構造体そのものへのページテーブルエントリをつくるのがだるいよね、っていうことでエントリの末尾を先頭アドレスを指すようにして、簡単にページテーブルへの仮想アドレスをつくる、という方法。
日本語記事があった。
なお、このブログでは適当にオフセット足しただけのマッピングを使っているので、これを理解する必要は実はない
そもそもこの方式がいいかというと怪しい。現実の著名なOSで使われているわけではないし、ググって真っ先に出てくるのがCreating recursive page tables is bad ideaという記事が現れたり…
具体的には末尾のインデックスが専有されてしまうので、大きい連続した仮想アドレスを確保できない