2013-03-10 2 views
0

리눅스가 모든 부모 프로세스 메모리를 자식 프로세스의 별도 페이지로 복사하지 않는다는 것을 알기 때문에 쓰기시 복사를 수행합니다. 두 프로세스 중 하나가 매핑 된 (공유) 페이지의 일부 메모리 위치를 수정 (쓰기) 할 때까지 동일한 실제 메모리 위치 (동일한 물리적 페이지)에 매핑 된 하위 가상 주소 공간과 부모 가상 주소 공간을 갖게됩니다.linux : 부모와 자식 사이에 페이지 공유하기

실제 메모리 페이지 #가 프로세스에서 공유되고 있음을 보여주는 도구가 있는지 알고 싶습니다. 또는 가상 주소 -> 실제 주소 매핑을 제공하는 도구. 실제 주소를보고 프로세스가 동일한 실제 메모리에 매핑되는지 확인할 수 있습니다.

감사합니다.

+0

이것은 XY 질문처럼 들립니다. 페이지가 자식 프로세스에 매핑되는지 여부를 알고 싶은 이유를 설명해 주시겠습니까? –

+0

커널 내부에 저장된 페이징 테이블을 살펴 봐야합니다. – Tuxdude

답변

0

사용할 수있는 특수 도구가 있는지 모르겠지만 필요한 모든 정보는 이미 /proc 파일 시스템을 통해 내보내 져야합니다.

귀하의 질문에 제공된 특수한 사용 사례는 관련 문서에 명시 적으로 언급되어 있습니다. (중 linux-src-directory/Documentation/vm/pagemap.txt 또는 온라인 https://www.kernel.org/doc/Documentation/vm/pagemap.txt는) :

메모리 사용 '과정에 대해 알아 페이지지도를 사용하는 일반적인 절차는 다음과 같이 진행됩니다 결정하기

  1. 읽기/proc 디렉토리/PID /지도 메모리 공간의 일부는 에 매핑됩니다.
  2. 당신이에 관심이지도를 선택 - 그들 모두, 또는 특정 라이브러리 또는 스택 또는 힙 등
  3. 열기은/proc/PID/페이지지도를하고 당신이 싶은 페이지를 찾아 시험해 봐.
  4. 페이지 맵에서 각 페이지에 대해 u64를 읽습니다.
  5. /proc/kpagecount 및/또는/proc/kpageflags를 엽니 다. 각 PFN에 대해 을 읽고 파일에서 해당 항목을 찾아 원하는 데이터를 읽습니다. 예를 들어

은 "독특한 크기"를 찾을 수있는 프로세스가 다른 프로세스와 공유되지 않도록 사용하는 메모리의 양 있다 (USS), 당신은 모든 맵을 통해 갈 수있다 프로세스에서 PFN을 찾으십시오. 은 kpagecount에서 이들을 검색하고 한 번만 참조 된 페이지 수를 집계합니다.