テキストの18〜19ページ
それぞれのプロセスにそのプロセス専用のメモリの見え方(アドレス空間と呼ばれる)を提供するために、xv6はページングハードウェアを使用する。
プロセスごとに個別に、プロセスのアドレス空間を定義するページテーブルを、xv6は維持する。
アドレス空間は、プロセスの仮想アドレス0から始まるユーザメモリを含む。
アドレス空間の中で、通常、命令は先頭にあり、次にグローバル変数とヒープ領域(mallocとかで使う)がある。
プロセスは、必要に応じてそのアドレス空間を広げる事ができる。
どのプロセスのアドレス空間も、ユーザのプログラムのメモリと同じように、カーネルの命令とデータを対応付ける。
システムコールによってプロセスが呼び出されたとき、そのシステムコールは、プロセスのアドレス空間のカーネルマッピングの中で実行される。(ちょっと意味が分からない。)
この決まりごとは、カーネルのシステムコールのコードが直接ユーザのメモリを参照出来るようにするために、存在する。
ユーザのメモリを展開する余地を残すために、xv6のアドレス空間は、0x80100000から始まる高いアドレスにカーネルを対応付ける。
正直かなりあやふやです。
ただここはまだ概要で、次から詳細に入って行くので、そこで多分理解出来るんじゃなかろうかと思ってます。
現時点では、プロセスごとの仮想的なメモリ空間はかなり広く、その空間のはじめの方からプログラムの命令やデータが置かれ、後ろの方にカーネルの命令やデータが置かれるんだと思ってます。
(32ビットなので4GB。ただし0x80100000以降はカーネルが置かれるので実質約2GBぐらいしか使えない?)
なんでそうなってるのか(特にカーネル部分まで含む理由)はまだ分かりません。
ただプロセスごとにカーネルのデータを持つのは非効率なので、物理メモリ上でカーネルが載ってる同じ部分を指すようになってるんだと想像します。
さてこの想像(予想)は当たるか外れるか…。
最近のコメント
名前
しゅごい
Jane Doe
FYI Avoid Annoying Unexpe…
Jane Doe
ご存じとは思いますが、whileには、”~の間”と…
peta_okechan
針金みたいなパーツを引っ張ると外れます。 他の方の…
虎徹ファン交換
虎徹の標準ファンを外す際に、どのようにして外されま…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…