본문 바로가기
카테고리 없음

링커와 로더란 무엇인가?

by kangs' tong 2023. 9. 15.

링커 (Linker)

링커는 프로그래밍에서 여러 개의 오브젝트 파일을 하나의 실행 가능한 파일로 결합해주는 프로그램입니다. 컴파일러에 의해 생성된 각각의 오브젝트 파일은 주로 확장자가 .o 또는 .obj로 끝나며, 링커는 이러한 오브젝트 파일들을 하나로 합치고, 심볼 테이블 정보를 사용하여 링크 작업을 수행합니다.

링커의 주요 작업은 다음과 같습니다.

  1. 오브젝트 파일의 합치기: 링커는 여러 개의 오브젝트 파일을 하나로 합쳐서 실행 파일을 생성합니다. 이 과정에서 오브젝트 파일 내의 코드 및 데이터 섹션들이 적절한 주소로 배치됩니다.

  2. 심볼 해결 (Symbol resolution): 링커는 각각의 오브젝트 파일들이 참조하고 있는 심볼들을 해결합니다. 심볼은 함수, 변수, 상수 등의 이름을 나타내며, 심볼 해결은 심볼의 정의와 참조를 연결시켜주는 작업입니다.

  3. 재위치(Relocation): 링커는 오브젝트 파일들을 합칠 때, 각각의 코드 섹션에서 사용된 상대 주소를 절대 주소로 변경하여야 하는데, 이 과정을 재위치라고 합니다.

  4. 라이브러리 관리: 링커는 필요한 라이브러리 파일들을 찾아서 실행 파일에 포함시킵니다. 이렇게 함으로써 프로그램이 필요한 기능들을 공유할 수 있게 됩니다.

로더 (Loader)

로더는 링커의 출력물인 실행 파일을 메모리에 적재하여 실행시키는 역할을 수행합니다. 일반적으로 운영체제에 의해 제공되는 유틸리티 프로그램으로서, 로더의 주요 작업은 다음과 같습니다.

  1. 메모리 할당: 로더는 실행 파일을 메모리에 할당합니다. 이때, 운영체제의 메모리 관리 정책을 따라 적절한 위치에 할당합니다.

  2. 재위치(Relocation): 로더는 실행 파일 내부의 재위치 정보를 사용하여, 각각의 주소값을 실제 메모리 상의 주소로 변경합니다. 이로써 실행 파일이 올바른 주소 공간에 로드됩니다.

  3. 링크된 코드 실행: 로더는 메모리에 로드된 실행 파일을 실행시킵니다. 이를 위해 실행 파일의 시작 위치를 찾아서 코드를 실행하게 됩니다.

링커와 로더는 프로그램 개발과 실행 과정에서 중요한 역할을 합니다. 링커는 여러 개의 오브젝트 파일을 하나로 결합하여 실행 파일을 생성하며, 로더는 실행 파일을 메모리에 적재하여 실행시킵니다. 이렇게 함으로써 개발자는 작성한 코드를 실행 가능한 형태로 만들고, 운영체제는 해당 프로그램을 실행시킬 수 있게 됩니다.

정리: 링커는 여러 개의 오브젝트 파일을 하나로 합치고, 심볼 해결과 재위치 작업을 수행하여 실행 파일을 생성합니다. 로더는 실행 파일을 메모리에 적재하여 실행시킵니다.

댓글