제5장 링커와 로더
- 여러 개의 목적 프로그램을 결합하여 하나의 실행가능한 프로그램을 구성할 수 있는데 이 연결작업은 링커 또는 연결 편집기에 의해서 수행된다.
- 연결 작업은 하나의 로드 모듈(load module)로 생성되는데, 각 모듈 내에 다른 모듈에서 정의된 라벨을 참조하는 외부 참조가 있으면 이들을 전부 해결하여 하나의 수행 가능한 프로그램을 해석하고, 통합된 로드 모듈은 적재 작업에 의해 주기억 장치에 적재된다.
- 로드 모듈이 적재되는 위치에 따라 각 명령어의 번지 부분을 조정해야 할 경우도 있는데 이를 재배치라 하고 이런 기능을 수행하는 것이 로더이다.
1) 서로 독립적으로 작성되고 번역된 모듈 사이에 연관을 맺어주는 작업을 연결(linking)이라 한다.
2) 각 모듈 내에서 자기 모듈 내에 정의되지 않은 기호를 사용하기 위해서는 외부 기호를 선언해야 하며 언어 번역기에 의해 처리된 목적 모듈을 재배치 가능 모듈이라 한다.
3) 링커와 로더의 수행과정
P48 그림 [링커와 로더의 수행과정]
4) 연결 편집의 기능
⸁ 연결 기능(Module linking)
· 모듈러 프로그래밍이 가능케 함
· 프로그래머에 의해 프로그램이 여러 개의 부 프로그램으로 분할되어 제어구간들에 분할되거나 서로 다른 언어로 작성될 수 있게 함
· 연결 과정중에 모듈간 기호 참조는 해결되며, 출력결과는 보조기억 장치에 저장
⸂ 편집기능
· 제어문장을 사용하여 어떤 구간을 대치, 삭제, 재배열하는 것
· 프로그램 수정은 편집기능으로 인해 상당히 쉬워지고, 효율적
· 주어진 제어문장의 내용에 따라 원시 프로그램의 전체가 아닌 수정된 구간만이 재번역 및 재연결 편집
⸃ 라이브러리 호출 기능(library call mechanism)
· 입출력 제어 루틴과 표준 함수의 처리는 주로 연결 편집기에 의해 이루어지며, 입출력 관련 문장과 표준 함수 등의 호출은 해당 서브 루틴으로 대치되어 로드 모듈에 포함
· 사용자 프로그램에 기술된 각종 입출력 명령을 마크로라 부르며 이들에 대응하는 라이브러리 함수가 로드 모듈에 추가
로더는 목적 모듈을 받아 이 프로그램이 실행될 수 있도록 준비한 후 제어를 적재된 프로그램에 넘겨주어 그 프로그램이 실행되도록 역할을 수행
⸁ 연결(linking)
각 모듈 내의 코드나 자료에 대한 상징적 기호형태의 참조나 호출을 실제 번지로 변환 하여 연결, 결합하는 것
⸂ 할당(Allocation)
적재할 프로그램을 위해 기억 장소를 배정하는 것
⸃ 재배치(Relocation)
로드 모듈 내의 재비치 가능한 번지들을 할당된 기억 공간의 절대번지에 일치하도록 조정하는 것
⸄ 적재(loading)
실제로 재배치 완료된 로드 모듈과 자료를 주기억 장치에 저장
1) 로더 형태의 구분
⸁ 컴파일러에 의한 로더
⸂ 일반적 로더
p 50 그림 [컴파일러에 의한 로더와 일반적인 로더의 비교]
⸃ 절대 로더
· 가장 간단한 방식으로 기능은 단순히 언어변역기의 출력을 입력으로 받아 주기억 장치 의 지정된 장소에 적재하는 역할
· 절대 로더가 사용되는 경우, 로더의 기억 장소 할당기능과 모듈 연결기능은 프로그래머가 수행하고, 재배치 기능은 어셈블러가 하며, 기억 장소에 적재하는 일반 로더가 수행
⸄ 절대 로더의 단점
·전체 프로그램을 한꺼번에 번역해야 하고 하나의 서브 루틴이 변경되면 프로그램 전체를 다시 번역해야 함
·프로그래머가 각 프로그램이 시작될 번지를 어셈블러에게 알려 주어야 함.
·프로그래머는 서브 루틴 사용시 각 서브 루틴의 주기억 장치 내의 번지를 미리 알고 있어야 함
·절대번지 방식이므로 서브 루틴을 효율적으로 사용하기 어렵다.
p 51 [절대로더]
⸅ 재배치 로더
·절대 로더는 프로그램이 번역될 때 각 명령어의 절대번지가 결정된다는 단점을 가지고 있다.
·재배치 로더는 프로그램 번역시 절대번지를 지정하지 않고 번역된 프로그램을 실제 주기억 장치에 적재할 때 절대번지를 결정하므로 적재 시작 번지도 재배치 로더에 의해 지정
·여러 개의 프로시져 세그먼트, 하나의 자료 세그먼트를 공유
·각 세그먼트는 하나의 모듈로서 하나의 서브 루틴, 함수, 주 프로그램 또는 자료집합으로 구성된다.
·BSS로더는 고정길이의 직접 번지 명령어 형식을 가진 컴퓨터에서 사용
·BSS의 단점
* 전달 벡터에 의한 연결은, 제어 전달은 유용하지만, 다른 프로시져 세그먼트에 있는 자 료, 즉 외부자료의 적재와 저장에는 적합하지 않다.
* 전달 벡터는 목적 프로그램의 크기를 증가시킴
2) 세그먼트
연속적 단어 또는 바이트들의 정보집합으로 로더가 인식하는 프로시져나 자료의 최소단위
⸁ 세그먼트의 정보
·프로시져 내용물 및 세그먼트 상대 번지
·세그먼트의 전체 크기
·세그먼트 내에서 참조하는 외부기호와 위치
·세그먼트 내에서 정의된 모든 내부 기호들과 각각의 상대번지