テキストの18〜19ページ
それぞれのプロセスにそのプロセス専用のメモリの見え方(アドレス空間と呼ばれる)を提供するために、xv6はページングハードウェアを使用する。
プロセスごとに個別に、プロセスのアドレス空間を定義するページテーブルを、xv6は維持する。
アドレス空間は、プロセスの仮想アドレス0から始まるユーザメモリを含む。
アドレス空間の中で、通常、命令は先頭にあり、次にグローバル変数とヒープ領域(mallocとかで使う)がある。
プロセスは、必要に応じてそのアドレス空間を広げる事ができる。
どのプロセスのアドレス空間も、ユーザのプログラムのメモリと同じように、カーネルの命令とデータを対応付ける。
システムコールによってプロセスが呼び出されたとき、そのシステムコールは、プロセスのアドレス空間のカーネルマッピングの中で実行される。(ちょっと意味が分からない。)
この決まりごとは、カーネルのシステムコールのコードが直接ユーザのメモリを参照出来るようにするために、存在する。
ユーザのメモリを展開する余地を残すために、xv6のアドレス空間は、0x80100000から始まる高いアドレスにカーネルを対応付ける。
正直かなりあやふやです。
ただここはまだ概要で、次から詳細に入って行くので、そこで多分理解出来るんじゃなかろうかと思ってます。
現時点では、プロセスごとの仮想的なメモリ空間はかなり広く、その空間のはじめの方からプログラムの命令やデータが置かれ、後ろの方にカーネルの命令やデータが置かれるんだと思ってます。
(32ビットなので4GB。ただし0x80100000以降はカーネルが置かれるので実質約2GBぐらいしか使えない?)
なんでそうなってるのか(特にカーネル部分まで含む理由)はまだ分かりません。
ただプロセスごとにカーネルのデータを持つのは非効率なので、物理メモリ上でカーネルが載ってる同じ部分を指すようになってるんだと想像します。
さてこの想像(予想)は当たるか外れるか…。
最近のコメント
minno
今更ながら先月Ryzen7 1700を購入し や…
774
Fedexアカウント取得後にオンラインで手続きすれ…
NET
こういうのずっと見てしまう気持ちがよくわかります(…
BINGE
ブログを拝見させていただきました・・・。以下、ネッ…
BINGE
ネットを放浪していましたら、みつけました、玄人(ク…
マルチディスプレイ時のDisplayPort問題を何とかしてみた – 日曜研究室
[…] 私の場合、GeForce RTX 2080 FEからJN-IPS320…
マルチディスプレイ時のDisplayPort問題を何とかしてみた – 日曜研究室
[…] 私の場合、GeForce RTX 2080 FEからJN-IPS320…
cube iwork 8をシングルブート化したよ。Windows10化したら結構いいかも | アロエのおうち
[…] Chuwi Hi8 ProをWindowsシングルブート化してみた(日…
IPBKYMERWH と HV-KB390L – 日曜研究室
[…] りの話は以前書きました) […]
バイトニックソートの可視化 – 日曜研究室
[…] 昔バイトニックソートについて書いた記事を読んでたところ、「そうだ、可視…