5

オペレーティング システム/コンピューター アーキテクチャに関する質問はこちら。私はキャッシュについて読んでいて、仮想的にキャッシュにインデックスを付けることがアドレス変換時間を短縮するオプションであることについて読んでいました。私は以下に出くわしました:

"Virtual cache difficulties include:
    Aliasing
        Two different virtual addresses may have the same physical address."

これが発生する可能性があるシナリオは考えられません。O/S 時代からしばらく経ち、空白を描いています。

誰かが例を提供できますか?ありがとう

4

4 に答える 4

7

2 つのプロセスが共有マッピングを持つ場合があります。たとえば、Unix では、実行可能コードは通常、同じプログラムを実行するすべてのプロセス間で共有される領域にマップされます。(実際には、1 つのプロセスが同じ基礎となるメモリの複数のマッピングを持つ場合があります。たとえばmmap、同じファイルが 2 回存在する場合などです。)

于 2012-10-13T22:47:09.290 に答える
2

shmat()は、2つの異なるプロセスで2つの異なる仮想アドレスとしてマップされている同じ物理アドレスの典型的な例です。pmap-xpid_Aを実行する場合。プロセスBの場合と同様にプロセスAの仮想memマップが表示されます。実際のPhymemはユーザースペースプログラムに公開されていません。

ここで、SayProcess AとBは共有メモリセグメントを共有し、共有メモリポインタはsh_mem_ptr_AとSh_mem_ptr_Bになります。これらのポインタを出力すると、それらのアドレス(仮想)は異なります。Sh_mem_ptr_AはプロセスAのメモリマップの一部であるため、同様にプロセスBのsh_mem_ptr_Bです。

カーネルは、Virtual-to-phyアドレスのマッピングを維持します。ページテーブルとオフセットによる。上位ビットはページテーブルにマップされ、オフセットはページテーブルのオフセットにマップされます。したがって、sh_mem_ptr_Aとsh_mem_ptr_Bの下位ビットに気付いた場合、それらは同じになります(ただし、常に真であるとは限りません)。

于 2013-01-31T17:32:06.927 に答える
2

プログラムの実行可能セクションは、プロセス間で共有される可能性があると考えています。したがって、2 回マップされます。

例: の 2 つのインスタンスをロードvimすると、2 つのプロセスが存在します。どちらのプロセスも、物理メモリ内の同じ実行可能コードにマップされる可能性があります。

于 2012-10-13T22:49:02.640 に答える
1

また、各プロセスには 4 GB の仮想空間 (32 ビット システムの場合) が割り当てられ、そのうち 1 GB (O から O に依存) が OS にマッピングされます。OS はすべてのプロセスに共通であるため、仮想アドレスの下位 1GB はすべてのプロセスに共通であり、同じ OS の物理ページにマップされます。

于 2012-10-15T06:45:05.640 に答える