Phil Bull
philbull@gmail.com 2011
Michael Hill
mdhillca@gmail.com 2011, 2014
프로세스의 메모리 맵으로 다양한 경우의 메모리 문제를 진단할 수 있습니다.
조성호
shcho@gnome.org 2016, 2017, 2021.

# 메모리 맵이란 무엇인가요?

가상 메모리는 시스템의 실제 메모리와 스왑 영역을 합쳐서 나타냅니다. 실제 메모리에서 디스크의 파일로 매핑하여, 실행 프로세스가 기존의 실제 메모리보다 더 많은 공간에 접근할 수 있게 해줍니다.

프로그램을 실행하면, 시스템에서는 유일한 프로세스 ID(PID)를 할당하며, 기계 명령과 데이터를 페이지 메모리 영역으로 불러들입니다. 각 프로세스의 페이지 테이블은 해당 페이지를 가상 메모리에 대응하고 물리 메모리에 해당 위치를 넣습니다. 메모리 맵에서는 프로세스에서 활용하는 전체 가상 메모리를 표시하며, 올바른 공유 메모리를 확인하거나, 프로그램에서 취할 다양한 성능 튜닝 매개 변수 결과를 보거나, 메모리 누수와 같은 문제를 진단하든지, 프로그램의 단일 인스턴스 또는 다중 인스턴스를 실행하는 메모리 용량을 결정할 때 활용할 수 있습니다.

프로그램의 여러 복제본을 실행하고 있을 경우, 프로그램의 기계 명령(또는 텍스트)만 물리 메모리로 불러오면 됩니다. 프로그램의 새 인스턴스를 실행할 때마다(고유 프로세스는 자체 가상 메모리 페이지를 보유함), 페이지 테이블은 가상 메모리의 텍스트 위치를 원래 실제 메모리 위치의 기계 명령에 대응합니다. 게다가, 프로세스에서 사용하는 동적 공유 메모리 일부의 경우 가상 메모리에서 별개로 나타나지만, 실제 메모리 상에서 라이브러리의 텍스트 세그먼트 단일 복제본으로 공유 참조하기도 합니다. 프로세스의 총 메모리 사용량을 계산할 때는 공유 라이브러리를 메모리에 불러오는 부분에 있어 해당 공유 라이브러리를 사용하는 모든 프로세스에 반영할 수 있음을 참고하는 것이 중요합니다.

시스템에서 가용 메모리 양보다 더 많은 페이지가 필요할 경우, 일부 현제 패이지는 소거(paged out)하거나 스왑 영역에 기록합니다. 텍스트 페이지는 읽기 및 실행 상태로 표시하며, 디스크의 원래 위치에서 다시 불러올 수 있으므로 굳이 스왑에 기록할 필요는 없습니다. 데이터 페이지는 읽기-쓰기 권한을 쥐고 있으며, 메모리에서 수정사항이 생기면, dirty로 취급합니다. 그리고 스왑 영역의 데이터를 처리하기로 했다면, 소거해야 합니다. 스왑 영역의 페이지가 실행 프로세스에서 필요하다면, 사용 전 스왑 영역에서 메모리로 되돌려놓아야 하는데, 이 과정에서 다른 페이지를 메모리 상에서 소거할 수 있습니다.