Architecturas | linux mmap 예제

linux mmap 예제

자세한 mmap() 참조의 경우 mmap의 열기 페이지가 addr가 NULL인 경우 커널이 매핑을 만들 주소를 선택합니다. 이것은 새 매핑을 만드는 가장 이식가능한 방법입니다. addr가 NULL이 아닌 경우 커널은 매핑을 배치할 위치에 대한 힌트로 사용합니다. Linux에서 매핑은 가까운 페이지 경계에서 생성됩니다. 호출의 결과로 새 매핑의 주소가 반환됩니다. 파일 백업 매핑의 경우 매핑된 파일의 st_atime 필드는 mmap() 및 해당 매핑 해제 간에 언제든지 업데이트될 수 있습니다. 매핑된 페이지에 대한 첫 번째 참조가 아직 없는 경우 필드를 업데이트합니다. 2단계: 파일을 엽니다. 파일 설명자가 필요하기 때문에 fopen() 함수를 직접 사용할 수 없습니다(FILE 개체에서 fileno()를 사용할 수 있음). 이 경우 mmap() 읽기 전용을 사용하려고 하기 때문에 O_RDONLY를 사용합니다.

생성 하 고 아파치와 Nginx 서버에 대 한 리눅스에서 Htpasswd 암호를 구성 하는 방법? mmap()으로 매핑된 메모리는 동일한 속성으로 포크(2)에 걸쳐 유지됩니다. 특정 플래그 상수는 _BSD_SOURCE 또는 _SVID_SOURCE가 정의된 경우에만 정의됩니다. _GNU_SOURCE를 요구하는 것으로도 충분하며, 이러한 플래그는 모두 Linux에 특정하므로 매크로를 구체적으로 요구하는 것이 더 논리적일 것입니다.) 관련 플래그는 다음과 같습니다: MAP_32BIT, MAP_ANONYMOUS (및 동의어 MAP_ANON), MAP_DENYWRITE, MAP_EXECUTABLE, MAP_FILE, MAP_GROWSDOWN, MAP_HUGETLB, MAP_LOCKED, MAP_NONBLOCK, MAP_NORESERVE, MAP_채우기 및 MAP_STACK. 리눅스, 맥 OS X 및 BSD에서 mmap매핑의 여러 유형을 만들 수 있습니다. 다른 운영 체제는 이러한 하위 집합만 지원할 수 있습니다., 예를 들어, 공유 매핑 글로벌 VFS 또는 I/O 캐시 없이 운영 체제에서 실용적이지 않을 수 있습니다. Linux에서는 차이점보다 이러한 접근 방식 간에 더 많은 유사점이 있습니다. 두 경우 모두 읽기 또는 쓰기가 발생하기 전에 파일이 실제로 디스크 캐시에 로드되고 쓰기는 하드 디스크가 아닌 디스크 캐시의 페이지에서 직접 수행됩니다. 운영 체제는 결국 디스크 캐시를 디스크와 동기화합니다. 동기화(또는 변형)를 사용하여 즉시 요청할 수 있습니다. 여기에서 또 다른 리눅스 예 메모리 매핑의 윈도우 구현. 위의 구현은 최소한의 예일 뿐이므로 오류를 제대로 확인하지 못합니다. 예! 간단한 예로 몇 바이트만 예약하고 자식 프로세스를 종료할 때 공유 메모리의 값을 변경할 수 있습니다.

익명 메모리를 공유하는 것은 복사, 시스템 호출 또는 디스크 액세스 오버헤드가 없기 때문에 프로세스 간 통신의 매우 효율적인 형태입니다. void *mmap (보이드 *시작, size_t 길이, int prot, int 플래그, int fd, off_t 오프셋); 컴퓨팅에서 mmap(2)은 파일이나 장치를 메모리에 매핑하는 POSIX 호환 유닉스 시스템 호출입니다. 메모리 매핑 된 파일 I / O의 방법입니다. 파일 내용이 디스크에서 직접 읽히지 않고 처음에는 물리적 RAM을 전혀 사용하지 않기 때문에 요구 페이징을 구현합니다. 디스크에서 실제 읽기는 특정 위치에 액세스한 후 « 지연 » 방식으로 수행됩니다. 메모리가 더 이상 필요하지 않은 후에는 포인터를 문맵(2)하는 것이 중요합니다. 보호 정보는 mprotect(2)를 사용하여 관리할 수 있으며, madvise(2)를 사용하여 특별한 처리를 시행할 수 있습니다. 위의 세 플래그는 POSIX.1-2001에 설명되어 있습니다.

Linux는 또한 다음과 같은 비표준 플래그에 대해서도 알고 있습니다: mmap(2)ing 파일은 동일한 파일에 액세스하는 응용 프로그램의 메모리 오버헤드를 크게 줄일 수 있습니다. 파일에 액세스하려는 각 응용 프로그램에 대해 파일을 로드하는 대신 파일이 포함하는 메모리 영역을 공유할 수 있습니다. 즉, mmap(2)은 때때로 IPC(프로세스 간 통신)에 사용됩니다. 최신 운영 체제에서 mmap(2)은 일반적으로 시스템 V IPC 공유 메모리 시설에 선호됩니다.