큰 코드 세그먼트를 처리하기 위한 메모리 매핑

큰 코드 세그먼트를 처리하기 위한 메모리 매핑

pmap나는 메모리 매핑이 어떻게 이루어지는지 보여주는 프로세스를 알고 있습니다 . 예를 들어, pmap 출력의 첫 번째 줄은 프로세스 실행 파일의 텍스트 세그먼트에 대한 메모리 맵을 보여줍니다. 매우 큰 실행 파일이 있고 코드 크기가 크다고 가정해 보겠습니다. 작은 텍스트 세그먼트(작은 실행 파일)의 경우 pmamp는 400000 - 401000 - 4096 B - 4 KiB매핑된 텍스트 세그먼트를 표시합니다.

(1) 텍스트 세그먼트가 정말 큰 경우 어떻게 매핑됩니까? (2) 코드 실행이 진행됨에 따라 필요한 페이지를 기준으로 동적으로 매핑되는가?

답변1

런타임에 필요한 실행 파일 부분은 있는 그대로 매핑되며 그에 따라 매핑이 전체 범위를 포괄합니다.페이지요청 시에만 로드되지만 이를 위해서는 매핑이 미리 존재해야 합니다.

예를 들어 Emacs를 사용하면 다음과 같습니다.

0000000000400000     88K r---- emacs-26.3
0000000000416000   2044K r-x-- emacs-26.3
0000000000615000    372K r---- emacs-26.3
0000000000672000     32K r---- emacs-26.3
000000000067a000  36560K rw--- emacs-26.3

텍스트 세그먼트는 다음과 같은 실행 파일의 섹션 r-x에 해당하는 2044KiB 세그먼트 입니다..text예를 들어 size -A):

section                     size       addr
...
.text                    2049234    4324272
...

관련 정보