3

1) ユーザー モード プロセスには、ユーザー モードの仮想アドレスを物理ページ フレームの一意のコレクションにマップする独自の「アドレス コンテキスト」があります。つまり、Windows XP スケジューラがスレッドを切り替えると、特定の仮想アドレスの意味が刻々と変化します。

「スレッドの切り替え」の作業の一部は、着信スレッドのプロセス コンテキストを参照するようにページ テーブルを変更することです。

_

2) Windows カーネル モード ドライバーは、「任意のスレッド コンテキスト」で実行されます。

ドライバーはシステム スレッドを作成し、そのコンテキストで動作する可能性があります...しかし、私はシステム スレッドを作成しない状況について話しています。

ドライバーは、"ExAllocatePoolWithTag" を使用して、ページ (揮発性ストレージ内のメモリ) を割り当てることができます。

_

3)では、ドライバーはコンテキストなしでページメモリにどのようにアクセスしますか?

ポイント1に見られるように、ページメモリは「コンテキスト固有」のページテーブルを介してアクセスされます。

ドライバが他のスレッド コンテキストで実行されている場合...つまり、ページ テーブル エントリはスレッドに関連する phy を指しています。mem、では、ドライバーはどのようにしてページングされたメモリにアクセスできますか?

PS: カーネルプログラミング初心者です。怒らないで。

4

2 に答える 2

7

使用される概念は、「ユーザー/カーネル アドレス空間の分割」です。各プロセスのアドレス空間は、プロセスごとに異なる、ユーザー モードのプロセスにアクセス可能な下位部分 (通常は 2 GB) と、カーネル モードでのみアクセス可能な上位部分 (残りのアドレス空間) に分割されます。どの工程も同じ。

ドライバーがページ メモリを割り当てるとき、それはアドレス空間分割のカーネル側に割り当てられるため、その時点でどのプロセス ページ テーブルがロードされていても、カーネル コードから見えるようになります (アドレス空間のこの部分がマップされているため)。すべてのプロセスで同じ方法)。

于 2010-08-04T00:31:20.703 に答える
0

注意すべき主なポイントは、すべてのスレッドが同じカーネル メモリ マッピングを持っていることです。そのため、スレッド間のコンテキスト スイッチは、仮想メモリの上位 2 GB には (ほとんど) 影響を与えません。

于 2013-05-26T20:14:45.247 に答える