0

付属書の32 ページに次のように書かれています。

ブートストラップの問題があります。アロケータが空きリストを初期化するには、すべての物理メモリをマップする必要がありますが、これらのマッピングを使用してページ テーブルを作成するには、ページ テーブル ページを割り当てる必要があります。

理由がわかりません。rangeの場合[end,PHYSTOP)のように、カーネルが からすべての 4K ページを埋めないのはなぜですか?struct run[end,4M)

すべての物理メモリが既にマップされている必要があるのはなぜですか?

4

1 に答える 1

2

[end, PHYSTOP)まず、 4K ではなく、より多くのページがあります。

さて、質問です(私が正しく理解していれば)。

xv6 を起動するときentrypgdir、[0, 4MB) のみをマップする有効なページ ディレクトリとして使用します。これらは、アクセスできる唯一のアドレスです。したがって、これらのページのみを でマッピングできますfreerange()

kinit1()カーネル コードの終了後に最初の 4MB を割り当てる の直後に、新しいページ ディレクトリを割り当てます ( ) kpgdir。このページ ディレクトリは、すべてのメモリをマッピングしているため、メモリ内のさらに奥にアクセスできます (「参考文献」を参照setupkvm())。

于 2015-07-01T20:30:05.900 に答える