링커(Linker)와 로더(Loader)

개복치·2023년 5월 6일

운영체제

목록 보기
1/3
post-thumbnail

1. 링커

1.1 링킹 (Linking)
	1) 여러 개의 코드와 데이터를 모아서 연결하여 메모리에 로드될 수 있고 실행될 수 있는 한 개의 파일로 만드는 작업
    2) 이 파일이 메모리에 로딩되어 실행
    3) 링크가 실행 되는 경우
    	- 컴파일시에 수행
        - 로딩시에 수행
        - 실행시에 수행
1.2 링커 (Linker)
	1) 링킹을 담당하는 프로그램
    2) 독립적인 컴파일을 가능하게 하는 중요한 역할
    3) 재배치 가능 오브젝트 파일을 하나의 이진 실행 파일로 결합
    	* 재배치 가능 오브젝트 파일 : 임의의 물리 메모리 위치에 적재되도록 설계된 오브젝트 파일로 컴파일되는 소스 파일
    4) 모듈 중에 한 개를 변경할 때, 다른 파일들을 재컴파일할 필요 없이 이 파일만을 간단히 재컴파일 하고 이를 다시 링크하여 변경사항을 적용 할 수 있음
1.3 링커의 기능(순서)
	<img src="https://velog.velcdn.com/images/dpwls2215/post/0537522a-a194-4801-a217-ca099997a286/image.png" width="40%" height="30%">
	1) Symbol Resolution
    	- Symbol : 함수의 이름, 변수의 이름 등등을 의미함
        - 여러개의 오브젝트 파일에 같은 이름의 함수 또는 같은 이름의 변수명이 정의 되어 있을 때 어떤 파일의 어떤 함수의 것을 사용해야하는 가 결정하는 일
    2) Relocation
    	- 재배치 오브젝트 파일(모듈)들을 하나의 이진 실행 파일로 결합하고, 각 심볼에 Run-Time Address를 할당함
        
        

2. 로더

2.1 로더 (Loader)
	1) 이진 실행 파일을 메모리에 적재하는데 사용
    2) 프로그램 부분에 최종 주소를 할당, 프로그램 코드와 데이터를 해당 주소와 일치하도록 조정
    3) 프로그램이 실행될 때, 코드가 라이브러리 함수를 호출하고 변수에 접근할 수 있도록 함
    4) 실제 대부분의 시스템은 프로그램을 적재할 때 라이브러리를 동적으로 링크
2.2 로더의 기능(순서)
	1) 할당(Allocation)
    	- 프로그램 실행을 위해 주기억장치 내에 공간을 확보하는 기능
    2) 연결(Linking)
    	- 부 프로그램(서브루틴) 호출 시 할당된 기억장소의 시작 주소를 호출 한 부분에 등록하여 연결하는 기능
    3) 재배치(Relocation)
    	- 보조기억장치에서 주기억장치로 옮기면서 할당된 실제 주소로 배치시키는 기능(맵핑)
    4) 적재(Loading)
    	- 프로그램을 할당된 주기억장소에 실제로 옮기는 기능
2.3 로더의 종류
	1) 컴파일 즉시로더(Complie and Go)
    	- 번역기가 로더의 역할까지 담당하는 것으로 프로그램의 크기가 크고 한 가지 언어로만 프로그램을 작성
        - 실행을 원할 때마다 번역을 해야함
        - 로더라고 하기에는 부적합
    2) 절대로더(Absoute Loader)
    	- 단순히 번역된 목적프로그램을 입력으로 받아들여 주기억장치의 프로그래머가 지정한 주소에 적재하는 기능을 가지는 간단한 로더
        - 재배치나 링크 등이 없고, 프로그래머가 절대 주소를 기억해야함
        - 다중 프로그래밍 방식에서 사용할 수 없음
    3) 재배치 로더(Relocating Loader)
    	- 주기억장치의 상태에 따라 목적프로그램을 주기억장치의 임의의 공간에 적재할 수 있도록 하는 로더
    4) 링킹로더(Linking Loader)
    	- 하나의 부 프로그램이 변경되어도 다른 모듈 프로그램을 다시 번역할 필요가 없도록 프로그램에 대한 기억장소 할당과 부 프로그램의 연결이 로더에 의해 자동으로 수행되는 프로그램
        - 직접연결로더(DLL)이 대표적
    5) 동적 적재(Dynamic Loading=Load on call)
    	- 모든 세그먼트를 주기억장치에 적재하지 않고 항상 필요한 부분만 주기억장치에 적재하고 나머지는 보조기억장치에 저장해두는 기법
        * 동적 연결 : 실제 수행시 연결과 적재를 이행하는 기법으로 프로시저 세그먼트나 자료세그먼트는 다른 어떤 프로시저가 수행 도중에 실제로 그것을 요구할 때까지 프로그램의 어떤 세그먼트와도 연결되지 않음
        
        

[참고]
https://haloworld.tistory.com/110
https://live-everyday.tistory.com/67
https://simsimjae.tistory.com/235
https://velog.io/@junttang/SP-7.2-Linking-Relocation-Step

0개의 댓글