로드된 ELF 실행 파일 간에 .text 섹션이 공유됩니까?

로드된 ELF 실행 파일 간에 .text 섹션이 공유됩니까?

예를 들어, 한 프로그램이 grep현재 실행 중이고 사용자가 다른 인스턴스를 실행하는 경우 두 인스턴스는 메모리를 절약하기 위해 읽기 전용 .text부분을 공유합니까? 주요 실행 가능 텍스트 공유는 공유 라이브러리와 유사합니까?

이 동작이 Linux에 존재합니까? 그렇다면 다른 Unices도 이 작업을 수행합니까?

Linux에서 이 작업이 수행되지 않으면 일반적으로 공유 라이브러리로 실행 파일을 구현하여 여러 인스턴스를 병렬로 실행하고 호출된 실행 파일이 단순히 라이브러리의 기본 기능을 호출하면 어떤 이점이 있습니까?

답변1

Unix 공유 실행 파일과 공유 라이브러리는 메모리 이미지가 모든 사용자 간에 공유되기 때문에 공유된다고 합니다(duh...).

즉, bash(1)의 두 인스턴스를 실행하고 그 중 하나에서 vim(1)을 실행하면 메모리에 bash 및 vim 실행 파일의 복사본이 모두 남게 됩니다. C 라이브러리 libc의 복사본.

하지만 더 좋은 점은 위 실행 파일/라이브러리(파일)의 디스크 복사본에서 가져온 Linux 페이지입니다. 따라서 메모리에 남아 있는 것은 최근에 사용된 페이지뿐입니다. 따라서 거의 사용되지 않는 vim 명령이나 bash 오류 처리, libc에서 사용되지 않는 기능 등과 같은 코드는 메모리가 아닌 디스크 공간만 차지합니다.

관련 정보