Transcript LISTA

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