-
[시스템프로그래밍] 7강 로더와 링커의 기능, 로더의 형태, 바인딩, 연결 및 재배치 로더의 설계프로그래밍/시스템프로그래밍 2014. 4. 26. 05:52반응형
* 로더와 링커의 기능
주기억 장치의 할당
프로그램을 적재할 기억장치 내의 기억공간을 확보하는 것을 말한다
실제 적재될 주소를 부여받게 된다.
2. 연결(linking&LINK)
서로 다른 모듈 사이의 상호 외부기호를 참조할 때 이 기호들에 주소값을 주어 각 모듈들을 연결하여 적재 모듈로 만들어 주는 작업
3. 재배치 및 적재(relocation)
적재될 주소가 결정됨에 따라 수정되어야 할 기호들을 재배치
상대주소들을 수정하여 절대주소로 변경하는 작업을 수행
4. 프로그램의 연결(적재 : load)
재배치가 완료된 적재 모듈을 주기억 장치로 읽어들이는 작업을 말한다.
* 로더의 형태
로더의 형태로는 컴파일 즉시 로더, 링커 및 재배치 로더, 링킹 로다, 동적 로더로 나눌 수 있다.
컴파일 즉시 로더는 단순히 적재된 것을 실행 할 수 있도록 제어해 주는 기능을 말한다
bootstrap loader
컴퓨터를 부팅하거나 시동시킬 때 사용자가 컴퓨터를 사용할 수 있도록 외부기억장치로부터 운영체계를 읽어 와 주기억장치에 설치해 주는 프로그램
일반적으로 컴퓨터의 읽기용 기억장치 (ROM)에 저장되어 있다.
컴퓨터를 동작시키기 위해서는 미리 소프트웨어를 입력하지 않으면 안되는데 그것을 하기 위한 소프트웨어를 먼저 입력할 필요가 있는데 그를 위한 프로그램을 부트스트랩 로더라고 부른다, CPU속에 내장되어있다.
부트스트랩 로더는 단순하고 짧은 ROM 프로그램으로 작성되며 시스템 프로그램(커널)을 실행하기 위하여 주기억장치에 적재시키는 시나리오를 제공해 준다.
부팅시나리오란 부트스트랩 로더 -> 절대 로더 -> 재배치 로더 이다.
2. 절대 로더
절대 로더는 기계어로 된 프로그램을 미리 지정된 주기억장치 위에 적재하는 로더를 말한다.
절대 로더가 컴파일 즉시 로더 방식 출력결과가 주기억장치에 저장되지 않고 파일 등의 보조기억장소에 저장된다.
로더는 단지 실행 가능한 프로그램을 어셈블러가 정한 위치에 적재하는 일만 하게 되는데 절대 로더는 프로그래머가 어셈블러에게 그 프로그램이 적재될 주소를 알려주어야 한다는 것이 일반적인 로더와의 차이점이다.
3. 연결 및 재배치 로더
서로 다른 모듈 사이의 상호 외부기호를 참조해야 하는 경우 이 기호들이 주소값을 주어 각 모듈들을 연결하여 적재 모듈로 만들어야 하는 데 이러한 역할을 링킹이라고 한다.
외부기호 참조 시 기호 표에는 각 외부기호를 구분하여 표시할 필요가 있다
세그먼트를 나타내는 기호로 SD, 다른 외부 모듈에서 정의되는데 그곳에서 참조하는 기호로 ER, 그곳에서 정의나 기호는 LD 라 한다.
4. 동적 연결(Direct Linking)
실행 중인 여러 프로그램에서 동시에 프로시저나 라이브러리의 공유가 가능하도록 구현한 연결을 동적 링킹이라고 한다.
객체 지향 시스템에 효과적으로 적용가능하며 많은 모듈들로 구성된 프로그램의 경우 실행 시에 필요한 모듈만 링킹하면 된다는 이점이 있다.
5. 동적 적재
일반적인 로더는 할당, 연결, 재배치, 적재의 기능을 수행하게 되는데 동적 적재 로더는 한꺼번에 적재하는 것이 아니라 실행 시 필요한 부분만 적재하는 기능을 하도록 구현
기억장치에 서브루틴을 적재하는 일을 서브루틴이 호출될 때 까지 미루게 되고 그 외에 링크하는 작업까지 호출될 때까지 미루게 된다.
어셈블러가 원시 모듈들에서 목적 모듈과 링크 및 재배치에 관한 정보를 만들어 놓으면 동적 적재 로더는 주 프로그램만 적재하게 된다.
필요할 때 마다 링크하고 적재하여야 하는 부담과 복잡한 점이 있으나 필요한 부분만 링크, 적재 할 수있다.
* 바인딩
바인드는 프로그램 작성 시 2개 이상의 정보를 연관시켜 묶는다는 의미를 갖는다
프로그램 내에서 식별자를 그 대상과 관련짓는 것이다.
변수 배열, 라벨, 절차등의 명칭, 속성과 그 값을 연결시키는 것을 뜻함
일반적인 의미에서 객체의 어떤 속성값을 확정하도록 하는 과정, 속성과 개체 사이 또는 연산과 기호 사이와 같은 연관하게 하는 과정
바인딩이 일어나는 시간을 바인딩 시간이라 부르는데 바인딩과 바인딩 시간은 프로그래밍 언어 의미론에서 매우 중요한 개념이다.
바인딩은 언어 설계시간, 언어 구현시간, 컴파일 시간, 링크 시간, 적재 시간 또는 실행 시간에 일어 날 수 있다.
정적 바인딩은 바인딩이 한번, 영구적으로 발생하게 되면 동적 바인딩은 실행 중 반복적으로 발생하고 바인딩 시간은 프로그램에서 변수들이 갖는 속성이 완전히 결정되는 시간을 말하며 이름에 속성이 연결되는 시간을 말한다.
컴파일 시간 바인딩
컴파일 타임에 클래스가 응용 프로그램에 바인딩된 경우에는 응용 프로그램의 메타데이터에 해당 클래스가 들어 있는 어셈블리에 대한 참조가 포함된다.
런타임에 이러한 클래스가 참조되면 공용 언어 런타임에서 해당 어셈블리 로드 휴리스틱을 사용하여 해당하는 어셈블리를 찾고 로드
프로시저에 할당된 저장소 안에 있는 자료객체의 상대적 위치나 배열의 젖아방법과 크기 등은 언어 번역기가 결정
2. 적재 시간 바인딩
로더는 절대 프로그램의 각 논리주소를 수정하면서 재배치 가능한 주소를 주기억장치의 절대주소로 적재해야 하는데 이때의 시간을 적재 시간 바인딩이라고 한다.
메모리에 프로그램을 실행할 컴퓨터의 실제주소를 할당해 주는 시간이다.
3. 실행 시간 바인딩
실행 중 기억장치 세그먼트를 이동해야 할 경우에 필요한 시간을 말한다.
* 연결 및 재배치 로더의 설계
입력-목적 모듈은 세그먼트들로 구성되어 있으며 각 세그먼트는 최소한 한 개의 기호표를 포함
링킹 패스1과 패스2인 두단계의 패스로 구성
연결하기 위해서 목적 코드로 된 외부 모듈인 번역된 프로그램이 있어야 하고 외부기호표에 의해 모듈의 길이를 알고 있어야한다
다른 모듈에서 정의된 기호는 외부기호표에 모듈 내부에서 정의된 기호도 외부기호표에 표시한다.
재배치되어야 할 주소값들과 그 수정방법은 재배치 링크표에 의해 정보가 전달
사용자는 모듈의 외부기호를 선언 해주어야한다.
지시어는 EXTRN, PUBLIC이 있다.
기호가 동일한 세그먼트 내에 선언되어 있으면 NEAR, 다른 세그먼트 내에 선언되어 있으면 FAR로 선언해 주면된다.
EXTRN으로 선언된 기호는 외부에서 정의되고 내부에서 이용된다는 기호이고 PUBLIC으로 선언된 기호는 내부에서 정의되고 외부에서 이용하겠다는 기호임을 기억해야함
2. 재배치 과정
링크 및 재배치 과정에서 링커의 패스 1이 수행하는 일은 각 모듈을 배열하여 단순 링크된 모듈을 만들고 외부기호들을 종합하여 총괄 기호표를 생성
재배치 링크표들을 하나로 합하여 총괄재배치표를 생성
3. 연결 및 재배치에 필요한 정보
연결 및 재배치에 필요한 정보로는 패스 1에서 만드는 정보인 각 모듈들을 단순 링크한 모듈, 총괄 기호표, 총괄 재배치 링크표가 필요하며 이러한 정보를 이용하여 패스 2에의해 주소값들을 수정하여 적재 모듈을 생성, 주소들을 재배치하게 된다.
4. 전역적 심벌(global symbol)의 처리
절대 상수 : 같은 모듈 내에서 정의된 기호 사이의 뺄샘으로 이루어진 연산 결과는 항상 일정한데 이러한 상수를 절대 상수라고 부른다.
재배치 상수 : 기호의 값이 결정되어야 연산결과의 값이 결정되는 경우를 말한다.
5. 알고리즘
어셈블러가 링커 및 로더를 위해 모듈별로 제공하는 정보, 목적 코드로 번역된 모듈, 그리고 기호표들, 재배치 링크표에 의해 링커 및 로더가 하는일, 즉 서로다른 모듈 사이의 상호 외부기호를 참조할 수 있도록 적재모듈을 생성해 주며, 재배치가 완료된 적재 모듈을 주기억장치로 읽어들일수 있도록 구현하여야 한다.
반응형'프로그래밍 > 시스템프로그래밍' 카테고리의 다른 글
[시스템프로그래밍] 9강 프로그래밍 언어 개요, 어휘 분석기, 구문 분석기, 오류 처리 (0) 2014.04.27 [시스템프로그래밍] 8강 인터프리터의 기능, 인터프리터의 구조 (0) 2014.04.27 [시스템프로그래밍] 6강 매크로, 매크로의 기능, 매크로 프로세서의 설계 (0) 2014.04.26 [시스템 프로그래밍] 5강 어셈블러 개요, 이중 패스 어셈블러, 이중 패스 어셈블러의 설계, 다중 패스 어셈블러, 테이블 처리 (0) 2014.04.26 [시스템프로그래밍] 4강 어셈블리어 개요, 어셈블리 명령어, 어셈블러 지시어(의사 명령어) (0) 2014.04.26