Linkage Editor의 추가적인 기능들
* 서브루틴을 대체하고, 서브루틴을 패키지화 함.
* 일반적인 라이브러리들이 하나의 program 내에서 multiple storage(동일한 기능을 수행하는 명령어들이 메모리에 중복적으로 Load)되는 것을 피하게 해줌
-> 실행 시간에 common library를 결합해주기 위해 linkage Loader라는 애가 필요
Address Binding
* Assembliing Time : 가장 저급함.... 어셈블리 타임에 어드레스가 결정된다??? 비어있는 어드레스들을 사용할 수 없음
* Load Time : 우리가 지금까지 했던 일반적인 Loader
* Run Time : Dynamic Linking Library. 복잡도는 증가하겠지만, 유연성 역시 증가(Complexity, Flexibility)
각 Linker&Loader의 실행 타임
* Linkage Editor : before load time
- Linkage Editor의 역할은 Linking은 되어 있으나 실제 Address는 가지고 있지 않은 일종의 Data로 축적해놓은 상태이다. 이 후 Relocating Loader에 의해 Address를 가지게 된다.
* Linking Loader : at load time
- 7장에서 배운 Loader.
- Pass1 과정에서 external symbols들의 주소를 할당하고
- Pass2 과정에서 실제 Loading, relocation, linking을 수행한다.
* Dynamic Linking : after load time
- execution time까지 linking function을 연기한다.
- execution 되었을 때 subroutine의 load와 linking을 수행된다.
- dynamic loading, load on call 이라고도 불린다.
Dynamic Linking으로 수행되는 Application
* Execution Time 과정에서 외부의 함수 또는 공유된 객체의 실행이 필요할 경우 허용되어 memory에 적재된다.
load and call(=Dynamic Linking) 요청은 OS의 dynamic Loader에 의해 handling된다.
- 예시 : error handling routines
컴파일러 입문
* 컴파일러란 Translation을 어떻게 할지에 대한 Rule을 가르치는 학문이다.
* Assembler와 달리 자유도가 매우 높기 때문에 쉽사리 눈에 보이지 않다.
좋은 프로그래밍 언어의 요건은
* 문법적인 구조(syntax)와 의미(semantics)가 명확해야 하고,
* 프로그래머의 생각을 자연스럽게 표현할 수 있어야 하며(=문법이 너무 복잡할 경우 불가능)
* 호환성(=이식성)
* 신뢰성
* 모듈화
* 효율성(?)
* 언어의 확장성이 우수(버전 관리를 의미하는 건가?)
* 좋은 프로그래밍 환경 - vendors, consortium이 뒷받쳐줘야 한다.(ex. Java의 eclipse)
용어 설명
컴파일러
* 고 수준의 프로그래밍 언어를 특정 컴퓨터에서 실행 가능한 코드로 변경하는 작업
-ex) C compiler on SPARC
C 프로그램을 입력받아 SPARC에서 동작 가능한 코드로 변경
* Source Program -> Front_End -> IC(=Intermediate Code) -> BackEnd -> Object Code
- Front_End~Back_End : Compiler의 역할
- Front_End는 language Dependent하고 Back_End는 Machine Dependent하다.
Cross Compiler
* machineA에서 돌아가게 만든 Compiler에 코드를 추가하여 machineB에서 돌아가게 만든 컴파일러
BootStrapping
* 컴파일러(or 어셈블러)를 컴파일 하고자하는 프로그래밍 언어로 작성하는 과정. -> 셀프 호스팅 컴파일러로 이어짐.
Interpreter
* 프로그램을 직접적으로 기계가 동작할 수 있는 sequence로 변환하는 것.
* C : batch-processing - 일괄 처리
* Compiler : Operational System
* Interpreter : Developing System. or Educational System.
기타 잡담
* 상대방과 대화를 할 때 무언가 이해가 안되는 부분이 있는 것은 상대방이 나에게 중요한 핵심을 숨기고 있기 때문이다..ㅋㅋ