Presentation is loading. Please wait.

Presentation is loading. Please wait.

제 3 장 로더와 링커(Loaders and Linkers)

Similar presentations


Presentation on theme: "제 3 장 로더와 링커(Loaders and Linkers)"— Presentation transcript:

1 제 3 장 로더와 링커(Loaders and Linkers)
목적 프로그램의 3 처리 과정들 로드(load): 실행을 위해 목적 프로그램을 메모리로 가져오는 것 재배치(relocation): 목적 프로그램을 원래 정의되었던 주소와 다른 주소에 적재될 수 있도록 목적 프로그램을 변경하는 것 링크(link): 둘 이상의 독립된 목적 프로그램들을 결합하고 서로 참조하기 위해 필요한 정보를 제공하는 것 로더의 기능에 따른 형태 로드, 재배치, 링크 모두 지원 재배치와 로드만 지원: 링커(linker) 또는 링크 편집기(linkage editor)가 따로 있어 링크 수행 3.1 기본적인 적재 기능(Basic Loading Functions) 3.1.1 절대 로더의 설계(Design of an Absolute Loader) 링크나 재배치 없어 간단 단일 패스: p125 Fig.3.1 참조 헤더 검사하여 메모리가 충분한지 확인 텍스트 레코드 읽어 목적 코드를 메모리의 지정된 주소로 이동 엔드 레코드 만나면 프로그램 시작 주소로 점프 알고리즘: p126 Fig.3.2 목적 프로그램: 한바이트의 16 진수 두 자리를 문자 형태의 16진수 두 바이트로 표현 로드된 명령: 16진수 두 자리의 값을 나타내는 한 바이트로 표현 팩킹(packing): 목적 프로그램의 각 바이트 쌍들이 로드되는 동안 한바이트로 팩됨 실제 시스템에서는 목적 프로그램을 이진 형태(임의의 2 진수)로 저장 시스템 프로그래밍

2 3.1.2 간단한 부츠트랩 로더(A Simple Bootstrap Loader): 절대 로더
0 번지에서 부츠트랩 프로그램 시작 입력장치 F1으로부터 OS 목적 프로그램 읽어 80 번지에 로드 GETC 서브루틴 F1으로부터 읽어들인 ASCII 문자를 16진수로 변환 “1” ~ ”9” (= 16진수 31 ~ 39) 1 ~ 9 : 48(16진수 30)을 빼서 “A” ~ “F” (=16진수 41 ~ 46) 10 ~ 15 : 55(16진수 37)을 빼서 EOF(16진수 04) 만나면 80 번지로 점프 30 이하의 ASCII 코드 값을 가지는 모든 입력 문자(입력 제어 문자들)는 건너뜀(skip) 16진수를 왼쪽으로 4 비트 shift하여 추출한 첫번째 16진수에 두번째 16진수를 더하여 두 16진수를 한 바이트로 조합함 조합된 바이트는 STCH 명령에 의해 레지스터 X가 가르키는 주소에 저장됨 TIXR 명령으로 레지스터 X의 값을 1 더함 3.2 로더의 기계 종속적인 특징(Machine-Dependent Loader Features) 절대 로더의 단점 로드 주소를 프로그래머가 지정해야 멀티프로그래밍 환경에서는 프로그램의 로드 주소를 미리 알 수 없음 재배치 가능 프로그램(relocatable programs)이어야 함 라이브러리를 효율적으로 이용하기 어려움 메모리를 효율적으로 이용하려면 라이브러리 안의 많은 서브 루틴들 중 필요한 서브 루틴만 선택적으로 로드해야 함 이 경우 서브 루틴들이 모두 미리 정해진 절대 주소를 가지고 있다면 효율적이기 어려움 3.2.1 재배치(Relocation) 재배치 로더(relocation loader) 또는 상대 로더(relative loader): 프로그램 재배치가 가능한 로더 시스템 프로그래밍

3 3.2.2 프로그램 링크하기(Program Linking) 제어 섹션 단위로
재배치 방법 수정 레코드 사용: p64, p89 참조 p131의 SIC/XE 프로그램 예제에서 15, 35, 65 행 직접 주소지정 방식만이 재배치의 영향을 받음 p133 SIC 표준형 프로그램 예제에서는 RSUB 제외한 모든 명령에 대하여 주소를 수정하기 위해 31개 수정 레코드가 필요하므로 매우 큰 목적 프로그램 생성 재배치 비트 사용: p134 Fig 3.7 직접 주소와 고정 명령어 형식을 사용하는 기계에서 텍스트 레코드의 길이 필드 다음에 3개의 16진수인 비트 마스크(bit mask): 해당 워드가 1로 설정되었으면 프로그램의 시작주소 더함 (예) FFC = 10 ~ 55 행의 10개 워드 수정 (예) EOO = 처음 3 워드만 수정 나머지는 데이터 상수와 RSUB 문 210 행 LDX이 새로운 레코드로 출력된 이유: 만일 앞의 텍스트 레코드에 위치시키면 185 행의 한 바이트 때문에 재배치 비트와 일치 시키기 어려우므로(한 워드는 3 바이트) 3.2.2 프로그램 링크하기(Program Linking) 제어 섹션 단위로 링크(link) 재배치(relocation) 로드(load) (예) p136~138 Fig.3.8~3.9 REF1 PROGA PC 상대: PC(=0023) = 01D PROGB 피연산자 주소: 00000 M LISTA 직접주소 확장명령: 로드 후 4040 PROGC M LISTA REF2 피연산자 주소: = 00004 M LISTB PC 상대: PC(=003D) + 4 =24+3=27 M00001D05+LISTB 시스템 프로그래밍

4 REF3: ENDA-LISTA 값의 즉시 피연산자
PROGA 즉시: PROGB 피연산자 주소: 00000 M00003E05+ENDA M00003E05-LISTA PROGC M ENDA M LISTA REF4: 피연산자 주소: M LISTC 피연산자 주소: M ENDA M LISTA M LISTC 피연산자 주소: M ENDA M LISTA M PROGC REF5 PROGA 피연산자 주소: FFFFF6 (1010(2)의 2의보수:0101(2)+1=0110(2)=6(16) 0000A의 2의보수는 FFFF5 +1 = FFFF6) M ENDC M LISTC PROGB (1010(2)의 2의보:수0101(2)+1=0110(2)=6(16) M ENDC M LISTC PROGC 피연산자 주소: (ENDC-LISTC는 16진수 12는 10진수 18, 18-10은 8) REF6~REF8는 각자 p140 Fig.3.10(a) 참조: 마지막 상수 부분은 모두 같음 p141 Fig.3.10(b) 참조: REF4에 대한 재배치와 링크 연산 LISTC(4112=40E2+30) = 4126 ENDA-LISTA+LISTC = = 4126 PTOGC ENDA-LISTA+PROGC = E2 = 4126 시스템 프로그래밍

5 3.2.3 링킹 로더의 알고리즘과 자료 구조(Algorithm and Data Structures for a Linking Loader)
링크 및 재배치를 같은 방법으로 수행 SIC/XE 외부 심볼 주소 정해질때(외부 심볼을 가진 섹션이 읽혀질 때)까지 링크 못함 이중 패스(two passes) 링킹 로더 패스 1: 모든 외부 심볼 주소 배정 패스 2: 실제 로드, 재배치, 링크 자료 구조 외부 심볼 테이블(ESTAB) 외부 심볼 이름, 주소 해쉬 구조(hashed organization) PROGADDR(program load address) 링크된 프로그램이 메모리에 로드된 시작 주소(OS가 로더에게 알려줌) 첫번째 제어섹션의 주소 CSADDR(control section address) 현재 로더가 스캔하고 있는 제어 섹션의 시작 주소 상대 주소 + CSADDR = 절대 주소 알고리즘 패스 1: p143 Fig.3.11 (a) 헤더 레코드(Header record)와 정의 레코드(Define record)만 고려 변수들 PROGADDR(program load address): OS가 알려줌 CSADDR(control section address): PROGADDR로부터 ESTAB(external symbol table): 헤더 레코드의 제어 섹션 이름과 정의 레코드에 나타난 모든 외부 심볼들 등록 CSLTH(control section length): 헤더 레코드에서 얻어짐 엔드 레코드(End record) 만나면 CSADDR + CSLTH 새 제어 섹션 시작 주소 패스 1 끝나면 대부분 로드 지도(load map)에 ESTAB의 심볼과 주소 츨력: p143 시스템 프로그래밍

6 참조 번호(reference number) 방식
패스 2: p144 Fig.3.11 (b) 실제 로드, 재배치, 링킹 텍스트 레코드(Text record) 읽어 로드 수정 레코드(Modification record) 만나면 수정에 사용될 값을 ESTAB에서 찾아 연산 패스 2 끝나면 실행을 위해 제어를 프로그램에게 넘겨 줌 어떤 시스템에서는 링킹 로더는 프로그램 시작 주소를 OS에게 넘겨 주기만 하고 사용자가 실행 명령을 내리기도 함 엔드 레코드 섹션의 처음 주소가 지저되어 있으면 이것을 전이점(transfer point)으로 이용하기도 섹션 끝에 전이점 없으면 PROGADDR을 전이 주소로 p136~138 Fig.3.9 프로그램의 PROGADDR이 , p140~141 Fig.3.10 다시 참조 참조 번호(reference number) 방식 모든 외부 심볼에 참조 번호 부여 제어 섹션 이름은 01 외부 심볼들은 참조 레코드에서 정의 수정 레코드에서 참조 번호 이용 장점 같은 심볼에 대해 매번 ESTAB 탐색하지 않아도 됨 한 제어 색션에서 ESTAB을 탐색하여 한 심볼의 값능 찾으면 테이블에 참조 번호로 색인하여 등록 주소 수정할 때는 테이블에서 색인으로 값을 바로 찾아냄 시스템 프로그래밍

7 3.3 기계 독립적인 로더 특징(Machine-Independent Loader Features)
3.3.1 자동 라이브러리 검색(Automatic Library Search) 자동 라이브러리 호출(automatic library call) 자동 라이브러리 탐색(library search) 로드되는 프로그램에서 호출되는 서브루틴들이 자동적으로 라이브러리로부터 인출되어 주 프로그램과 링크되고 로드됨 최초 입력(프로그램)에서 참조되었으나 정의되지 않은 외부 심볼 추적 나타날 때마다 ESTAB에 등록하고 정의되지 않았음 표시 정의 만나면 배정된 주소 채워 넣음 패스 1 끝난 후 정의되지 않은 심볼들은 미해결(unresolved) 외부 참조임 모든 미해결 외부참조 해결될 때까지 라이브러리 탐색 라이브러리에 새로운 외부 참조 있을 수도 라이브러리는 서브루틴들이 어셈블 또는 컴파일된 형태 라이브러리 탐색(library search) 방법 목적 프로그램의 정의 레코드를 탐색하는 방법은 비효율적 각 루틴의 이름과 파일 안에서의 주소 포인터를 제공하는 디렉토리 이용 같은 루틴이 다른 이름으로 진입 가능 다른 이름들을 디렉토리에 기록 목적 프로그램은 한번만 저장 디렉토리 탐색(directory search) 포함 어떤 OS는 라이브러리 디렉토리를 메모리에 영구히 저장하기도 3.3.2 로더 선택 사항(Loader Options) 선택 사항 명시 방법 명령어 언어 이용 독립된 파일로 목적 프로그램 사이의 주 입력 스트림(primary input stream)으로 작업 제어 언어(job control language)의 일부로 OS가 제어 블록에 포함시켜 로더에 전달 시스템 프로그래밍

8 로더 선택 사항 예 (예) p86~90 Fig.15~17 기타 로더 선택 사항
INCLUDE program-name(library-name) DELETE csect-name CHANGE name1, name2 (예) p86~90 Fig.15~17 유틸리티 서브루틴 READ, WRITE가 RDREC와 WRREC 기능 수행 기본 로더 입력(primary loader input) INCLUDE READ(UTLIB) INCLUDE WRITE(UTLIB) DELETE RDREC, WRREC CHANGE RDREC, READ CHANGE WRREC, WRITE 로더에게 지시 UTLIB 라이브러리에서 READ, WRITE 제어 섹션 포함시킴 로드시 RDREC, WRREC 삭제 RDREC에 대한 모든 외부 참조를 심볼 READ를 참조하도록 변경 WRREC에 대한 모든 외부 참조를 심볼 WRITE를 참조하도록 변경 기타 로더 선택 사항 탐색할 라이브러리 지정 LIBRARY MYLIB 실제로 수행되지 않는 서브루틴들이 로드되고 링크되지 않도록 외부 참조가 미해결된 상태 남아 있게(remain unresolved) 로더에 지시 NOCALL STDDEV, PLOT, CORREL 외부 참조 없음(no external references) 지시: 외부 참조 시도하면 오류 로드 지도(load map) 출력 여부 및 자세한 정도 지시 제어 섹션과 주소만 외부 심볼 주소 포함 여부 외부 심볼사이의 교차 참조(cross-reference) 테이블 포함 여부 실행 시작 주소 지정: 목적 프로그램에서 제공된 정보를 override 미해결 외부 참조 오류 발생시 조치 지시 시스템 프로그래밍

9 3.4 로더 설계 선택사항(Loader Design Options) 로드 기능 구현 방법들
링킹 로더(Linking Loaders): 3.2.3 링크 편집기(Linkage Editors): 3.4.1 로드 전에 링크 링크와 재배치 후 파일이나 라이브러리에 저장 로드시에는 단순한 재배치만 동적 링킹(Dynamic Linking): 3.4.2 실행 시간에 링크 처음 호출된 서브루틴을 로드하고 링크할 때 OS 기능 이용 부츠트랩 로더(Bootstrap Loader): 3.4.3 OS나 시스템 로더와 무관한 독립적인 프로그램을 실행 OS나 시스템 로더 자체를 로드 3.4.1 링크 편집기(Linkage Editors) 링크 편집기: p153 Fig.3.13 참조 링크된 버전인 로드 모듈(load module) 또는 실행가능 이미지(executable image)를 파일 또는 라이브러리로 출력 모든 제어 섹션을 링크된 프로그램의 시작으로부터 상대적으로 배치 단순한 재배치 로더(simple relocating loader)가 로드 담당 로더는 단지 상대 주소에 로드 시작 주소 만을 더함 단일 패스로 처리됨 링크 편집기와 링킹 로더 링크 편집기는 외부 참조와 라이브러리 탐색 일회만 수행하므로 효율적 링킹 로더는 프로그램 실행될 때마다 외부 참조와 라이브러리 탐색 프로그램 수정이 많은 프로그램 개발이나 테스트에 유리 사용 빈도가 낮은 경우 어셈블 버전을 저장할 필요 없을 때 유리 시스템 프로그래밍

10 링크 편집기로 링크된 프로그램 안에외부 참조 정보 포함 라이브러리 공간 절약
제어 섹션의 교체, 외부 참조 수정 등 부분적인 재링크 허용위해 (예) INCLUDE PLANNER DELETE PROJECT INCLUDE PROJECT(NEWLIB) REPLACE PLANNER(PROGLIB) 교차참조(cross-reference) 많은 서브루틴이나 제어 섹션들의 패키지 생성위해 (예) INCLUDE READR(FTNLIB) INCLUDE WRITER(FTNLIB) INCLUDE BLOCK(FTNLIB) INCLUDE DEBLOCK(FTNLIB) SAVE FTNIO(SUBLIB) 이름이 FTNIO인 링크된 모듈을 SUBLIB에서 찾을 수 있음 FTNLIB 탐색전 SUBLIB 탐색하면 모든 교차 참조가 해결되 있는 FTNIO 찾을 수 있어 효율적(사용자 프로그램과 링크될 때 다시 링크할 필요 없음) 라이브러리 공간 절약 사용자 루틴들 링크동안 라이브러리 탐색 금지(NOCALL: p151) 실행 시간에 FTNIO와 링크된 사용자 루틴 조합 3.4.2 동적 링킹(Dynamic Linking) 링크 편집기: 링크후 로드 링킹 로더: 링크와 로드 동시에 동적 링킹: 서브루틴이 처음 불려질 때 로드되고 링크됨 dynamic linking dynamic loading load on call(load-and-call) 동적 링크 라이브러리(dynamic link library) 실행 시간 지원 라이브러리(run-time support library)의 복사본을 오직 하나만 메모리에 실행중인 모든 프로그램과 링크되어 공유됨 시스템 프로그래밍

11 3.4.3 부츠트랩 로더(Bootstrap Loader)
객체지향 시스템의 동적 링킹 실행 시간에 객체와 메소드가 결정됨 객체를 사용하는 프로그램과 무관하게 객체 수정 가능 동적 링킹으로 객체 공유 가능 동적 링킹의 장점 각 루틴들이 필요할 때만 로드됨 시간과 메모리의 절약 동적 로딩과 링킹의 구현: p157 (a) OS 서비스(load-and-call) 호출 (b) 호출된 루틴이 이미 로드되어 있는지 내부 테이블(internal table) 조사하여 없으면 로드 (c) 호출된 루틴 수행 (d) 호출된 루틴 수행 완료 후 OS로 복귀한 후 사용자 프로그램으로 제어 반환(종료를 OS에 알리기 위해) (e) 호출된 루틴에 할당했던 메모리는 즉시 해제되거나 지연 해제 지연 해제 경우 다시 그 루틴을 호출했을 때 단순히 제어만 이동 바인딩(binding; 논리 주소를 물리 주소로 사상)이 로드 시간(load time)에서 실행 시간(execution time)으로 지연됨(delayed) 호츨된 루틴의 심볼과 그 실제 주소의 연결이 호출문이 실행될 때까지 이루어지지 않음 융통성(flexibility) 제공 OS가 간섭해야하는 오버헤드 3.4.3 부츠트랩 로더(Bootstrap Loader) 메모리가 비어있는 유휴 (empty and idle) 상태에서는 재배치 필요 없어 절대 로더면 충분 절대 로더를 로드 방법1: 오퍼레이터가 콘솔의 스위치를 이용하여 절대 로더의 목적 프로그램을 메모리로 시스템 프로그래밍

12 3.5 구현 예(Implementation Examples) 3.5.1 MS-DOS Linker: Pentium, x86
방법 2: ROM(read-obly memory)에 절대 로더 프로그램을 영구히 저장 H/W 신호 발생하면 (시작 버튼 누르면) 자동으로 ROM에 있는 프로그램이 실행됨 ROM에서 직접 실행 메모리로 복사된 후 실행 방법 3(절충안): 내장(built-in) H/W 이용 콘솔의 스위치로 선택된 외부 장치로부터 고정 길이의 레코드 하나를 읽어 메모리의 특정 위치에 저장 자동으로 제어가 저장된 레코드의 주소로 이동 읽어들인 레코드에는 절대 프로그램을 로드하는 기계어 명령어 포함 만일 로드 과정의 명령어들을 첫번 레코드에 다 담을 수 없으면 첫번 레코드는 다른 레코드들을 읽어 들이고 다른 레코드들은 더 많은 레코드들을 읽어 들임 = 부츠트랩 처음의 레코드(들) = 부츠트랩 로더 위와 같은 로더 프로그램을 OS 자신 및 모든 독자적인 프로그램의 목적 프로그램들 앞에 붙임 3.5 구현 예(Implementation Examples) 3.5.1 MS-DOS Linker: Pentium, x86 MASM은 목적 모듈(object module) 생성: .OBJ 링크 편집기 LINK로 목적 모듈 또는 목적 코드 라이브러리(object code libraries) 결합하여 실행 프로그램(executable program) 생성 목적 모듈 THEADR: 오브젝트 모듈 이름(SIC/XE의 Header record) TYPDEF: MS-DOS 목적 모듈, 코멘트 PUBDEF: 참조될 외부 심볼 리스트 EXTDEF: 참조된 외부 심볼 리스트(SIC/XE의 EXTREF) LNAMES: 세그먼트와 클래스 이름 SEGDEF: 세그먼트 이름, 길이, 배열(alignmenr) 등 정보(reference number 기법으로) GRPDEF: 세그먼트 그룹 정보(reference number 기법으로) 시스템 프로그래밍

13 이중 패스 LINK LEDATA: 번역된 명령어와 소스 프로그램의 데이터(SIC/XE의 Text record)
LIDATA: 반복 패턴으로 나타나는 LEDATA FIXUPP: 외부 참조 해결, 재배치 및 세그먼트 그룹화에 관련된 주소 수정 MODEND(SIC/XE의 End record) 이중 패스 LINK 패스 1 각 세그먼트 시작 주소 계산 SEGDEF의 레코드 순서대로 처리 다른 목적 모듈에 있으나 클래스가 같고 이릅이 같은 세그먼트들은 결합(combination) 클래스는 같으나 이름이 다른 세그먼트들은 접합(concatenation) 심볼 테이블 생성: 각 세그먼트 안에서의 상대적 주소 또는 각 외부 심볼의 주소 패스 2 번역된 명령어와 데이터 추출 메모리에 실행 프로그램의이미지 생성 LEDATA, LIDATA, FIXUPP 레코드 처리하여 얻어진 이진 데이터를 패스 1에서 계산한 세그먼트 주소에 메모리 이미지로서 기록 세그먼트 안에서의 재배치 수행 세그먼트 시작 주소를 segment fixups 테이블에 더함 segment fixups 데이블은 실행위해 로드될 때 실제 세그먼트 주소를 반영하는 재배치에 사용됨 외부 참조 해결 메모리 이미지를 .EXE 파일로 기록 .EXE 파일 에는 헤더(header) 세그먼트 교정 테이블(the table of segment fixups) 메모리 요구(memory requirements) 진입점(entry points) 레지스터 CS, SP의 초기 값 시스템 프로그래밍

14 3.5.2 SunOS Linkers: SPARC 두 종류 링커
링크 편집기(link-editor) 실행시간 링커(run-time linker) 일반적 컴파일에서 하나의 출력 모듈(output module) 생성 재배치 목적 모듈(relocatable object module) 정적 실행 가능(static executable) 동적 실행 가능(dynamic executable) 공유 객체(shared object) 목적 모듈(object module) executable, writable 등 속성가지는 섹션들로 구성됨 재배치와 링크 연산 리스트 가짐 심볼 테이블 가짐 입력 파일에서 같은 속성 가진 섹션들은 접합됨 입력 파일의 심볼 테이블은 심볼 정의 및 참조의 매치(match)위해 처리됨 출력 파일 안의 재배치 및 링크 연산도 수행됨 출력 파일안에 새로운 심볼 테이블과 새로운 재배치 명령 세트 생성 심볼은 실행 시간에 바인드됨(bound) 재배치는 로드될 때 수행되어야 함 의미 재배치와 링크 연산 코드 수정될 필드 크기와 계산식 특정 기계의 명령어 형식과 주소지정 모드에 따라 다른 코드 (예) SPARC에만 24개 재배치 코드 x86 상에 구현된 SunOS linkers는 11 코드 세트 이용 심볼 참조 보관소(archives): 재배치 가능한 목적 모듈들의 모임 심볼 참조 일어나면 그 심볼이 정의된 모듈의 이름을 심볼과 연결(3.3.1 자동 라이브러리 탐색 참조) 공유 객체(shared objects): 이전의 link-edit으로 생성된 분리될 수 없는 단위 전체 공유 객체가 출력 파일의 논리적 부분이 됨 물리적으로는 포함되지 않고 공유 객체에 대한 종속성만 기록 공유 객체 안의 모든 심볼 사용 가능 공유 객체의 실제 포함은 실행 시간까지 지연됨(3.4.2 동적 링크 참조) 시스템 프로그래밍

15 실행시간 링커(run-time linker) 3.5.3 CRAY MPP Linker: Cray T3E
동적 실행 가능(dynamic excutables)과 공유 객체(shared objects)를 실행 시간에 바인드 공유 객체의 다른 공유 객체에의 종속성도 검사 세그먼트가 로드될 때 심볼들은 바인드됨 프로시주어 호출의 바인딩은 프로그램 실행시간까지 지연됨 게으른 바인딩(lazy binding) 전역 프로시주어의 처음 호출시 제어가 실행시간 링커로 넘어가 프로시주어 링크 테이블(procedure link table)에 주소 기록 다음 호출부터는 링크 테이블을 통하여 링커의 간섭 없이 바로 프로시주어로 부가적인 유연성(flexibility) 제공 실행 시간에 새로운 공유 객체를 동적으로 바인드 다수의 공유 객체 사용 가능 메모리 오버헤드 감소 3.5.3 CRAY MPP Linker: Cray T3E PEs(processing elements)로 구성됨 local memory 가짐 다른 PE의 local memory (remote memory) 접근 가능 하나의 응용 프로그램에는 PE들로 구성된 하나의 partition (parallel architecture)이 배당됨 공유 데이터(shared data) (예) 배열의 분배와 공유: p165 Fig.3.16 사유 데이터(private data) 대부분 모든 PE에 복제됨 한 PE에만 존재할 수도 프로그램 하나가 로드되면 각 PE는 다음의 사본을 가짐: p166 Fig.3.17 실행 코드(executable code) 시스템 프로그래밍

16 MPP linker 공유 데이터의 분배 프로그램 블록 또는 데이터의 리스트 유지
리스트의 블록들은 실행 코드, 사유 데이터, 공유 데이터 등의 공동 특성(common property)을 공유 리스트의 블록들을 모아 각 블록 마다 주소 지정, 재배치, 링크 수행하여 실행 파일 생성 실행 파일에는 필요한 PE들의 수와 제어 정보 포함 공유 데이터의 분배 partition의 PE들의 수에 따라 분배 PE들의 수 결정 시기 컴파일 시간에: 이후 수정 불가능 링크 로드 시간에: 링커가 고정 개수의 PEs 위한 실행 가능(executable) 모듈 생성 실행 시간에: partition 개수 선택 plastic executable 모든 재배치 가능 목적 모듈 모든 링커 지시자(directives) (고정 개수 경우 보다 매우 큰 경향) 시스템 프로그래밍


Download ppt "제 3 장 로더와 링커(Loaders and Linkers)"

Similar presentations


Ads by Google