プロセスアドレス空間と仮想メモリ

いくつかの記事を読んで私の理解から、私はプロセスアドレス空間(PAS)と仮想メモリ(VM)が同じであると仮定しました。私の理解に欠陥がありますか?ある人がこれを見せて、私を照らしてくれますか?私は混乱しています。

私はProcess Address SpaceがRAMまたは物理メモリとは関係ないことを理解しています。

しかし、PASとVMについてちょっと混乱しました。

ベストアンサー

First: “memory” is not equal to “address space”.
Address space is range of posible addresses. I.e. it’s 4 Gb for
32-bit pointers and 16 Eb for 64-bit pointers. On the other hand,
memory is… well, memory which you can actually use (at least
possibly). So, I bet you’re asking if “process memory” is equal to
“virtual memory” or if “process address space” is equal to “virtual
address space”.

Second: Virtual memory is the only memory which
you can use in user mode. You can’t access physical memory.
Physical memory is for kernel mode and drivers. User mode
applications work only with virtual memory. Thus, all memory is
virtual in user mode. No need to append “virtual”. It’s by
default.

したがって、 “プロセスアドレス空間” = “[仮想]プロセスアドレス空間” – つまり、単一のプロセスの仮想アドレス空間。
「メモリ」=「プロセスメモリ」=「[仮想]プロセスメモリ」についても同様です。

Third: Now, the “Virtual Memory” term usually
refer to “System Virtual Memory” (global thing), which is larger
than just one process. On the other hand: since addressing is
specific to the process there is no such thing as “System Virtual
Address Space” (global address space of all processes and
kernel).

だから答えは:

  1. “Process Address Space” = “Virtual Address Space” = “Address
    Space”
  2. “Process Memory” <> “Virtual Memory”

たとえば、プロセスアドレス空間の一般的な制限は4Gbです(32ビットアプリケーションの場合)。ただし、プロセス仮想メモリの一般的な制限は2
Gbです(32ビットマシンでは3 Gb、64ビットマシンでは4 Gbまで拡張できます)。

On the other hand, the virtual memory is larger than just your
process. Consider the case when you allocate memory through
CreateFileMapping function. You can create, say, 64 Gb virtual
memory block. That’s OK even though 64 Gb > 2 Gb. Of course, you
can’t use all 64 Gb at the same time (because process address space
is just 4 Gb), but you can do it in chunks, say, per 512 Mb.

また、同じ仮想メモリブロックを複数の場所(複数のアドレス)にマップする場合も考えてみましょう。

言い換えれば、仮想メモリと仮想アドレスとの間の1対1のマッピングは存在しない。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です