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.




기타 잡담

* 상대방과 대화를 할 때 무언가 이해가 안되는 부분이 있는 것은 상대방이 나에게 중요한 핵심을 숨기고 있기 때문이다..ㅋㅋ
























+ Recent posts