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.




기타 잡담

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
























이번 수업에서는 Machine-Independent Loader Features. 즉, 기계에 독립적인 Loader의 특징에 대해서 공부해보려 한다.


Automatic library search

자동적으로 외부의 reference를 관리하는 방식.

이러한 linking과 loading의 옵션

: 대체할 소스를 입력시킬 수 있다 - INCLUDE

: 외부 참조를 변경하거나, 제거할 수 있다 - DELETE, CHANGE

: 외부 참조의 자동 처리를 조절할 수 있다...?


목표

loaded된 프로그램에 subprogram의 routines들을 자동적으로 통합시키는 것


<실행 순서>

Linkage Loader

* 참조되었지만 정의되지 않은 외부 심볼들을 계속적으로 추적해야 한다. [ESTAB(=External Symbol TABle)을 이용하여]

* Pass 1 마지막에 undefined된 심볼이 존재한다면 "unresolved"라고 명명한다.

* Loader는 unresolved된 심볼에 대해서 library들을 검사한다.

  -> 기존에는 단순히 에러를 리턴하였다.

* 모든 unresolved 심볼의 정의를 찾을 때까지 라이브러리를 계속 search한다.


Automatic Library Search에 대한 추가적인 discussion

* linking loader는 override가 가능하다.

* linking loader가 모든 object program의 Define record를 탐색하는 과정에서 Directory(=계층적으로 자료를 저장) 하면 더욱 효율적으로 탐색을 수행할 수 있다. -> data


Loder Option

* User가 직접 지시하여 기존의 processing을 수정할 수 있는 것.

INCLUDE : 라이브러리를 포함시키는 것

DELETE : 심볼을 삭제시키는 것

CHANGE : 심볼을 바꾸는 것

LIBRARY MYLIB : 사용자가 만든 라이브러리를 먼저 탐색하는 것(General함)

NOCALL : 심볼을 unresolved 상태로 남겨놓는 것



Loader Design Option


Linking Loader와 Linkage Editor

Linking Loader

 Linkage editor

* 모든 linking과 relocation을 수행한다.

* automatic library search를 포함하고,

프로그램의 실행을 위해 메모리에 link된 프로그램을 load한다.


* 거의 모든 Program 과정에서 reassembled되는 것

= 계속 바뀌는 것. (인풋 아웃풋을 이야기하는 것이 아님)

ex) 프로그램 개발 과정, 테스트 환경 같은 것들은 개발을 수행하면서 프로그램의 알고리즘이 계속 바뀌게 되므로 계속 reassemble을 수행해줘야 함.

 * 나중에 실행하기 위해 프로그램의 link된 버전을 생산한다.


* reassemble할 필요 없이 많이 실행 되는 것.

 = standard library. 이는 우리가 계속 바꾸지 않음.

  


Linkage Editor는 Dynamic Linking을 수행하기 위해서 사용됨.


Dynamic Linking이란?

* Runtime 과정에서 Dynamic Loader에 의해 필요한 부분이 Memory에 적재되는 것.

ex) Exception Handler




잡담


탐색기의 불편한 점... 다운로드의 불편한 점... XML... URI.... Rule Engine....


윈도우의 탐색기는 과거나 지금이나 변한 것이 하나도 없다.

현재 윈도우의 탐색기는 탐색을 전적으로 User가 책임져야 한다.

탐색기는 단순히 탐색을 수행할 수 있게 도와주는 것이 아니라 각 파일 간의 relation을 형성하여, 하나의 파일을 실행시켰을 때 해당 파일과 연관된 다양한 파일 또는 URL들을 띄워줌으로써 과거에 수행했던 작업을 계속적으로 수행할 수 있게 도와주면 정말 좋을듯 하다. -> 특허 등록 상태 ㅎㅎ


다운로드는 어디서 다운로드를 받았는지 URL을 tag 형태로 저장해놓으면 정말 좋을 거 같은데 그러한 기능이 없음.


AI는 relation을 만드는 학문. 이러한 relation은 Rule engine을 이용하여 만들 수 있음. 아주 강력한 도구.

Rule-engine은 사람이 concurrent하게 일할 수 있게 해줌.





+ Recent posts