학습 주제
linking 중 static linking이라는 것을 학습했다.
정리한 내용
7.2 Static Linking(정적연결)
static linking이란? relocatable object file들과 command-line에서의 인자들을 입력으로 받아서, 완전히 link된 object file들을 생성하는 것을 말한다.
그럼 지금까지 나온 relocatable object file 이란 뭘까? → 이건 바로 아래 7.3에서 살펴볼 것이다.
여기서는 실행 가능한 file로 build하기 위해서 linker가 수행해야 하는 두가지 작업에 대해 알아보자.
Step1. Symbol resolution
object file들은 여러 symbol들을 정의하고 또한 참조하기도 한다. 여기서의 symbol이란 함수, 전역 변수, 그리고 static 변수 등을 말한다. 이 symbol resolution의 목적은 각 symbol의 참조를 딱 하나의 symbol 정의와 연관 짓는 것이다.
Step2. Relocation
compiler와 assembler는 주소가 0에서부터 시작하도록 code와 data section을 생성한다. 즉, 하나의 relocatable object file에서는 전부 주소가 0으로 시작한다.
생성된 relocatable object file을 objdump 명령어로 disassemble 한 결과이다. -d 옵션은 disassemble을 하기 위함이고, -S는 이를 assembly로 보기 위함이다. 여기서 알 수 있는 점은 각 relocatable object file은 주소가 0부터 시작한다는 점이다.
assembler까지의 단계에서 생성된 section들을 재배치함에 따라, symbol 정의는 memory location에 재배치 되고, symbol에 대한 참조 역시 올바른 symbol 정의와 연관될 수 있도록 재배치된 memory location의 위치를 가리키도록 변경된다. 여기서의 relocation들은 assembler가 생성한 세부 instruction들을 이용해 linker가 수행하게 된다. 이 instruction들은 relocation entries라고 부른다.
미리 알아야 할 개념적인 것들
- object file들은 단지 byte block들로 이루어져 있다.
- program code block
- program data block
- 여러 자료구조들(linker와 loader를 안내하기 위함)
- linker는 이 block들을 합치는 작업을 한다.
- 이 block들의 run-time 위치(memory상의 위치)를 결정한다.
- code와 data block들의 location(주소)을 수정한다.
- linker는 target-machine에 의존적이지 않다.
- machine-dependency한 것들은 전부 compile과 assemble 과정에서 전부 이뤄진다.
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
[CSAPP] 7.4 Relocatable Object Files(재배치 가능 목적 파일) (0) | 2023.02.15 |
---|---|
[CSAPP] 7.3 Object Files(목적 파일) (0) | 2023.02.15 |
[CSAPP] 7.1 Compiler Drivers(컴파일러 드라이버) (0) | 2023.02.15 |
[CSAPP] 6.6 Putting It Together: The Impact of Caches on Program Performance(프로그램 성능에 대한 캐시의 영향) (0) | 2023.02.15 |
[CSAPP] 6.5 Writing Cache-Friendly Code(캐시 친화적 코드 작성) (0) | 2023.02.15 |