Linkers and Loaders

taehee kim·2021년 6월 2일
0

1. Linker

:objective file, library등의 binaryfile들은 relocatable file로 다른 피지컬 주소로 옮길 수 있는 것들이다. 이러한 파일들을 묶어서 하나의 excutable한 파일로 만들어주는 것이 linker이다.

2. loader-exec()

:loader란 만들어진 excutable한 파일을 main memory로 loading하여 cpu로 처리할 수 있도록 하는 것을 말한다. exec()시스템 콜을 통하여 실행 시킬 수 있다.
./main을 실행하면 shell이 fork()를 통해 복제된 프로세스를 만들어내고 exec()시스템 콜로 loader가 작동하도록 하여 main 실행파일의 내용을 text segment에 덮어 씌운다.

cf)dynamically linked libraries

:위에서 컴파일 과정의 링킹에서 executable파일에 묶여 linking 되고 loader에 의해서 프로세스에 쓰여지는 static library와 다르게 dynamically linked librariesrun time에 실행되고 있는 프로세스에 필요한 부분이 부분적으로 loading되어 실행되게 된다. 이렇게 동작 할 때의 장점은 static library의 경우 모든 내용이 linking되어 메모리를 많이 차지하고 각 프로세스마다 linking이 일어나야 하는 반면에, dll의 경우 많은 프로세스가 dll을 공유하도록 만들어 메모리를 절약할 수 있다. 또한 static library의 경우 library가 linking이후에 바뀌더라도 반영되지 않으며(장점일수도 있음), 따라서 바뀐 라이브러리를 적용할 경우 새로 컴파일 해야한다.

profile
Fail Fast

0개의 댓글