Download presentation
Presentation is loading. Please wait.
1
System Programming 제3장 로더와 링커 컴퓨터공학부 시스템 프로그래밍
2
3. 로더와 링커 어셈블러 로드(loading), 재배치(relocation), 링크(linking) 로더 3.1절 3.2절
목적 프로그램 명령어와 데이터의 값 : 로드될 메모리의 주소 지정 로드(loading), 재배치(relocation), 링크(linking) 로더 재배치와 링크의 기능 제공 각각 따로 있는 시스템도 존재 프로그램 번역과 로더의 관계 이해 3.1절 절대 로더(absolute loader) 설계, 운영 3.2절 로더 관점의 재배치 및 링크 문제 3.3절 기계 구조와 관계없는 로더의 특징 3.4절 로더의 기능 구현 시스템 프로그래밍
3
3.1 기본적인 로더의 기능 로더의 기본 기능 목적 프로그램을 메모리로 가져오고 실행하도록 하는 기능
절대 로더의 기능 및 설계 절대 로더 알고리듬의 윤곽 시스템 프로그래밍
4
3.1.1 절대 로더의 설계 절대 로더(SIC 어셈블러와 연관) 주의 사항 링크와 프로그램 재배치 기능이 필요 없음
모든 기능 : 단일 패스로 실행 헤더와 사용 가능 메모리의 검사 목적 프로그램을 지정된 주소로 이동 실행을 위해 지정된 주소로 점프(END 레코드) 주의 사항 목적 프로그램의 표현 명령어의 목적 코드를 16진수에 해당하는 문자로 표현 예) STL 명령어 opcode 14를 “1”과 “4”의 문자로 표현 메모리에 로드 될 때 Packing되어야 함 시스템 프로그래밍
5
3.1.2 간단한 부츠트랩 로더 부츠트랩 로더(Bootstrap Loader) 원시 코드(그림 3.3)
컴퓨터를 켜거나 다시 시작할 때 실행되는 최초의 프로그램(OS)를 로드 원시 코드(그림 3.3) 0번지 시작, 80번지에 OS 로드 입력 장치 F1을 통해서 프로그램 입력 GETC 부루틴이 작업의 대부분 수행 ASCII 문자의 숫자 값 변환 F1에 파일 끝(16진수 04)이면 80번지로 점프 시스템 프로그래밍
6
3.1.2 간단한 부츠트랩 로더 BOOT START 0 CLEAR A A 0 LDX #128 X 128(16진수 80)
LOOP JSUB GETC L (PC); PC GETC의 주소 RMO A,S S (A) SHIFTL S, S (S); 4bits를 왼쪽SHIFT JSUB GETC L (PC); PC GETC의 주소 ADDR S,A A (A)+(S) STCH ,X 주소 0+(X)번지 (A) TIXR X,X X (X)+1; (X) : (X)+(X) J LOOP PC LOOP의 주소 시스템 프로그래밍
7
3.1.2 간단한 부츠트랩 로더 GETC TD INPUT INPUT 주소의 입력 장치 조사
JEQ GETC PCGETC의 주소(if ‘=‘) RD INPUT A[오른쪽 4bits]data COMP # (A) : 4<end-of-file 검사> JEQ PC80(if ‘=‘) COMP # (A) : 48<character ‘0’ 검사> JLT GETC PCGETC의 주소(if ‘<‘) SUB # A (A)-(16진수) 30 COMP # (A) : 10<character ‘A’ 검사> JLT RETURN PCRETURN의 주소(if ‘<‘) SUB # A (A)-7 RETURN RSUB PC (L) INPUT BYTE X’F1’ END LOOP 시스템 프로그래밍
8
3.2 기계 종속적인 로더의 특징 절대 로더의 결점 프로그램의 재배치와 링크 기능 3.2.1절 3.2.2절 3.2.3절
프로그램의 메모리 로드시 로드될 실제 주소 : 프로그래머가 지시 몇 개의 독립적인 프로그램이 자원 공유하면서 실행 부루틴 라이브러리의 사용에 어려움 부루틴이 절대 주소를 갖고 있으면 효과적 사용 어려움 프로그램의 재배치와 링크 기능 로더의 설계에 영향을 미치는 기계 구조 3.2.1절 구현 기술 종속성 3.2.2절 로더 관점의 프로그램 링크 3.2.3절 링크와 로더의 자료 구조와 관련 논리 시스템 프로그래밍
9
3.2.1 재배치 재배치 로더(relocation loader) 재배치 방법(두가지 방법)
상대적 로더(relative loader) 재배치 방법(두가지 방법) 수정 레코드의 사용 변경될 필드에 대한 시작 주소와 길이 예) M COPY 프로그램 재배치 지정 편리 모든 기계에서 적합하지는 않음(SIC) 재배치 비트(relocation bit) 고정된 명령어 형식 수정 레코드 사용 안 함 재배치 비트 하나가 하나의 워드에 대응(비트 마스크) 재배치 비트 1 프로그램 재배치 시 시작 주소 더함 비트마스크(EFC ) : 목적 코드 10개 수정(그림 3.7) 시스템 프로그래밍
10
3.2.2 프로그램 링크 제어섹션, 외부 참조 로더 독립적으로 어셈블된 세 개의 프로그램(그림 3.8)
독립적 어셈블, 별개의 세그먼트의 목적 코드 로더 링크, 재배치, 로드되어야 하는 제어섹션 독립적으로 어셈블된 세 개의 프로그램(그림 3.8) LISTA, LISTB, LISTC ENDA, ENDB, ENDC에 의해 끝 표시 외부 기호에 대한 참조 집합 시스템 프로그래밍
11
3.2.2 프로그램 링크 0000 PROGA START 0 EXTDEF LISTA, ENDA
EXTREF LISTB,ENDB,LISTC,ENDC . 0020 REF LDA LISTA D 0023 REF LDT LISTB 0027 REF LDX #ENDA-LISTA 0040 LISTA EQU * 0054 ENDA EQU * 0054 REF WORD ENDA-LISTA+LISTC 0057 REF WORD ENDC-LISTC-10 FFFFF6 005A REF WORD ENDC-LISTC+LISTA F 005D REF WORD ENDA-LISTA-(ENDB-LISTB) 0060 REF WORD LISTB-LISTA FFFFC0 END REF1 시스템 프로그래밍
12
H PROGA 000000 000063 D LISTA 000040 ENDA 000054 R LISTB ENDB LISTC
ENDC REF2 T 000020 0A 03201D 050014 REF4 REF5 REF6 REF7 REF8 T 000054 0F 000014 FFFFF6 00003F 000014 FFFFC0 REF2 M 000024 05 +LISTB REF4 M 000054 06 +LISTC REF5 M 000057 06 +ENDC REF5 M 000057 06 -LISTC REF7 M 00005D 06 -ENDB REF6 M 00005A 05 +ENDC REF7 M 00005D 06 +LISTB REF6 M 00005A 06 -LISTC REF8 M 000060 06 +LISTB REF6 M 00005A 06 +PROGA REF8 M 000060 06 -PROGA E 000020 시스템 프로그래밍
13
3.2.2 프로그램 링크 0000 PROGB START 0 EXTDEF LISTB, ENDB
EXTREF LISTA,ENDA,LISTC,ENDC . 0036 REF LDA LISTA 003A REF LDT LISTB 003D REF LDX #ENDA-LISTA 0060 LISTB EQU * 0070 ENDB EQU * 0070 REF WORD ENDA-LISTA+LISTC 0073 REF WORD ENDC-LISTC-10 FFFFF6 0076 REF WORD ENDC-LISTC+LISTA-1 FFFFFF 0079 REF WORD ENDA-LISTA-(ENDB-LISTB) FFFFF0 007C REF WORD LISTB-LISTA END 시스템 프로그래밍
14
H PROGB 000000 00007F D LISTB 000060 ENDB 000070 R LISTA ENDA LISTC
ENDC REF1 REF3 T 000036 0B 772027 REF4 REF5 REF6 REF7 REF8 T 000070 0F 000000 FFFFF6 FFFFFF FFFFF0 000060 REF1 M 000037 05 +LISTA REF6 M 000076 06 +ENDC REF3 M 00003E 05 +ENDA REF6 M 000076 06 -LISTC REF3 M 00003E 05 -LISTA REF6 M 000076 06 +LISTA REF4 M 000070 06 +ENDA REF7 M 000079 06 +ENDA REF4 M 000070 06 -LISTA REF7 M 000079 06 -LISTA REF4 M 000070 06 +LISTC REF8 M 00007C 06 +PROGB REF5 M 000073 06 +ENDC REF8 M 00007C 06 -LISTA REF5 M 000073 06 -LISTC E 시스템 프로그래밍
15
3.2.2 프로그램 링크 0000 PROGC START 0 EXTDEF LISTC, ENDC
EXTREF LISTA,ENDA,LISTB,ENDB . 0020 REF LDA LISTA 0023 REF LDT LISTB 0027 REF LDX #ENDA-LISTA 0040 LISTC EQU * 0054 ENDC EQU * 0054 REF WORD ENDA-LISTA+LISTC 0057 REF WORD ENDC-LISTC 005A REF WORD ENDC-LISTC+LISTA 005D REF WORD ENDA-LISTA-(ENDB-LISTB) 0060 REF WORD LISTB-LISTA END 시스템 프로그래밍
16
H PROGC 000000 000051 D LISTC 000030 ENDC 000042 R LISTA ENDA LISTB
ENDB REF1 REF2 REF3 T 000018 0C REF4 REF5 REF6 REF7 REF8 T 000042 0F 000030 000008 000011 000000 000000 REF1 M 000019 05 +LISTA REF7 M 00004B 06 +ENDA REF2 M 00001D 05 +LISTB REF7 M 00004B 06 -LISTA REF3 M 000021 05 +ENDA REF7 M 00004B 06 -ENDB REF3 M 000021 05 -LISTA REF7 M 00004B 06 +LISTB REF4 M 000042 06 +ENDA REF8 M 00004E 06 +LISTB REF4 M 000042 06 -LISTA REF8 M 00004E 06 -LISTA REF4 M 000042 06 +PROGC E REF6 M 000048 06 +LISTA 시스템 프로그래밍
17
3.2.2 프로그램 링크 REF1의 참조 REF2의 참조 REF3의 참조
PROGA : 단순한 기호의 참조(PC 주소 지정 방식으로 해석) PROGB(PROGC) 외부 참조(확장 명령어 형식, 주소 00000) 수정 레코드의 사용 REF2의 참조 PROGA (PROGC) 외부 참조(확장 명령어 형식, 주소에 상수 저장 00004) PROGB : 단순한 기호의 참조(PC 주소 지정 방식으로 해석) REF3의 참조 PROGA 필요한 리스트 가지고 있음 PROGB 외부 참조 시스템 프로그래밍
18
PROGA HPROGA . . . 메모리 내용 0000 (REF4) T 000054 0F 000014 4050
004126 M 000054 06 +LISTC PROGC HPROGC . . . D LISTC 000030 4112 로드 주소 LISTC의 실제주소 PROGA PROGB PROGC E2 시스템 프로그래밍
19
3.2.3 링킹로더에 대한 알고리듬 및 자료 구조 링킹 로더 데이터 구조 로더의 입력 : 목적 프로그램들의 집합
2 패스의 실행 외부 참조 기호가 나타날 때까지 실제 로드된 주소를 알 수 없음 패스 1 모든 외부 참조 기호에 대해 주소 할당 패스 2 실제적인 로딩, 재배치, 링킹의 실행 데이터 구조 외부 기호 테이블(ESTAB) : 어셈블러 SYMTAB과 유사 제어섹션 내의 외부 기호 이름, 주소 저장 어떠한 제어섹션에서 정의되어 있는지 가리킴 주요 변수 PROGADDR : 프로그램 로드 주소 CSADDR : 제어섹션 주소 시스템 프로그래밍
20
3.2.3 링킹로더에 대한 알고리듬 및 자료 구조 패스 1 헤더와 정의 레코드(D)
링크된 프로그램의 시작 주소(PROGADDR)는 OS로부터 얻음 첫번째 CSADDR = PROGADDR ESTAB 제어섹션 기호이름 주소(CSADDR) 길이(CSLTH) PROGA LISTA ENDA 4000 4040 4054 0063 PROGB 4063 40C3 40D3 007F PROGC 40E2 4112 4124 0051 시스템 프로그래밍
21
3.2.3 링킹로더에 대한 알고리듬 및 자료 구조 패스 2 마지막 단계 : 실행하기 위한 제어 이동(운영체제에게)
실제적인 로딩, 재배치, 링킹의 수행 CSADDR은 패스 1에서 실제 로드되는 곳의 주소 포함 목적코드는 명시된 주소(CSADDR의 값)로 이동 수정레코드 : ESTAB에서 발견, 수정 수행 마지막 단계 : 실행하기 위한 제어 이동(운영체제에게) 프로그램의 실행은 END에서 명시한 주소에서 시작 하나 이상의 제어 섹션에서 시작 주소 명시 로더의 독단에 의해 최근에 만난 것 실행 없으면 링크된 프로그램의 시작(PROGADDR)에서 실행 일반적 주 프로그램의 END 레코드에 존재 목적 프로그램의 변경 외부 참조 기호에 번호 할당 시스템 프로그래밍
22
3.3 기계 독립적인 로더의 특징 3.3.1절 3.3.2절 자동 라이브러리 검색 처리
외부 참조 처리 부루틴을 명시적으로 포함하지 않고 요구시 자동으로 로드하여 처리 3.3.2절 로드와 링크시 정해지는 일반적인 선택 사항 입력의 선택 지정 외부 참조의 변경 및 삭제 외부 참조의 자동 처리 조절 시스템 프로그래밍
23
3.3.1 자동 라이브러리 검색 표준 라이브러리 라이브러리 탐색(library search) 라이브러리 파일 구조
로드되는 프로그램에 자동으로 포함되는 라이브러리 프로그래밍 언어의 일부인 것처럼 사용 호출되는 부루틴은 자동으로 로드, 링크 됨 자동 라이브러리 호출(automatic library call) 라이브러리 탐색(library search) 참조 레코드의 기호가 현재 ESTAB존재 하지 않으면 ESTAB에 기입하고 아직 정의되지 않았음을 표시 패스 1이 끝난 후 정의되지 않은 기호(미해결 외부 참조 표시) 지정된 라이브러리 탐색 발견된 부루틴은 프로그램의 일부인 것처럼 처리 프로그래머가 만든 부루틴의 제공 표준 부루틴의 무시 가능 라이브러리 파일 구조 디렉토리 루틴의 이름과 파일 내의 주소를 가리키는 진입점 저장 시스템 프로그래밍
24
3.3.2 로더의 선택사항 표준 로더의 기능 변경 원시 프로그램의 선택 외부 기호나 제어섹션의 제거 외부 기호의 변경
특별한 명령어 이용 운영 체제에 의해 처리 : 작업 제어 언어 원시 프로그램의 선택 라이브러리의 목적 프로그램을 기본 로더의 입력처럼 취급 INCLUDE program-name(library-name) 외부 기호나 제어섹션의 제거 DELETE csect-name 외부 기호의 변경 CHANGE name1, name2 시스템 프로그래밍
25
3.3.2 로더의 선택사항 INCLUDE READ(UTLIB) INCLUDE WRITE(UTLIB)
DELETE RDREC, WRREC CHANGE RDREC, READ CHANGE WRREC, WRITE 탐색할 라이브러리의 지정 LIBRARY MYLIB 표준 라이브러리 탐색 전에 탐색 수행되지 않는 루틴의 링크나 로딩의 회피 NOCALL STDDEV, PLOT, CORREL 시스템 프로그래밍
26
3.4 로더 설계의 선택사항 링크 로더 다른 방법 3.4.1절 링크 편집기 3.4.2절 동적 링크 3.4.3절 부츠트랩 로더
로드시간에 모든 링크와 재배치 수행 다른 방법 링크 편집기(linkage editor) 로드 시간 이전에 링크 수행 동적 링크(dynamic linking) 링크 기능 : 실행 시간에 수행 3.4.1절 링크 편집기 링크와 재배치 수행 메모리에 즉시 로드되지 않음(라이브러리나 파일로 작성) 3.4.2절 동적 링크 호출되는 부프로그램 로드 : 운영 체제 기능 사용 3.4.3절 부츠트랩 로더 운영체제 또는 로더에 무관한 프로그램 실행 운영 체제나 로더 자체의 로드 시스템 프로그래밍
27
3.4.1 링크 편집기 링크로더 링크편집기 목적 프로그램 목적 프로그램 라이브러리 링크 편집기 라이브러리 링크 로더 링크된
메모리 재배치 로더 메모리 시스템 프로그래밍
28
3.4.1 링크 편집기 링크 편집기 링크된 프로그램의 실행 : 재배치 로더가 메모리 로드
목적 코드의 수정 : 프로그램 내 + 실제 로드 주소 프로그램의 여러 번 실행 외부 참조와 라이브러리 탐색은 한번만 수행 링크 로더는 실행될 때마다 수행 링크된 프로그램은 메모리에 나타날 형태와 같음(이미지) 시스템 프로그래밍
29
3.4.2 동적 링크 링커 에디터 동적 링킹 로드되어지기 전에 링킹 연산의 수행 실행 시간까지 링킹 기능을 연기하는 방법
호출되어질 때 프로그램의 나머지에 로드되고 링크됨 부루틴이나 라이브러리의 공유 시스템 프로그래밍
30
3.4.2 동적 링크 로드 호출 ERRHANDL 라이브러리 동적로더 (운영체제 부분) 동적로더 (운영체제 부분) 사용자
프로그램 사용자 프로그램 ERRHANDL 시스템 프로그래밍
31
3.4.2 동적 링크 로드 호출 ERRHANDL 동적로더 (운영체제 부분) 동적로더 (운영체제 부분) 동적로더
사용자 프로그램 사용자 프로그램 사용자 프로그램 로드 호출 ERRHANDL ERRHANDL ERRHANDL ERRHANDL 시스템 프로그래밍
32
3.4.3 부츠트랩 로더 로더 자체의 메모리 로드 하드웨어 신호 발생(전원을 켰을 경우) 중간적 해결
메모리에 아무 것도 없는 컴퓨터 첫번째 로드되는 것은 절대 주소로 명시 하드웨어 신호 발생(전원을 켰을 경우) 연산자가 필요한 경우(절대 로더를 메모리에 로드하기 위한) 절대 로더 프로그램의 ROM 상주 중간적 해결 아주 짧은 ROM 프로그램 사용 레코드가 저장되어 있는 메모리로 이동 이 레코드는 절대 프로그램(OS 등)을 로딩 부츠트랩(BOOTSTRAP) 시스템 프로그래밍
Similar presentations