please make changes if it makes the content better for learning. I want you to break this into QA format in markdown - i learn better that way. The questions should be as specific as possible. 
For each answer, make it detailed, add content explaining why it's important and practical, provide an example. If there if opportunity for a code or ascii art examples, do it. Also, if the answer itself is dense, break the answer into a subsection for QA. 

The question headers should be h3
This is the content:
The idea of memory mapping resulted from a clever insight that if the virtual memory system could be integrated into the conventional file system, then it could provide a simple and efficient way to load programs and data into memory.

As we have seen, the process abstraction promises to provide each process with its own private virtual address space that is protected from errant writes or reads by other processes. However, many processes have identical read-only code areas. For example, each process that runs the Linux shell program bash has the same code area. Further, many programs need to access identical copies of read-only run-time library code. For example, every C program requires functions from the standard C library such as printf. It would be extremely wasteful for each process to keep duplicate copies of these commonly used codes in physical memory. Fortunately, memory mapping provides us with a clean mechanism for controlling how objects are shared by multiple processes.

An object can be mapped into an area of virtual memory as either a shared object or a private object. If a process maps a shared object into an area of its virtual address space, then any writes that the process makes to that area are visible to any other processes that have also mapped the shared object into their virtual memory. Further, the changes are also reflected in the original object on disk.

Changes made to an area mapped to a private object, on the other hand, are not visible to other processes, and any writes that the process makes to the area are not reflected back to the object on disk. A virtual memory area into which a shared object is mapped is often called a shared area. Similarly for a private area.

Suppose that process 1 maps a shared object into an area of its virtual memory, as shown in Figure 9.29(a). Now suppose that process 2 maps the same shared object

Diagram (a) shows shared object mapped to process 1 virtual memory (shared with physical memory). Diagram (b) shows shared object mapped to process 1 and process 2 virtual memory.
Figure 9.29 A shared object.
(a) After process 1 maps the shared object, (b) After process 2 maps the same shared object. (Note that the physical pages are not necessarily contiguous.)

Diagrams illustrate a private copy-on-write object.
Figure 9.30 A private copy-on-write object.
(a) After both processes have mapped the private copy-on-write object, (b) After process 2 writes to a page in the private area.

Description
into its address space (not necessarily at the same virtual address as process 1), as shown in Figure 9.29(b).

Since each object has a unique filename, the kernel can quickly determine that process 1 has already mapped this object and can point the page table entries in process 2 to the appropriate physical pages. The key point is that only a single copy of the shared object needs to be stored in physical memory, even though the object is mapped into multiple shared areas. For convenience, we have shown the physical pages as being contiguous, but of course this is not true in general.

Private objects are mapped into virtual memory using a clever technique known as copy-on-write. A private object begins life in exactly the same way as a shared object, with only one copy of the private object stored in physical memory. For example, Figure 9.30(a) shows a case where two processes have mapped a private object into different areas of their virtual memories but share the same physical copy of the object. For each process that maps the private object, the page table entries for the corresponding private area are flagged as read-only, and the area struct is flagged as private copy-on-write. So long as neither process attempts to write to its respective private area, they continue to share a single copy of the object in physical memory. However, as soon as a process attempts to write to some page in the private area, the write triggers a protection fault.

When the fault handler notices that the protection exception was caused by the process trying to write to a page in a private copy-on-write area, it creates a new copy of the page in physical memory, updates the page table entry to point to the new copy, and then restores write permissions to the page, as shown in Figure 9.30(b). When the fault handler returns, the CPU re-executes the write, which now proceeds normally on the newly created page.

By deferring the copying of the pages in private objects until the last possible moment, copy-on-write makes the most efficient use of scarce physical memory.
콘텐츠가 학습에 더 도움이 된다면 변경해 주세요. 마크다운으로 QA 형식으로 작성해 주셨으면 합니다. 그렇게 하면 학습 효과가 더 좋습니다. 질문은 가능한 한 구체적이어야 합니다. 각 답변에 대해 상세하게 작성하고, 왜 중요하고 실용적인지 설명하는 콘텐츠를 추가하고, 예시를 제공하세요. 코드나 아스키 아트 예제를 사용할 기회가 있다면 그렇게 하세요. 또한 답변 자체가 밀도가 높은 경우에는 QA를 위해 답변을 하위 섹션으로 나누세요. 질문 헤더는 h3이어야 합니다.이것이 내용입니다:메모리 매핑에 대한 아이디어는 가상 메모리 시스템을 기존 파일 시스템에 통합할 수 있다면 프로그램과 데이터를 메모리에 로드하는 간단하고 효율적인 방법을 제공할 수 있다는 영리한 통찰력에서 비롯되었습니다.지금까지 살펴본 것처럼 프로세스 추상화는 각 프로세스에 다른 프로세스의 잘못된 쓰기 또는 읽기로부터 보호되는 고유한 개인 가상 주소 공간을 제공한다고 약속합니다. 그러나 많은 프로세스가 동일한 읽기 전용 코드 영역을 가지고 있습니다. 예를 들어, Linux 셸 프로그램 bash를 실행하는 각 프로세스는 동일한 코드 영역을 가지고 있습니다. 또한 많은 프로그램이 읽기 전용 런타임 라이브러리 코드의 동일한 복사본에 액세스해야 합니다. 예를 들어, 모든 C 프로그램에는 printf와 같은 표준 C 라이브러리의 함수가 필요합니다. 각 프로세스가 이러한 공통적으로 사용되는 코드의 중복 복사본을 물리적 메모리에 보관하는 것은 매우 낭비적인 일입니다. 다행히 메모리 매핑은 여러 프로세스에서 객체를 공유하는 방식을 제어할 수 있는 깔끔한 메커니즘을 제공합니다.객체는 가상 메모리 영역에 공유 객체 또는 개인 객체로 매핑될 수 있습니다. 프로세스가 공유 객체를 가상 주소 공간의 영역에 매핑하면 해당 프로세스가 해당 영역에 쓰는 모든 내용은 공유 객체를 가상 메모리에 매핑한 다른 프로세스에서도 볼 수 있습니다. 또한 변경 사항은 디스크의 원본 객체에도 반영됩니다.반면에 개인 개체에 매핑된 영역에 대한 변경 사항은 다른 프로세스에 표시되지 않으며, 프로세스가 해당 영역에 쓰는 모든 내용은 디스크의 개체에 다시 반영되지 않습니다. 공유 개체가 매핑된 가상 메모리 영역을 종종 공유 영역이라고 합니다. 개인 영역도 마찬가지입니다.그림 9.29(a)와 같이 프로세스 1이 공유 객체를 가상 메모리 영역에 매핑한다고 가정해 보겠습니다. 이제 프로세스 2가 동일한 공유 객체를 매핑한다고 가정해 보겠습니다.그림 (a)는 프로세스 1 가상 메모리(물리적 메모리와 공유)에 매핑된 공유 객체를 보여줍니다. 그림 (b)는 프로세스 1과 프로세스 2 가상 메모리에 매핑된 공유 객체를 보여줍니다.그림 9.29 공유 객체.(a) 프로세스 1이 공유 객체를 매핑한 후, (b) 프로세스 2가 동일한 공유 객체를 매핑한 후. (실제 페이지가 반드시 인접하지는 않습니다.)다이어그램은 개인 복사본-온-쓰기 객체를 보여줍니다.그림 9.30 개인 복사본-온-라이트 객체.(a) 두 프로세스가 모두 비공개 쓰기 시 복사 개체를 매핑한 후, (b) 프로세스 2가 비공개 영역에 있는 페이지에 쓴 후.설명를 해당 주소 공간(반드시 프로세스 1과 동일한 가상 주소일 필요는 없음)에 매핑합니다(그림 9.29(b)와 같이).각 객체에는 고유한 파일 이름이 있으므로 커널은 프로세스 1이 이미 이 객체를 매핑했음을 빠르게 파악하고 프로세스 2의 페이지 테이블 항목을 적절한 물리적 페이지로 가리킬 수 있습니다. 중요한 점은 공유 개체가 여러 공유 영역에 매핑되어 있더라도 물리적 메모리에는 공유 개체의 복사본 하나만 저장하면 된다는 것입니다. 편의상 물리적 페이지를 연속된 것으로 표시했지만, 물론 일반적으로는 그렇지 않습니다.프라이빗 오브젝트는 복사-온-라이트라는 영리한 기술을 사용하여 가상 메모리에 매핑됩니다. 프라이빗 객체는 공유 객체와 완전히 동일한 방식으로 수명을 시작하며, 물리 메모리에 프라이빗 객체의 복사본이 하나만 저장됩니다. 예를 들어, 그림 9.30(a)는 두 프로세스가 프라이빗 객체를 가상 메모리의 서로 다른 영역에 매핑했지만 객체의 물리적 복사본은 동일하게 공유하는 경우를 보여줍니다. 프라이빗 객체를 매핑하는 각 프로세스에 대해 해당 프라이빗 영역에 대한 페이지 테이블 항목은 읽기 전용으로 플래그가 지정되고 영역 구조체는 프라이빗 복사본-온-라이트로 플래그가 지정됩니다. 두 프로세스 모두 각각의 비공개 영역에 쓰기를 시도하지 않는 한, 물리적 메모리에서 개체의 단일 복사본을 계속 공유합니다. 그러나 프로세스가 개인 영역의 일부 페이지에 쓰기를 시도하는 즉시 쓰기 시 보호 오류가 트리거됩니다.결함 처리기는 프로세스가 비공개 쓰기 영역의 페이지에 쓰려고 시도하여 보호 예외가 발생했음을 감지하면 그림 9.30(b)와 같이 물리적 메모리에 페이지의 새 복사본을 생성하고 페이지 테이블 항목을 새 복사본을 가리키도록 업데이트한 다음 해당 페이지에 대한 쓰기 권한을 복원합니다. 결함 처리기가 반환되면 CPU는 쓰기를 다시 실행하고, 이제 새로 생성된 페이지에서 정상적으로 진행됩니다.개인 객체에 있는 페이지의 복사를 la