# Memory Manager
- Dynamic Storage Allocation, Heap
- Demanding Paging
# Linker and Loader
* .c (source file) -> Compile -> .o (object file)-> linking -> executable file -> memory loading -> executing
* object file
: instructions, datas, address 정보, symbol table(프로그램에서 사용하는 symbol들에 대한 정보를 저장하는 자료구조), 링커가 프로그램 링킹을 위해 사용하는 정보(relocation table)
* Compiler : 소스파일을 오브젝트 파일로 변환
* Linker : 여러개의 오브젝트 파일을 하나의 실행가능한 파일로 변환
* Loader : OS의 한 부분으로 (fork, exec) 메모리에 프로그램을 로딩
# Section
: 오브젝트 파일을 구성하는 유닛. 어떤 데이터를 묶어둔 단위. text(code, instructions), datas, symbol table ...
- type이 각 section마다 다를 수 있음.
- 각 section은 메모리에 저장이 될 때 독자적인 영역을 가짐짐 => segment
<Object file의 Section 종류>
- Text Section : code, instructions
- Data Section : 초기화된 전역변수
- BSS Section : 초기화 되지 않은 전역변수 (Block Started by Symbol)
=> 전역변수를 Data Section과 BSS Section을 구별하는 이유 ?
초기화된 변수는 실제 메모리도 디스크상이지만 공간을 잡아야 하지만, 초기화 하지 않은 변수는 실제공간은 할당하지 않고 사이즈 정보등만 저장
- Other Section : symbol table, relocation table, ...
# Linking Process
<linking 과정의 문제점 - compiler가 주는 문제>
- 마이크로 프로세스는 프로그램을 수행할 때 symbol(함수명, 변수등)이 아닌 인스트럭션들의 op-code, operand 주소, branch의 target 주소를 보기때문에 symbol은 주소로 변환이 되어야 함. symbol을 주소로 변환하기 위해 실제 주소를 알아야 함.
* cross reference : 현재 파일에서 사용하고 있는 symbol이지만 다른 파일에서 주소의 위치가 정해진 symbol들의 주소
- cross reference를 알 수 없음
=> 여러 파일에 흩어져있는 주소들을 모아야 하므로 한번의 Path로는 주소들을 모으기 힘들기 때문에 최소 2 path를 통해서 주소들을 모을 수 있음.
=> symbol table : symbol들의 정보를 저장하는 테이블이며 엔트리는 각 symbol들이 됨(Symbol name, Section name, Section내의 Offset). linker가 수행
(같은 오브젝트파일에 들어있는 symbol의 주소는 당연히 알 수 있지)
- PC Relative Addressing : 현재 PC값에서 Symbol의 주소로 점프하는 주소. Relocatable Address
* Internal Symbol들에 대한 PC Relative Addressing을 하는 이유 : 전체 Section의 위치에 관계없이 PC로부터의 상대적인 주소는 변하지 않기 때문
'System > Etc.' 카테고리의 다른 글
[OS 기초] Segmentation and Paging (0) | 2015.10.02 |
---|---|
[OS 기초] Dynamic Storage Allocation (0) | 2015.09.30 |
[OS 기초] Deadlock (0) | 2015.09.30 |
[OS 기초] Process Synchronization (0) | 2015.09.25 |
[OS기초] CPU Scheduling (0) | 2015.09.22 |