링커, 로더, 실행 파일
프로그램을 시작할 때(Linux의 execve 등) OS의 로더가 하는 일로 올바른 것은?
- A소스 코드를 읽어 들여 그 자리에서 컴파일한 다음 실행한다
- B실행 파일의 프로그램 헤더에 따라 각 부분을 메모리에 배치하고, 스택에 인수 등을 준비한 뒤 진입점 주소부터 실행을 시작한다
- C실행 파일의 모든 심볼 이름을 화면에 표시한 다음 실행한다
정답과 해설 보기
정답: B. 실행 파일의 프로그램 헤더에 따라 각 부분을 메모리에 배치하고, 스택에 인수 등을 준비한 뒤 진입점 주소부터 실행을 시작한다
로더는 실행 파일의 헤더를 읽고, 프로그램 헤더에 적힌 각 부분(세그먼트)을 읽기, 쓰기, 실행 권한을 붙여 가상 주소 공간에 대응시킵니다. BSS를 위한 0 영역과 스택을 준비하고, 명령줄 인수와 환경 변수를 스택에 쌓습니다. 동적 링크라면 동적 링커를, 그렇지 않으면 실행 파일의 진입점 주소부터 실행을 시작합니다.
- A. 실행 파일은 이미 기계어입니다.
- B. 올바릅니다. 메모리 준비와 시작이 로더의 일입니다.
- C. 심볼 이름을 표시하는 일은 없습니다.