MMAP 보호 플래그 프로세스간에 공유에 영향을 미칩니다

StackOverflow https://stackoverflow.com/questions/601806

  •  03-07-2019
  •  | 
  •  

문제

보호 플래그가 프로세스 간의 공유에 영향을 미칩니 까? Prot_Read | Prot_write- 보호 된 Mmapped 메모리 영역이 있다면, 글을 쓰지 않은 한 여전히 완전히 공유됩니까?

int prot = PROT_READ|PROT_EXEC;
image = mmap(NULL, filesize, prot, MAP_PRIVATE, fildes, 0);

VS :

int prot = PROT_READ|PROT_WRITE|PROT_EXEC;
image = mmap(...)

메모리 영역의 작은 부분을 맵핑 한 후 작은 부분을 작은 부분으로 만들고 싶고, 필요할 때 작은 부분을 mprotect하는 것보다 간단하기 때문에 모든 것을 다시 보호하고 싶습니다.

문제는 프로세스 당 전체 파일을 강요하는지 또는 프로세스 당 수정 된 부분만으로는?

도움이 되었습니까?

해결책

에 따르면 MMAP (2) 최근 Linux 시스템의 MAN 페이지, MAP_PRIVATE는 메모리를 사용하여 메모리를 할당합니다. 복사기 (암소). 즉, 메모리를 변경하지 않으면 메모리가 복제되지 않습니다. 암소는 이것을 구현하는 효율적인 방법이기 때문에 다른 *닉스 시스템에서도 이런 식으로 수행된다고 가정합니다.

MMAP의 메모리는 동일한 크기의 덩어리, 소위 페이지로 구성됩니다. 메모리는 항상 페이지 크기의 배수, 즉 전체 페이지에 매핑됩니다. 각 페이지는 독립적으로 교체 할 수 있습니다. 따라서이 MMAP'ed 메모리 범위에 무언가를 쓰면 적어도 한 페이지 만 복사해야합니다.

페이지 크기는 시스템에 따라 다릅니다. x86에서는 일반적으로 4096 바이트입니다. 시스템의 페이지 크기에 관심이 있으시면 사용할 수 있습니다. Sysconf (3).

   #include <unistd.h>
   long pagesize = sysconf(_SC_PAGESIZE);

mmap ()에서 얻은 포인터는 이미 페이지 크기의 여러 가지를 가리키며 mprotect ()를 페이지 경계에 정렬하는 주소를 전달해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top