テキストの22ページ
カーネルは、ページテーブル・ユーザメモリの処理・カーネルのスタックやパイプやバッファのために、実行時に物理メモリを割り当てたり解放したりする必要がある。
xv6は、その実行時割り当てにカーネルの終わりからPHYSTOPの間の物理メモリを利用する。
割り当てと解放は、4096バイトごとに行われる。
ページそれ自身をリンクリストに追加することで、どのページが空いてるかを記録する。
(ここかなり訳があやふや。原文: It keeps track of which pages are free by threading a linked list through the pages themselves.)
割り当ては、リンクリストからページの消去を行う。
解放は、そのリストに解放されたページの追加を行う。
起動中の問題がある。
物理メモリの全ては、アロケータのための空きリスト(前段のリンクリストの事)を初期化するためマップされていなければならない。
しかし、そのマッピングを使ってページテーブルを作成すると、ページテーブル用のページの割り当てを巻き込むことになる。
xv6はこの問題を、起動の間、カーネルのデータセグメントのちょうど終わりから割り当てるような、別のページアロケータを使うことによって解決している。
このアロケータは、解放をサポートせず、entrypgdirの4MBマッピングに制限される。
しかし、これは最初のカーネルのページテーブルを割り当てるのに十分である。
実行時はどのページが空いてるかをリンクリストで管理するようです。
アロケータのために空きリストを用意しなきゃいけないのに、その空きリストのための領域をアロケータで割り当てようとすると、要はニワトリが先かタマゴが先かみたいな話になってしまうってことですかね。
だから先に、簡易的なアロケータを使って解決しましたよってことでしょうか。
(entrypgdirは前々々回が出てきましたね。)
正直ピンとこないですが、次のCode: Physical memory allocatorを読めば理解が深まることを期待。
最近のコメント
名前
しゅごい
Jane Doe
FYI Avoid Annoying Unexpe…
Jane Doe
ご存じとは思いますが、whileには、”~の間”と…
peta_okechan
針金みたいなパーツを引っ張ると外れます。 他の方の…
虎徹ファン交換
虎徹の標準ファンを外す際に、どのようにして外されま…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…