Linkers and Loaders

공부하자·2022년 10월 17일
0

시스템프로그래밍

목록 보기
6/11

Translating and Starting a Program

  • A translation hierarchy for high-level language program like C
    • First compiled into an assembly language program and then assembled into an object module in machine language
    • The linker combines multiple modules with library routines to resolve all references
    • The loader then places the machine code into the proper memory locations for execution by the processor
  • To speed up the translation process, some steps are skipped or combined, but these are the logical 4 phases that programs go through:
    • Some compilers produce object modules directly, and some systems use linking loaders that perform the last two steps
  • C와 같은 고급 언어 프로그램을 위한 번역 계층.
    • 먼저 어셈블리 언어 프로그램으로 컴파일된 후 기계어로 객체 모듈로 조립됨
    • 링커는 모든 참조를 해결하기 위해 여러 모듈을 라이브러리 루틴과 결합함
    • 그런 다음 로더는 프로세서에 의해 실행될 수 있도록 기계 코드를 적절한 메모리 위치에 배치한다
  • 번역 프로세스의 속도를 높이기 위해 일부 단계를 건너뛰거나 결합하지만 프로그램이 거쳐야 하는 논리적인 4단계는 다음과 같다.
    • 일부 컴파일러는 객체 모듈을 직접 생성하며, 일부 시스템은 마지막 두 단계를 수행하는 링크 로더를 사용한다.

compile-assembler-linker-loader
high level language로 프로그램을 작성하면 translation을 따라야 한다.

Linkers

  • Separate compilation
    • Splitting a program across many files, each of which contains a logically related collection of subroutines and data structures that form a module in a larger program
    • A file, also called a module, can be compiled and assembled without knowledge of what is in the other files, so changes to one module do not require recompiling the entire program
    • Separate compilation necessitates the additional step of linking to combine object files from separate modules and fix their unresolved references
  • 별도 compilation
    • 여러 파일에 걸쳐 프로그램을 분할하고, 각 파일에 논리적으로 관련된 서브루틴과 더 큰 프로그램에서 모듈을 구성하는 데이터 구조 모음이 포함되어 있다.
    • 모듈이라고도 하는 파일은 다른 파일에 무엇이 있는지 몰라도 컴파일되고 조립될 수 있으므로 한 모듈을 변경하면 전체 프로그램을 다시 컴파일할 필요가 없다.
    • 별도의 컴파일을 사용하려면 별도의 모듈의 객체 파일을 결합하고 확인되지 않은 참조를 수정하기 위해 링크하는 추가 단계가 필요하다.

linker가 필요한 이유는 코드를 짜다보면 여러 파일을 나누어서 프로그래밍을 하게 되는 일이 많다. 다른 이유는 seperate compliation 기능을 이용하기 위함이다. 어떤 프로그램을 짤 때 소스 파일로 나누어서 짤 수 있다. 각 소스 파일이 object file로 만들어지는데 assmbly 과정이 독립적으로 이루어지는 것이 seperate compliation이다. 각각 다른 프로그램 파일인 것처럼 프로그래밍할 수 있는 것이다.
특정 소스 파일을 수정하면 수정된 파일만 compile해서 기존 executable file을 업데이트할 수 있다.
source file이 수 백개, 수 천개가 될 수 있다는 것을 유의한다.
이를 위해 object file을 묶어주는 linker가 필요하다.


  • Linker
    • A system program that combines independently assembled machine language programs, and resolves all undefined labels into an executable file (by using the relocation information and symbol table in each object module)
    • The linker produces an executable file that can be run on a computer. Typically, this file has the same format as an object file, except that it contains no unresolved references
  • 링커
    • 독립적으로 조립된 기계어 프로그램을 결합하고 정의되지 않은 모든 레이블을 실행 파일로 해결하는 시스템 프로그램(각 개체 모듈의 재배치 정보 및 기호 테이블을 사용하여)
    • 링커는 컴퓨터에서 실행할 수 있는 실행 파일을 생성한다. 일반적으로 이 파일의 형식은 개체 파일과 동일하지만 확인되지 않은 참조가 포함되어 있지 않다.

linker는 executable file를 생성한다. no unsolved references.

  • In summary, a linker performs 3 tasks:
    • Searches the program libraries(= prewritten routines) to find library routines used by the program
    • Determines the memory locations that each object module will occupy and relocates its instructions by adjusting absolute references
    • Resolves external references among object files
  • 요약하면 링커는 다음 세 가지 작업을 수행한다.
    • 프로그램 라이브러리(= 사전 작성된 루틴)를 검색하여 프로그램에서 사용하는 라이브러리 루틴을 찾는다.
    • 절대 참조를 조정하여 각 개체 모듈이 점유할 메모리 위치를 결정하고 명령어를 재배치한다.
    • 개체 파일 간의 외부 참조를 확인한다.

1) library routines를 찾는다.
2) absolute references를 조정하여 메모리 위치를 결정하고 명령어를 재배치한다.
3) 외부 참조를 확인한다.

여러 object file을 묶고, resolve reference들을 처리해준다. reference는 external reference가 될 수도 있고 relocation reference가 될 수도 있다.

Loader

  • A program produced by the linker can be run (i.e., executable). Before being run, the program resides in a file on secondary storage, such as a disk. The loader in an operating system brings a program into memory and starts it running
  • 링커에 의해 생성된 프로그램은 실행될 수 있다(즉, 실행 가능). 프로그램이 실행되기 전에 디스크와 같은 보조 저장소의 파일에 상주한다. 운영 체제의 로더는 프로그램을 메모리로 가져와 실행을 시작한다.
  • Thus, to start a program, the loader performs the following steps:
      1. Read the executable file’s header to determine the size of the text and data segments
      1. Creates a new address space (for the program) large enough for the text and data segments, along with a stack segment
      1. Copies the instructions and data from the executable file into the new address space (i.e., memory)
      1. Copies the parameters (if any) to the main program onto the stack
      1. Initializes the machine registers and sets the stack pointer to the first free location
      1. Jumps to a start-up routine that copies the parameters from the stack to registers and calls the main routine of the program. When returning from the main routine, the start-up routine terminates the program with the exit system call
  • 따라서 프로그램을 시작하기 위해 로더는 다음 단계를 수행한다.
      1. 실행 파일의 헤더를 읽고 텍스트 및 데이터 세그먼트의 크기를 확인한다.
      1. 스택 세그먼트와 함께 텍스트 및 데이터 세그먼트에 대해 충분히 큰 새 주소 공간을 만든다.
      1. 실행 파일의 명령과 데이터를 새 주소 공간(즉, 메모리)으로 복사한다.
      1. 매개 변수(있는 경우)를 메인 프로그램에 스택에 복사한다.
      1. 기계 레지스터를 초기화하고 스택 포인터를 첫 번째 자유 위치로 설정한다.
      1. 스택에서 레지스터로 매개 변수를 복사하고 프로그램의 주 루틴을 호출하는 시작 루틴으로 이동한다. 기본 루틴에서 복귀하면 시동 루틴이 종료 시스템 호출과 함께 프로그램을 종료한다.

loader는 linker가 하나의 executable file을 만들면 메모리에 올리고 실행을 시켜주는 역할을 한다.


  • Loader
    • A system program of performing the loading function, which places an object program in main memory for execution
  • Many loaders also support relocation and linking.
    • Relocation modifies the absolute addresses in the object program.
    • Linking combines two or more separate object programs.
  • Two kinds of a loader:
    • Absolute loader
    • Linking loader
  • Loader
    • 로딩 기능을 수행하는 시스템 프로그램으로, 객체 프로그램을 메인 메모리에 저장하여 실행한다.
  • 또한 많은 로더가 재배치링크를 지원한다.
    • 재배치하면 개체 프로그램의 절대 주소가 수정된다.
    • 링크는 두 개 이상의 개별 객체 프로그램을 결합한다.
  • 두 가지 종류의 로더:
    • Absolute loader
    • Linking loader

loader: loading function, relocation, linking
두 가지 종류의 loader: absolute loader, linking loader

핵심은 loader가 loading function을 수행하는 system program이라는 것이다. relocation이나 linking과 같은 기능을 가져와서 쓸 수가 있다. 지원 가능 여부에 따라 absolute, linking으로 구분한다.

Basic Loader Functions

  • Absolute Loader
    • The simplest loader with neither linking nor program relocation operations
  • All functions are accomplished in a single pass.
    • Header record is checked to verify that the correct program has been presented for loading and that it will fit into the available memory
    • As each Text record is read, the object code it contains is moved to the indicated address in memory
    • When the End record is encountered, the loader jumps to the specified address to begin execution of the loaded program
  • 절대 로더
    • 연결 또는 프로그램 재배치 작업이 없는 가장 간단한 로더
  • 모든 기능은 단일 패스로 수행된다.
    • 헤더 레코드를 점검하여 로드하기 위해 올바른 프로그램이 제공되었는지, 사용 가능한 메모리에 맞는지 확인한다.
    • 텍스트 레코드를 읽으면 해당 레코드에 포함된 개체 코드가 메모리의 지정된 주소로 이동된다.
    • End record가 발생하면 로더가 지정된 주소로 점프하여 로드된 프로그램의 실행을 시작한다.

absolute loader
linking이나 program relocation 작업이 없다.
모든 작업은 single pass.
header record 점검. text record 읽기.
end record에 첫 실행할 instruction의 주소가 있다. 주소로 jump한 후 실행이 된다.

Fig. 3.1 Loading of Absolute Program

  • (a) Example of the object program (same as Fig. 2.3)

  • (b) The program loaded in memory

memory state를 가지게 된다. header record대로 1000이라는 주소 값에 memory에 데이터를 올린다.

Fig. 3.2 Absolute Loader Algorithm

Boot Loader (Bootstrap loader)

  • A special type of absolute loaders, executed when a computer is first turned on.
    • Loads the first program to be executed (usually,anoperatingsystem)
  • The h/w logic reads a program from address 0 of ROM
    • ROM is installed by the manufacturer
    • ROM contains bootstrapping program (boot loader) and some other routines that controls h/w (e.g., BIOS)
  • No relocation & no linking
  • 컴퓨터를 처음 켤 때 실행되는 특별한 유형의 절대 로더이다.
    • 실행할 첫 번째 프로그램(일반적으로 운영 체제)을 로드한다.
  • H/W 로직은 ROM의 주소 0에서 프로그램을 읽는다.
    • ROM은 제조업체에 의해 설치된다.
    • ROM은 부트스트래핑 프로그램(부트 로더)과 h/w를 제어하는 다른 루틴(예: BIOS)을 포함한다.
  • 재배치 및 링크 없음

Boot Loader
absolute의 하나의 예제. OS를 load하기 위한 loader. 요즘에는 ROM보다는 flash memory를 사용한다.

Absolute Loader: Pros & Cons

  • Pros
    • Simplicity & Efficiency
  • Cons
    • Programmers must specify (when the program is assembled) the actual address at which the program will be loaded into memory.
      • -> Not possible with larger and more advanced machines
    • All subroutines must have pre-assigned absolute addresses.
      • -> Makes it difficult to use subroutine libraries efficiently
    • Cannot run several programs together
  • 장점
    • 단순성 및 효율성
  • 단점
    • 프로그래머는 프로그램이 메모리에 로드될 실제 주소를 지정해야 한다.
      • -> 더 크고 더 발전된 기계로는 불가능
    • 모든 서브루틴에는 사전 할당된 절대 주소가 있어야 한다.
      • -> 서브루틴 라이브러리를 효율적으로 사용하기 어렵게 한다.
    • 여러 프로그램을 함께 실행할 수 없다.

장점은 단순해서 구현하기 쉽고 한 번에 올릴 수 있어서 효율적이라는 것이다. 단점으로는 start address를 정해줘야 하고, 더 나아가서 서브루틴의 start address도 정해줘야 하며, 여러 프로그램을 함께 실행할 수 없다는 것이 있다.

Machine-Dependent Loader Features

  • Linking Loader
    • More complex loader, suitable for use on a SIC/XE system and on most modern computers
    • Program relocation, linking, and simple loading functions
  • Relocation
    • The way relocation is implemented in a loader is dependent onmachine characteristics.
    • Two methods for specifying relocation as part of the object program -> use of “Modification record” and “Relocation bit”
  • 연결 로더
    • SIC/XE 시스템 및 대부분의 최신 컴퓨터에서 사용하기에 적합한 보다 복잡한 로더
    • 프로그램 재배치, 링크 및 단순 로딩 기능
    • 재배치
    • 로더에서 재배치가 구현되는 방법은 기계 특성에 따라 달라진다.
    • 객체 프로그램의 일부로 재배치를 지정하는 두 가지 방법 -> "수정 레코드"와 " 재배치 비트"의 사용

Linking Loader.
절대 주소 instruction 수정.
Modification record, Relocation bit.

Relocation with M record

  • A general method for specifying relocation as part of object program: “Modification record scheme” for SIC/XE
    • Fig. 3.4, the source program equal to Fig. 2.6
      • Most of the instructions use relative or immediate addressing
    • Fig. 3.5, the object program corresponding to Fig. 3.4
  • Not well suited for all machine architectures, such as SIC basic version
    • Fig. 3.6, the relocatable program written for the standard SIC
      • Most instructions must be modified for program relocation
      • This requires 31 Modification records, which results in an object program more than twice as large as the one in Fig.3.5
  • 객체 프로그램의 일부로 재배치를 지정하는 일반적인 방법: SIC/XE용 "수정 기록 체계"
    • 그림 3.4, 그림 2.6과 동일한 소스 프로그램
      • 대부분의 지침은 상대 또는 즉시 주소 지정을 사용한다.
    • 그림 3.5, 그림 3.4에 해당하는 객체 프로그램
  • SIC 기본 버전과 같은 모든 시스템 아키텍처에 적합하지 않음
    • 그림 3.6, 표준 SIC용으로 작성된 재배치 가능 프로그램
      • 프로그램 재배치를 위해 대부분의 지침을 수정해야 한다.
      • 이를 위해서는 31개의 수정 레코드가 필요하며, 이는 그림 3.5에 있는 것보다 두 배 이상 큰 객체 프로그램을 초래한다.

재배치 지정: Modification record scheme. SIC/XE

Fig. 3.5 Object Program with Relocation by Modification Records

  • There is one Modification record for each value that must be changed during relocation (in this case, 3 instructions)
    • Each Modification record specifies the starting address and length of the field whose value is to be altered. It then describes the modification to be performed
    • Here, all modifications add the value of the symbol COPY, which represents the starting address of the program
  • 재배치 중에 변경해야 하는 각 값에 대해 하나의 수정 레코드가 있다(이 경우 3개의 지침).
    • 각 수정 레코드는 값을 변경할 필드의 시작 주소와 길이를 지정한다. 그런 다음 수행할 수정 사항을 설명한다.
    • 여기서 모든 수정사항은 프로그램의 시작 주소를 나타내는 기호 COPY의 값을 추가한다.

Fig. 3.6 Relocatable Program for a standard SIC Machine



Relocation with Bit Mask

  • An alternative method for specifying relocation as part of object program: “Relocation bit mask” for SIC
    • Useful for a machine primarily using direct addressing and having a fixed instruction format
    • Observation of modification record
      • Record format: [address to be modified, length]
        • -> If instruction format is fixed, the length part can be removed
        • -> Instead of address field, bit-vector (= relocation bit) can be used.
  • The relocation bit can be set either to 1 or 0:
    • “1” -> program’s starting address is to be added to this word when relocated
    • “0” -> no modification is necessary
  • 객체 프로그램의 일부로 재배치를 지정하는 대체 방법: SIC용 "Relocation bit mask"
    • 주로 직접 어드레싱을 사용하고 고정된 명령 형식을 가진 기계에 유용하다.
    • 수정기록의 관찰
      • 기록 형식 : [수정할 주소, 길이]
        • -> 사용설명서 형식이 고정되어 있는 경우 길이 부분을 제거할 수 있다.
        • -> 주소 필드 대신 비트맵(= 재배치 비트)을 사용할 수 있다.
  • 재배치 비트는 1 또는 0으로 설정할 수 있습니다.
    • "1" -> program프로그램의 시작 주소는 재배치 시 이 단어에 추가된다.
    • "0" -> 수정 필요 없음

재배치 지정 대체 방법: Relocation bit mask. SIC.
direct addressing, fixed instruction format 유용
1: 재배치시 시작 주소 추가. 0: 수정 필요 없음.

Fig 3.7

relocation bit가 bit vector 형태로 text record에 삽입된다.
어떤 자리의 bit가 1로 setting되어 있는지 보고 어떤 것을 수정해야 하는지 결정한다.
ten bits for program instruction

Program linking

  • You should review Section 2.3.5 Control Sections and Program Linking
  • Brief Summary on “program linking”
    • A program can be thought as a logical entity that combines all of the related control sections.
    • However, from the loader’s point of view, there are only control sections that are to be linked, relocated, and loaded –i.e., no such thing as a program in this sense.
  • 섹션 2.3.5 제어 섹션 및 프로그램 링크를 검토해야 한다.
  • "프로그램 링크"에 대한 간략한 요약
    • 프로그램은 관련된 모든 제어 섹션을 결합하는 logical entity로 생각할 수 있다.
    • 그러나 로더의 관점에서 볼 때, 연결되고 재배치되고 로드되는 제어 섹션만 있을 뿐, 즉, 이런 의미에서 프로그램과 같은 것은 없다.

program linking : 프로그램은 control section을 결합하는 logical entity, loader의 관점에서 프로그램과 같은 것음 없음.

EXTDEF & EXTREF

  • EXTDEF (External Definition)
    • The EXTDEF statement in a control section names symbols, called external symbols, that are defined in this (present) control section and may be used by other sections
    • e.g.) EXTDEF BUFFER, BUFFEND, LENGTH
      EXTDEF LISTA, ENDA
  • EXTREF (External Reference)
    • The EXTREF statement names symbols used in this (present) control section and are defined elsewhere
    • e.g.) EXTREF RDREC, WRREC
      EXTREF LISTB, ENDB, LISTC, ENDC
  • EXTDEF(외부 정의)
    • 제어 섹션의 EXTDEF 문은 이(현재) 제어 섹션에 정의되고 다른 섹션에서 사용할 수 있는 외부 기호라고 하는 기호를 지정한다.
  • EXTREF(외부 참조)
    • EXTREF 문은 이(현재) 제어 섹션에서 사용되는 기호를 명명하며 다른 곳에서 정의된다.

EXTDEF: 다른 섹션에서 사용할 기호 명명
EXTREF: 사용되는 기호 명명

Fig 3.8

  • Sample programs illustrating linking and relocation
  • Each control section defines a list of items and the end of the list:
    • Control section PROGA: LISTA, ENDA
    • Control section PROGB: LISTB, ENDB
    • Control section PROGC: LISTC, ENDC
  • Each control section contains exactly the same set of references to these lists:
    • REF1 through REF3: instruction operands
    • REF4 through REF8: values of data words
  • 연결 및 재배치를 보여주는 샘플
  • 각 제어 섹션은 항목 목록과 목록의 끝을 정의한다.
    • 제어 섹션 PROGA: LISTA, ENDA
    • 제어 섹션 PROGB: LISTB, ENDB
    • 제어 섹션 PROGC: LISTC, ENDC
  • 각 제어 섹션에는 다음 목록에 대한 참조 집합이 정확히 동일하다.
    • REF1 ~ REF3: 명령 피연산자
    • REF4 ~ REF8: 데이터 단어의 값

linking and relocation
각 control section은 end of list 지정


progA에서는 같은 section에 정의되어 있어서 local 참조

Fig. 3.9

  • Object programs corresponding to Fig. 3.8
  • Find the differences in the way these identical expressions are handled within the three control sections.
    • REF1: Simply a local reference in control section A (thus, it can be assembled using a PC-relative addressing, and no modification for relocation or linking is necessary), but an external reference in control sections B and C (thus, it cannot be assembled and just can be modified later by the loader)
    • Also, look at REF2 and REF3
  • 그림 3.8에 해당하는 객체 프로그램
  • 세 개의 제어 섹션 내에서 동일한 식이 처리되는 방법의 차이를 확인해라.
    • REF1: 단순히 제어 섹션 A의 로컬 참조 (따라서 PC 관련 어드레싱을 사용하여 조립할 수 있으며, 재배치 또는 링크에 대한 수정이 필요하지 않음)가 제어 섹션 B와 C의 외부 참조(따라서, 로더에 의해 나중에 수정될 수 있음)가 있다.
    • 또한, REF2 및 REF3를 살펴보아라.

CS A local 참조: 수정 필요 x
CS B,C 외부 참조: 수정될 수 있음


Fig. 3.10(a)

  • General approach
    • Assembler evaluates as much of the expression as it can.
    • The remaining terms are passed on to the loader via M records.
    • As an example, consider REF4
  • Fig 3.10(a) shows the programs of Fig 3.8 in memory after linking and loading.
    • After relocation and linking is performed, each of REF4 through REF8 have resulted in the same value in each of the 3 control sections.
    • However, for the references that are instruction operands, the calculated values after loading do not always appear to be equal -> why?
  • 일반적인 접근
    • 어셈블러는 가능한 한 많은 식을 평가한다.
    • 나머지 조건은 M 레코드를 통해 로더에 전달된다.
    • 예를 들어, REF4를 고려해보자.
  • 그림 3.10(a)은 링크 및 로딩 후 메모리 내 Fig 3.8의 프로그램을 보여준다.
    • 재배치 및 연결이 수행된 후, REF4에서 REF8까지의 각 제어 구간에서 동일한 값이 나왔다.
    • 그러나 명령 피연산자인 참조의 경우 로드 후 계산된 값이 항상 동일하지는 않은 것 같다.-> 이유는 무엇인가?

relocation and linking 수행 이후 control section에서 same value
계산 값이 항상 동일하지는 않다.


Fig. 3.10(b)

  • It shows how the value for reference REF4 is computed with relocation and linking operations.
  • 참조 REF4의 값이 재배치 및 연결 연산을 통해 계산되는 방법을 보여준다.

Algorithm & Data Structures for a Linking Loader

  • We use Modification records for relocation so that the linking and relocation functions are performed using the same mechanism.
  • The algorithm for a linking loader is more complicated than the absolute loader algorithm.
    • Usually makes two passes over its input
  • 우리는 연결 및 재배치 기능이 동일한 메커니즘을 사용하여 수행되도록 재배치 시 수정 레코드를 사용한다.
  • 링크 로더를 위한 알고리즘은 절대 로더 알고리즘보다 더 복잡하다.
    • 일반적으로 입력을 두 번 통과한다.

Linking Loader Algorithm (1/2)

  • Pass 1: Assign addresses to all external symbols
    • Decides where each module will be located (PROGADDR & CSADDR).
      • PROGADDR is the beginning address in memory where the linked program is to be loaded
        » This information may be given by OS.
      • CSADDR is the starting address assigned to the control section currently being scanned by the loader
    • Prepare an external symbol table (ESTAB), for each external symbol
      • ESTAB is used to store information of external symbols
      • [control section, symbol name, symbol address]
  • Pass 1: 모든 외부 기호에 주소 할당
    • 각 모듈의 위치를 결정한다(PROGADDR 및 CSADDR).
      • PROGADDR은 연결된 프로그램이 로드될 메모리의 시작 주소이다.
        » 이 정보는 OS에서 제공할 수 있다.
      • CSADR은 로더가 현재 스캔 중인 제어 섹션에 할당된 시작 주소이다.
    • 각 외부 심볼에 대해 외부 심볼 테이블(ESTAB)을 준비한다.
      • ESTAB는 외부 기호의 정보를 저장하는 데 사용된다.
      • [제어부, 기호명, 기호주소]

PASS 1: 모든 외부 기호에 주소 할당

Fig. 3.11

Linking Loader Algorithm (2/2)

  • Pass 2: Perform actual loading, relocation, and linking
    • For a modification record, search the external symbol table
    • Modify absolute addresses as defined in modification record in the code itself.
    • Transfer the control to the program loaded
  • Refer to Fig 3.11 for the linking loader algorithm
  • Pass 2: 실제 로드, 재배치 및 링크 수행
    • 수정 레코드에 대해 외부 기호 테이블을 검색한다.
    • 코드 자체의 수정 레코드에 정의된 대로 절대 주소를 수정한다.
    • 로드된 프로그램으로 컨트롤 전송
  • 링크 로더 알고리즘은 그림 3.11을 참조해라.

Pass 2: load, relocation, link 수행

Dynamic Linking

  • Postpone linking process until the object code is actually used
    • A subroutine or library is loaded and linked to the rest of the program when it is first called
  • Achieve substantial savings of time and memory space
    • No need to load and link parts of a library that will not be used by the program
    • Allow several executing programs to share one copy of a subroutine or library
  • Object codes are stored in a “dynamic link library”
  • 객체 코드가 실제로 사용될 때까지 링크 프로세스 연기
    • 서브루틴 또는 라이브러리가 로드되고 처음 호출될 때 프로그램의 나머지 부분에 연결된다.
  • 시간과 메모리 공간을 크게 절약한다.
    • 프로그램에서 사용하지 않을 라이브러리의 일부를 로드하고 연결할 필요가 없다.
    • 여러 실행 프로그램이 하나의 서브루틴 또는 라이브러리의 복사본을 공유하도록 허용한다.
  • 개체 코드가 "동적 링크 라이브러리"에 저장된다.

object code가 사용될때 까지 link 연기
시간 메모리 공간 절약
동적 링크 라이브러리에 object code 저장

code를 memory에 올릴 때 실행하는 게 아니라, 코드 호출이 필요할 때 필요한 linking process가 dynamic linking이다.
다른 program도 참조할 수 있다.

An Example of Dynamic Linking (2/2)

user program이 sub routine을 사용하고 싶은데, 아직 라이브러리에 있다. loader가 먼저 메모리에 올려준다.

dynamic loader로 return한다.

profile
아주대학교 수업 기록

0개의 댓글