1

状況は次のとおりです。

プロセスには vp1 と vp2 の 2 つのページがあります。これらの 2 つのページは、2 つの物理ページまたはスワップ内の 2 つのページにマップされます。これらの物理 (またはスワップ) ページを pp1 および pp2 と呼びましょう。マッピングは次のとおりです。

vp1->pp1

vp2->pp2

ここで、マッピングを次のように変更したい場合:

vp1->pp2

vp2->pp1

つまり、プロセスによって vp2 から読み取ると、元は vp1 のコンテンツが取得されます。Linux でカーネルを変更せずにこれを行う方法はありますか?

4

2 に答える 2

2

はい。ただし、最初にいくつかの作業を行う必要があります。これを実現する 1 つの方法は、2 つの共有メモリ オブジェクトを作成することです。次に、プロセス アドレス空間で共有メモリ オブジェクトをマップおよびマップ解除できます。詳細については、システム コールshmatshmdtshmget、およびshmctlを参照してください。

マッピングとマッピング解除にはかなりの時間がかかる可能性があるため、プロセスがデータへのアクセスに使用するアドレスを選択するために何らかのポインター スキームを使用するよりも時間を節約できない場合があります。

于 2012-10-29T16:04:34.763 に答える
0

いいえ。システムの動作を維持したい場合は、一般的なケースではありません。ただし、マッピングの作成方法を制御する場合は、ファイルまたは shm_open のオブジェクトの mmap を使用してマッピングを作成できます。それらを交換する必要がある場合は、mmap(... MAP_FIXED ...) で上書きするだけです。

于 2012-10-29T15:54:04.430 に答える