Open11

Writing an OS in Rustを読んでの気がつき

ガラスボーガラスボー

build-stdを使うと標準ライブラリを必要に応じてコンパイルしてくれる。通常はプレコンパイルされたものを使うが、このチュートリアルでは独自のターゲットを自作しているため、自分でコンパイルする必要がある
https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-std

ガラスボーガラスボー

Testingの章をやっていたらこれにぶち当たった
https://github.com/rust-lang/cargo/issues/7359

profile.dev.panic = abortをしてbuild-stdを有効にするとなぜかcoreライブラリが2回コンパイルされるっぽくて、コンパイルが通らない

ガラスボーガラスボー

原文の方を読みすすめていたのだけど、日本語訳には訳注として説明されていた。原文でも説明してくれ!!!

ガラスボーガラスボー

このドキュメントはx86_64を前提につくられている。
Intel SDMではIntel 64アーキテクチャにおけるIA-32eモードのサブモードの一つである64-bitモードというものに等しい…のかな?
Vol.1 3.1.1に概要がある

IA-32eでは仕様が大きく変わっている部分も多々あるので、SDMを読む時はIA-32eにおけるものなのか、それ以外のものについてなのかに注意しながら読まなければならない

ガラスボーガラスボー

Recursive Page Tablesはページテーブル構造体そのものへのページテーブルエントリをつくるのがだるいよね、っていうことでエントリの末尾を先頭アドレスを指すようにして、簡単にページテーブルへの仮想アドレスをつくる、という方法。
日本語記事があった。
https://qiita.com/mopp/items/82bef23d0470de21b5d3

なお、このブログでは適当にオフセット足しただけのマッピングを使っているので、これを理解する必要は実はない

ガラスボーガラスボー

そもそもこの方式がいいかというと怪しい。現実の著名なOSで使われているわけではないし、ググって真っ先に出てくるのがCreating recursive page tables is bad ideaという記事が現れたり…
https://news.ycombinator.com/item?id=19017995

具体的には末尾のインデックスが専有されてしまうので、大きい連続した仮想アドレスを確保できない