3

As process has virtual memory which is copied into RAM during run time. As given in the previous post.

Which part of process virtual memory layout does mmap() uses?

enter image description here

I have following doubles :

  1. If memory mapping is inside unallocated memory and it is inside process's virtual memory. As virtual memory helps to avoid one process to touch other process's virtual memory. Then how can memory mapping is used for Interprocess Communication(IPC)?
  2. In OS like Linux, whether has each individual process separate section of heap, stack and memory mapping or all processes have one common section for heap, stack and MMAP?
    Example :
    if there are P1,P2 and P3 processes are running on linux OS. will all have common table as given in picture or each individual task have separate table to each section.
  3. In 32 bit system, 2^32=4 gigabytes of virtual memory is possible and 1G byte is reserved for kernel and 3 gigabytes for userspace applications. can each individual process have up to 3 gigabytes of virtual memory or sum of all userspace applications size could be 3 gigabytes (i.e virtual memory size of (P1+P2+P3)<=3 gigabytes)?

--
Learner

4

1 に答える 1

2
  1. IPC にメモリ マッピングを使用すると、物理メモリの同じ範囲が異なるプロセスの 2 つ以上の仮想アドレス範囲にマッピングされます。両方のプロセスがまったく同じメモリセルを使用しているため、これは通信に機能します (ただし、異なるアドレスで異なるように「見える」場合があります)。1 つのマッピングで値を変更すると、それはまったく同じメモリであるため、別のプロセスの別のマッピングで即座に表示されます。
  2. すべてのプロセスには、独自の独立したスタックとヒープがあります。OS はそれをまったく気にせず、ページのみを気にします。ヒープとスタックは、アプリケーションによって (ランタイムを介して) 実装されるものです。のような関数を呼び出すとmalloc、ランタイムのアロケータは、以前に予約済みのブロックまたは再利用された (以前に呼び出しfreeた) ブロックを返すか、OS に追加のメモリを予約するように要求します (sbrkまたはmmap)。このメモリに最初にアクセスすると、OS はページ フォールトを認識し、この場所へのアクセスが許可されていることを確認し (予約済みであるため)、有効なページを提供します。
  3. すべてのプロセスは、(「予約」のように) 利用可能なアドレス空間全体 (この例では 3GiB) を使用できます。これにより、他のプロセスが妨げられることはありません。フラグメンテーションとアラインメントが原因で、実行可能ファイルとスタックが少し離れているため、実際には完全な 3 GiB を割り当てることはできませんが、それに近づくことはできます。すべてのプロセスは、システムで使用可能な仮想メモリ (物理 RAM とスワップ領域) を一緒に使用できますが、同時に
    使用できる物理メモリと同じ量しか使用できません(これとあれを差し引くと、ページング不可能なカーネル メモリなど)。
于 2013-08-07T11:42:11.630 に答える