5

Linux x86 ページング。

  1. 各プロセスには独自のページ ディレクトリがあります。

  2. ページ テーブル ウォーキングは、CR3 が指すページ ディレクトリから開始します。

  3. すべてのプロセスは、カーネル ページ ディレクトリの内容を共有します

3 つの文が正しいと仮定すると、あるプロセスがカーネル モードに入り、カーネル ページ ディレクトリの内容 (アドレス マッピング、アクセス権など) を更新するとします。

質問。カーネル アドレス空間はプロセス間でグローバルに共有されるため、この更新は他のプロセスのページ ディレクトリと同期する必要がありますよね?

これはどのように管理できますか?

4

3 に答える 3

0

カーネルがページ テーブル エントリを変更する場合、これらの更新はアトミックに行う必要があります。

64 ビット カーネルでは、これは 64 ビット メモリ操作を使用して簡単に実行できますが、i386 では CMPXCHG8 を使用する必要があります。

ソース

于 2014-11-04T07:47:10.733 に答える