0

私はWindowsシステムプログラミングを行っていて、ソースコードレベルでプロセスのページテーブルにアクセスできるかどうか疑問に思っていました。プロセスのページテーブルがカーネルアドレス空間にマップされていますか?

ここで私は仮想メモリに関連するページテーブルについて知っています。

ユーザーがWindows OS(32ビット)で 'A'プロセスと呼ばれるプロセスを実行しているとします。

まず、OSは、プロセス用に4GBの仮想アドレス空間を作成し、維持します。

(それは2GBのカーネルアドレス空間であり、他の2ギガバイトのユーザアドレス空間である。

ユーザアドレス空間内の任意のコードが直接カーネルアドレス空間にアクセスすることはできません。)

そして、OSが作成および維持します仮想メモリアドレスを物理メモリアドレスにマッピングするための、物理メモリ内のAプロセス用のページテーブル。

ここは私の質問です。

OSがAプロセスのページテーブルを作成した後、このページテーブルはAのカーネルアドレス空間にマップされているため、ユーザーはソースコードから間接的にページテーブルにアクセスできますか?

ページテーブルがAの仮想アドレススペースのいずれにもマッピングされていませんが、物理メモリ内にのみ存在するため、ユーザーはページテーブルにアクセスできません。

+1

私は、Windowsに関するメモリ実装に関する質問であり、直接的なプログラミング関連ではないので、この質問を議論の対象外としています。 –

+0

@ DanielA.White申し訳ありませんが、プログラミング中にページテーブルにアクセスする方法を見つけようとしていました。私はその投稿を編集して追加しました。 – Joon

+0

この文脈では、「ソースコードレベル」という語句は意味をなさない。あなたが何を求めているのか分かりません。 –

答えて

1

ページテーブルの操作を高速化するために、カーネルは通常、ページディレクトリの1つのエントリをページディレクトリを指します。これにより、すべてのページテーブルがマップされ、アドレス空間でアクセス可能になります。しかし、Raymond Chenが示しているように、これらはユーザモードからはアクセスできません。アプリケーションがページテーブルを混乱させるような理由はありません。アドレス空間の領域を割り当てる(およびマップする)APIがあり、代わりにそれらを使用する必要があります。

「A」プロセスの仮想メモリのカーネルアドレススペースにページテーブルエントリがあり、それらのエントリが物理メモリに存在する実際のページテーブルにマップされていることを意味します。したがって、プロセスはカーネルモードを持っている場合に限り、これらのページテーブルのエントリにアクセスできますが、プロセスはそれを持っていません。したがって、プロセスは結局そのページテーブルにアクセスできません。そうですか?

右。ページのアクセシビリティは、現在の特権レベル(ユーザー対カーネル)、セグメントアクセス権およびページアクセス権によって管理されます。システムで使用されるこれらの特定の組み合わせは、ユーザ・モードで動作するコードがページ・ディレクトリおよびページ・テーブルを含むカーネル・データにアクセスすることを可能にしない。

関連する問題