slide1
Download
Skip this Video
Download Presentation
제 7 장 링커와 로더 설계

Loading in 2 Seconds...

play fullscreen
1 / 73

제 7 장 링커와 로더 설계 - PowerPoint PPT Presentation


  • 253 Views
  • Uploaded on

제 7 장 링커와 로더 설계. 제 7 장 학습내용. 링커와 로더의 개념과 역할 부프로그램의 호출과 외부기호 참조 재배치와 적재 개요 로더의 종류와 형태. 제 7 장 학습내용. 링커와 로더가 필요로하는 정보 원시프로그램과 번역결과 절대상수와 재배치상수 링크를 위한 어셈블링 외부기호와 재배치 링크의 형태. 제 7 장 학습내용. 패스 1 과 패스 2 의 수행과정 패스 1 과 패스 2 의 자료구조 기억장소에 적재된 후의 형태 패스 1 과 패스 2 의 알고리즘. 링커와 로더의 역할.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 제 7 장 링커와 로더 설계' - cid


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
제 7 장 학습내용
  • 링커와 로더의 개념과 역할
  • 부프로그램의 호출과 외부기호 참조
  • 재배치와 적재 개요
  • 로더의 종류와 형태
slide3
제 7 장 학습내용
  • 링커와 로더가 필요로하는 정보
  • 원시프로그램과 번역결과
  • 절대상수와 재배치상수
  • 링크를 위한 어셈블링
  • 외부기호와 재배치 링크의 형태
slide4
제 7 장 학습내용
  • 패스1과 패스2의 수행과정
  • 패스1과 패스2의 자료구조
  • 기억장소에 적재된 후의 형태
  • 패스1과 패스2의 알고리즘
slide5
링커와 로더의 역할
  • 링킹:모듈들을 연결
  • 주기억장치 할당:

적재될 기억공간의 확보

  • 재배치:기호들을 재배치
  • 적재:재배치가완료된모듈을적재
slide6
부프로그램의 호출

모듈 A

외부기호로

분기

모듈 B

CALL B

복귀

slide7
외부기호의 참조

모듈 A

모듈 B

외부기호

참조

LB1 DW 5

LA1 DW LB1

slide8
주기억장치의 할당
  • 로더의 요구에 의해

운영체제가 수행

  • 운영체제 안에는 기억장치

관리 모듈 존재

  • 부분할당과 전체할당으로 구분
slide9
재배치 및 적재
  • 번역후 재배치가능 코드가 생성됨
  • 프로그램의 시작위치가 기준점
  • 재배치 작업은 각 명령어의

주소부분에 행해짐

  • 컴파일러가 재배치 정보 생성
  • 재배치비트를 이용하는 방법
slide10
로더의 종류와 형태
  • 컴파일 즉시로더
  • 절대로더
  • 재배치로더
  • 링킹로더
  • 동적로더
slide11
컴파일 즉시로더의 개념
  • 가장 간단한 방법
  • 로더의 기능은 거의 어셈블러가 수행
  • 로더의기능은단순히실행을제어
  • 어셈블러가 적재 기억장소낭비
  • 목적모듈이 보조기억장치에 저장 안됨 어셈블러의 재번역이 요구됨
  • 서로 다른 언어로 작성된 모듈들끼리 연결불가
  • 모든 모듈이 한꺼번에 번역  모듈화가 어려움
slide12
절대로더의 개념
  • 출력결과는보조기억장치에저장
  • 로더는 번역시 정해진 위치에

적재만 수행

  • 프로그래머가 어셈블러에게

적재주소 지정

  • 각 모듈의 적재주소 지정
slide13
절대로더를위한프로그램의형태

주프로그램

MAIN SEGMENT

ASSUME CS : MAIN...

ORG 100

...

CALL 400

...

MAIN ENDS

END

slide14
절대로더를위한프로그램의형태

부프로그램

MAIN SEGMENT

ASSUME CS : MAIN...

ORG 400

...

RET

slide15
절대로더의 기능
  • 링크:프로그래머
  • 기억장소 할당번지 지정:

프로그래머

  • 재배치:어셈블러
  • 적재:절대로더
slide16
재배치로더의 개념
  • 적재모듈을 주기억장치에 적재
  • 상대주소를 절대주소로 변환
  • 외부기호의 참조

*모듈의 이름기호 참조

*외부모듈에서 정의된 기호 참조

slide17
3개의 외부모듈 정의
  • 모듈 M1

세그먼트 A

(상대주소) (기호) (명령어)

0 A

... ...

... CALL B

20 LA1 DW LB1

... ...

29

slide18
3개의 외부모듈 정의
  • 모듈 M2

세그먼트 B

(상대주소) (기호) (명령어)

0 B

... ...

10 LB1 DW 5

... ...

19

slide19
3개의 외부모듈 정의
  • 모듈 M3

세그먼트 C

(상대주소) (기호) (명령어)

0 C

... ...

9

slide20
3개 모듈의 링크와 재배치

0

.

.

.

20

.

.

.

29

A

상대주소

절대주소

CALL B

LA1 DW LB1

0

.

.

.

29

30

.

.

.

40

.

.

.

49

50

.

.

.

59

500

520

530

540

550

559

CALL 30

40

CALL 530

540

A

A

B

0

.

.

.

10

.

.

.

19

B

B

5

LB1 DW 5

5

C

C

0

.

.

.

9

C

기억

장치

적재

모듈

재배치로더

링커

slide21
각 모듈의 기호표
  • 모듈 M1의 기호표

분류

SD

SD

LD

ER

상대주소

0

-

20

-

길이

30

-

-

-

기호

A

B

LA1

LB1

slide22
각 모듈의 기호표
  • 모듈 M2의 기호표

분류

SD

LD

상대주소

0

10

길이

20

-

기호

B

LB1

slide23
각 모듈의 기호표
  • 모듈 M3의 기호표

분류

SD

상대주소

0

길이

10

기호

C

slide24
링킹로더의 개념
  • 재배치링크 및 적재를

한꺼번에 수행

  • 두 단계의 패스로 구성

(패스1과 패스2로 구성)

slide25
링킹로더의 패스1과 패스2
  • 패스1의 기능

*모듈에 기억장소 할당

*외부기호들의 주소 확정

*외부기호표 작성

  • 패스2의 기능

*모든상대주소를절대주소로변환

*외부기호표 참조 후 적재

slide26
링킹로더의 수행과정

0

.

.

.

29

기억장소

A

500

530

550

A

0

.

.

.

19

링킹

로더

B

B

C

0

.

.

.

9

C

slide27
링킹로더의 역할
  • 링크:링킹로더
  • 기억장소 할당:운영체제
  • 재배치:링킹로더
  • 적재:링킹로더
slide28
동적로더의 개념
  • 재배치로더와 링킹로더의

단점 보완

  • 기억장소의 효율적 활용
  • 서브루틴들의상호호출관계파악
  • 오버레이 구조를 활용
slide30
동적적재시 기억장소의 변화

A (20K)

A (20K)

A (20K)

A (20K)

B (20K)

60K

B (20K)

40K

E (20K)

50K

D (10K)

70K

E (20K)

C (30K)

E (20K)

slide31
링커와로더가필요로하는정보
  • 번역된 목적코드의 모듈들
  • 모듈의 길이
  • 외부기호와 내부기호
  • 재배치할 기호들과 수정방법
slide32
원시프로그램의 형태
  • EXTRN으로 선언된 기호

*외부에서 정의되고 내부에서 이용

  • PUBLIC으로 선언된 기호

*내부에서 정의되고 외부에서 이용

main asm
MAIN.ASM 모듈의 예

MAIN.ASM

MAIN SEGMENT

ASSUME CS:MAIN, DS:MAIN

EXTRN ADD2:NEAR, TABLE:WORD

PUBLIC DATA3

ADD1: MOV AX, CS

MOV DS, AX

MOV AX, DATA1

ADD AX, DATA2

main asm1
MAIN.ASM 모듈의 예

MOV DATA3, AX

CALL ADD2

MOV AH, 4CH

INT 21H

DATA1 DW ADD2

DATA2 DW TABLE

DATA3 DW ?

MAIN ENDS

END

subst asm
SUBST.ASM 모듈의 예

SUBST.ASM

MAIN SEGMENT

ASSUME CS:MAIN, DS:MAIN

EXTRN DATA3:WORD

PUBLIC ADD2, TABLE

ADD2: PROC NEAR

PUSH AX

MOV AX, TABLE

ADD AX, POINT

subst asm1
SUBST.ASM 모듈의 예

MOV SUM, AX

POP AX

RET

ADD2 ENDP

TABLE DW 100

POINT DW DATA3

SUM DW ?

MAIN ENDS

END

slide37
번역된 프로그램의 형태

상대 재배치

주소 비트

0000 00 MOV AX,CS

0002 00 MOV DS,AX

0004 00 MOV AX,0100

0007 01 ADD AX,WORD PTR[0015]

000B 10 MOV WORD PTR[001D],AX

000E 01 MOV BX,0019

0011 00 MOV AH,4C

0013 00 INT 21

0015 00 0001

0017 00 0007

0019 00 0002

001B 00 0000

001D 00 0000

001F 10 0000

MAIN SEGMENT

ASSUME CS:MAIN,DS:MAIN;

EXTRN SUM:WORD;

MOV AX,CS

MOV DX,AX

MOV AX,100H

ADD AX,TABLE

MOV SAVE,AX

MOV BX,OFFSET POINT

MOV AH,4CH

INT 21H

TABLE DW 1, 7

;

POINT DW SAVE-RESULT

RESULT DW ?

SAVE DW ?

ASUM DW SUM

MAIN ENDS

END

slide38
절대상수와 재배치상수
  • 절대상수

*같은 모듈내의 기호끼리 연산결과

*SAVE - RESULT = 02

*어셈블러가 계산

  • 재배치상수

*기호의 값이 결정된 후 연산결과결정

*SUM - 5

*재배치비트 설정

slide39
링크를 위한 어셈블링
  • 번역된 프로그램:

목적코드로 된 모듈

  • 모듈의 길이:외부기호표
  • 외부기호:외부기호표
  • 내부기호:외부기호표
  • 재배치주소와 방법:재배치 링크표
slide40
원시프로그램과번역된프로그램
  • MAIN.ASM 모듈의 예

MAIN SEGMENT

ASSUME CS:MAIN,DS:MAIN;

EXTRN B:PROC,BI:WORD

PUBLIC A1;

A MOV AX,CS

MOV DS,AX

MOV AX,A2

ADD AX,A2+2

ADD AX,A2+4

CALL B

MOV AH,4CH

INT 21H

상대 재배치

주소 비트

0000 00 MOV AX,CS

0002 00 MOV DS,AX

0004 01 MOV AX,[0018]

0007 01 ADD AX,[001A]

000B 01 ADD AX,[001C]

000F 10 CALL 0000

0012 00 MOV AH,4C

0014 00 INT 21

slide41
원시프로그램과번역된프로그램
  • MAIN.ASM 모듈의 예

상대 재배치

주소 비트

0016 10 0

0018 10 20

001A 00 02

001C 10 05

001E 00 00

A1 DW B

A2 DW A1+10

DW A2-A1

DW B1+5

DW 0

MAIN ENDS

END

slide42
원시프로그램과번역된프로그램
  • SUBST.ASM 모듈의 예

MAIN SEGMENT

ASSUME CS:MAIN,DS:MAIN;

EXTRN A1:NEAR

PUBLIC B, B1;

B PROC

PUSH AX

PUSH BX

MOV AX, CS

MOV DX, AX

MOV AX, B1

ADD AX, B2+2

MOV B2, AX

상대 재배치

주소 비트

0000 00 PUSH AX

0001 00 PUSH BX

0002 00 MOV AX,CS

0004 00 MOV DS,AX

0006 01 MOV AX,[0013]

0009 01 ADD AX,[0017]

000D 10 MOV [0015],AX

slide43
원시프로그램과번역된프로그램
  • SUBST.ASM 모듈의 예

상대 재배치

주소 비트

0010 00 POP BX

0011 00 POP AX

0012 00 RET

0013 00 000A

0015 00

0017 10 0013

POP BX

POP AX

RET

B ENDP;

B1 DW 10

B2 DW ?

DW B1-A1

MAIN ENDS

END

slide44
번역된 프로그램의 분석
  • MAIN의 상대주소 0018H의 경우

*A1 = (A1 - A) + A

*A1 + 10 = (A1 - A) + A + 10

= 16H + A + 10

= 20H + A

slide45
번역된 프로그램의 분석
  • MAIN의 상대주소 001AH의 경우

*A2 - A1 = 02H

*재배치비트는 00으로 됨

  • SUBST의 상대주소 0009H의 경우

*B2 = (B2 - B) + B = 15H + B

*B2 + 2 = (B2 - B) + B + 2

= 15H + B + 2 = 17H + B

slide46
외부기호표의 형태와 예
  • 모듈 MAIN의 외부기호표

분류

SD

LD

LD

LD

ER

ER

상대주소

0000

0000

0016

0018

-

-

길이

1E

1E

-

-

-

-

기호

MAIN

A

A1

A2

B

B1

slide47
재배치 링크의 형태와 예
  • 모듈 MAIN의 재배치 링크표

+ 또는 -

+

+

+

+

+

+

+

상대주소

0004

0007

000B

000F

0016

0018

001C

기호

A

A

A

B

B

A

B1

상대주소 0004H에 A의 값을 더하라(+)

slide48
재배치 링크의 형태와 예
  • 모듈 SUBST의 외부기호표

분류

SD

LD

LD

LD

ER

상대주소

0000

0000

0013

0015

-

길이

19

13

-

-

-

기호

MAIN

B

B1

B2

A1

slide49
재배치 링크의 형태와 예
  • 모듈 SUBST의 재배치 링크표

+ 또는 -

+

+

+

+

-

상대주소

0006

0009

000D

0017

0017

기호

B

B

B

B

A1

slide50
링크 및 재배치의 과정
  • 패스1의 수행과정

*단순링크

*총괄외부기호표 작성

*총괄재배치링크표 작성

  • 패스2의 수행과정

*기호값의 수정위치와 방법 결정

*필요한 기호의 값 탐색

*재배치비트 참고 후 재배치

slide51
패스1이 만든 단순링크된 모듈

재배치

비트

상대주소

MAIN.ASM

0000 00 MOV AX, CS

0002 00 MOV DS, AX

0004 01 MOV AX, [0018]

0007 01 ADD AX, [001A]

000B 01 ADD AX, [001C]

000F 10 CALL 0000

slide52
패스1이 만든 단순링크된 모듈

재배치

비트

상대주소

0012 00 MOV AH, 4C

0014 00 INT 21

0016 10 0000

0018 10 0020

001A 00 0002

001C 10 0005

slide53

패스1이 만든 단순링크된 모듈

재배치

비트

상대주소

SUBST.ASM

001E 00 PUSH AX

001F 00 PUSH BX

0020 00 MOV AX, CS

0022 00 MOV DS, AX

0024 01 MOV AX, [0013]

slide54

패스1이 만든 단순링크된 모듈

재배치

비트

상대주소

0027 01 ADD AX, [0017]

002B 10 MOV [0015], AX

002E 00 POP BX

002F 00 POP AX

0030 00 RET

0031 00 000A

0033 00 -

0035 10 0013

slide55
패스1이만든총괄외부기호표형태

설명

(00H + 01EH)

(13H + 01EH)

(15H + 01EH)

기호

A

A1

A2

B

B1

B2

주소값

0000

0016

0018

001E

0031

0033

slide56
패스1이만든총괄재배치링크표

+ 또는 -

+

+

+

+

+

+

+

기호

A

A

A

B

B

A

B1

주소값

0004

0007

000B

000F

0016

0018

001C

slide57
패스1이만든총괄재배치링크표

+

+

+

+

-

B

B

B

B

A1

0024(06H + 01EH)

0027(09H + 01EH)

002B(0DH + 01EH)

0035(17H + 01EH)

0035(17H + 01EH)

slide58
패스2가 만든 적재모듈

재배치

비트

상대주소

MAIN.ASM

0000 00 -

0002 00 -

0004 01 MOV AX, [0018]

0007 01 ADD AX, [001A]

000B 01 ADD AX, [001C]

000F 10 CALL 001E

slide59
패스2가 만든 적재모듈

재배치

비트

상대주소

0012 00 -

0014 00 -

0016 10 001E

0018 10 0020

001A 00 0002

001C 10 0036

slide60
패스2가 만든 적재모듈

재배치

비트

상대주소

SUBST.ASM

001E 00 -

001F 00 -

0020 00 -

0022 00 -

0024 01 MOV AX, [0031]

0027 01 ADD AX, [0035]

slide61
패스2가 만든 적재모듈

재배치

비트

상대주소

002B 00 MOV [0033], AX

002E 00 -

002F 00 -

0030 00 -

0031 10 000A

0033 00 -

0035 00 001B

slide62
링크재배치상수와적재재배치상수
  • 링크재배치상수

모듈들을 링크하면 값이 결정

예) B1 - A1

  • 적재재배치상수

적재될 때 값이 결정

slide63
기억장소에 적재된 후의 모양
  • 기억장소의 할당이 100(64H)

번지부터 시작

주소

기억장치

0064

0066

0068

006B

006F

0073

8C C8 MOV AX, CS

8E D8 MOV DS, AX

A1 OO7C MOV AX, [007C]

03 06 007E ADD AX, [007E]

03 06 0080 ADD AX, [0080]

E8 7200 CALL 0082

slide64
기억장소에 적재된 후의 모양

주소

기억장치

0076

0078

007A

007C

007E

0080

0082

0083

B4 4C MOV AH, 4C

CD 21 INT 21

2000 -

2000 -

0200 -

3800 -

50 PUSH AX

53 PUSH BX

slide65
기억장소에 적재된 후의 모양

주소

기억장치

0084

0086

0088

008B

008F

0092

8C C8 MOV AX, CS

8E D8 MOV DS, AX

A1 0095 MOV AX, [0095]

03 06 0099 ADD AX, [0099]

A3 0097 MOV [0097], AX

5B POP BX

slide66
기억장소에 적재된 후의 모양

주소

기억장치

0093

0094

0095

0097

0099

58 POP AX

C3 RET

0A00 -

0000 -

1B00 -

slide67
패스1과 패스2의 데이터베이스

단순링크된

모듈

번역된

세그먼트들

적재

모듈

총괄외부

기호표

외부

기호표

총괄재배치

링크표

재배치

링크표

패스2

패스1

slide68
패스1의 알고리즘

시 작

세그먼트 배열순서 결정

입력

세그먼트들을

배열순서에

따라 연결

기호가 중복되지

않도록 기호표들을

단순연결

재배치링크표

들을 단순연결

slide69
패스1의 알고리즘

상대주소변경

(앞에 배열된

세그먼트의

길이를 더한다)

기호의 상대주소변경

상대주소변경

총괄외부

기호표

총괄재배치

링크표

단순링크된

모듈

패스1끝

slide70
패스2의 알고리즘

패스2 시작

총괄재배치링크표에서 한 줄을 읽음

총괄재배치링크표 끝?

패스2 끝

아니오

읽은 줄의 내용을 다음과 같이 변수에 치환

addr = 상대주소

symbol = 기호

sign = + 또는 -

slide71
패스2의 알고리즘

실패

총괄외부기호표에서

기호=symbol인 행을 탐색

오류

성공

탐색된 기호의 상대주소를 변수에 치환

Value=주소값

실패

단순링크 모듈에서

상대주소=addr 탐색

오류

성공

재배치비트가 가리키는 데이터에

Value를 sign에 따라 더함

slide72
제 7 장 요약
  • 링커와 로더의 역할
  • 로더의 종류
  • 링커와 로더가 필요한 정보 이해
  • 번역된 프로그램 형태 이해
  • 절대상수와 재배치상수 이해
  • 재배치 링크와 형태 이해
slide73
제 7 장 요약
  • 패스1과 패스2의 수행과정 이해
  • 패스1과 패스2의 자료구조 이해
  • 기억장소에 적재된 상태 이해
  • 패스1과 패스2의 알고리즘 이해