4

私はこの声明について混乱しています:

http://web.stanford.edu/class/cs140/projects/pintos/pintos_4.html#SEC63から:

Pintos では、すべてのユーザー仮想ページがそのカーネル仮想ページにエイリアスされます。

カーネルはユーザー仮想アドレスを使用してユーザーページを参照でき、その上にカーネル仮想アドレスがあると思いました。たとえば、下の画像では、VAS 全体が 0 ~ 4GB であり、ユーザーの仮想アドレス空間は PHYS_BASE より下のアドレスに制限され、カーネルはそれより上のアドレスにもアクセスできるのではないでしょうか?

仮想メモリ マップ
( http://web.stanford.edu/class/cs140/cgi-bin/section/10sp-proj3.pdfより)

ただし、PintOS のドキュメントが続いているため、これはどのように機能するようには見えません。

これらのエイリアスは何らかの方法で管理する必要があります。たとえば、コードで両方のアドレスのアクセス ビットとダーティ ビットをチェックして更新できます。別の方法として、カーネルは、ユーザー仮想アドレスを介してのみユーザー データにアクセスすることで、問題を回避することができます。

これは、カーネルが別のカーネル仮想アドレスを介してユーザー データにアクセスできることを意味します。2 つのアドレスが異なる理由はわかりません。

明確にしていただきありがとうございます。

4

1 に答える 1

2

ページにアクセスするには、現在の仮想アドレス空間にマップする必要があります。

したがって、カーネルがユーザーページにアクセスしたい場合、2 つの解決策があります。

  • 現在のアドレス空間であるカーネルのアドレス空間にページをマップし、2 つのページ テーブル エントリが一貫性を保つようにします (厳密に一貫性を保つ必要はありませんが、一貫性を保つ必要があります)
  • そのページが既にマップされているアドレス空間、ユーザー自身のアドレス空間に切り替えます

カーネルはオプション 1 を選択しているようです。これはパフォーマンスにとって良いことです。別のアドレス空間に切り替えて戻るには、かなりの時間がかかります。代わりにオプション 2 を選択し、ユーザー ページにアクセスするたびにユーザーのアドレス空間に切り替えることができます。これにより、簿記を回避することでコードが単純になる可能性がありますが、非常に遅くなります。

于 2015-01-07T11:48:19.187 に答える