메모리맵 예제

그림 3.27. memfetch를 사용하여 만든 “골” 프로세스에 대한 메모리 매핑 메모리 매핑 의 또 다른 일반적인 용도는 여러 프로세스 간에 메모리를 공유하는 것입니다. 최신 보호 모드 운영 체제에서 프로세스는 일반적으로 다른 프로세스에서 사용하도록 할당된 메모리 공간에 액세스할 수 없습니다. (프로그램의 시도가 이렇게 하면 잘못된 페이지 오류 또는 세분화 위반이 발생합니다.) 메모리를 안전하게 공유하는 데 사용할 수 있는 여러 가지 기술이 있으며 메모리 매핑파일 I/O가 가장 인기 있는 기술 중 하나입니다. 둘 이상의 응용 프로그램이 동시에 단일 물리적 파일을 메모리에 매핑하고 이 메모리에 액세스할 수 있습니다. 예를 들어 Microsoft Windows 운영 체제는 응용 프로그램이 시스템 페이지 파일 자체의 공유 세그먼트를 메모리 매핑하고 이 섹션을 통해 데이터를 공유하는 메커니즘을 제공합니다. Microsoft .NET 런타임에서 P/Invoke는 Windows API를 통해 직접 매핑된 메모리 파일을 사용하는 데 사용할 수 있습니다. 메모리 매핑된 파일에 대한 관리되는 액세스(P/Invoke 필요 않음)는 런타임 의 버전 4에 도입되었습니다(메모리 매핑된 파일 참조). 이전 버전의 경우 관리되는 API를 제공하는 타사 라이브러리가 있습니다. [17] 특정 응용 프로그램 수준 메모리 매핑된 파일 작업도 실제 파일보다 더 나은 성능을 발휘합니다. 응용 프로그램은 파일의 시작부터 검색하거나 전체 편집된 내용을 임시 위치로 다시 작성하는 대신 파일의 데이터에 직접 및 내부에서 액세스하고 업데이트할 수 있습니다.

메모리 매핑된 파일은 내부적으로 페이지에서 처리되므로 선형 파일 액세스(예: 플랫 파일 데이터 저장소 또는 구성 파일)는 새 페이지 경계를 교차하는 경우에만 디스크 액세스가 필요하며 파일의 더 큰 섹션을 디스크에 디스크에 쓸 수 있습니다. 단일 작업. 메모리 매핑된 파일은 운영 체제의 메모리 관리자를 통해 액세스되므로 파일이 자동으로 여러 페이지로 분할되고 필요에 따라 액세스됩니다. 메모리 관리를 직접 처리할 필요는 없습니다. 가상 메모리 관리자는 프로세스에 대한 주소 맵을 만들고 관리하고 실제 메모리 할당을 제어하는 두 가지 주요 임무가 있습니다. NT 4.0은 32비트(4GB) 주소 공간을 구현합니다. 그러나 응용 프로그램은 처음 2GB만 직접 액세스할 수 있습니다. 주소 공간의 2GB ~ 4GB 부분은 NT의 커널 모드 부분에 대한 것이며 변경되지 않습니다. 가상 메모리 관리자는 개별 세그먼트 또는 페이지에서 메모리를 관리하는 수요 페이징 가상 메모리를 구현합니다. x86 시스템에서 페이지는 4,096바이트입니다. 가상 메모리 관리자에는 파일 메모리 매핑, 메모리 공유 및 쓰기 시 복사 페이지 보호를 구현하는 고급 기능이 있습니다.

NT는 파일 메모리 매핑을 사용하여 실행 파일 이미지와 DLL을 효율적으로 로드합니다. 쓰기 복사는 여러 프로그램이 각 프로그램이 개별적으로 수정할 수 있는 공통 데이터를 공유하는 메모리 공유와 관련된 최적화입니다. 한 프로그램이 다른 프로그램과 공유하는 쓰기-온-쓰기 복사 페이지에 쓸 때 수정을 하는 프로그램은 쓰기 시 복사 페이지의 자체 버전을 가져옵니다.

Spread the love