TAOCP 1<br />1.4.1 서브루틴 연습문제<br />아꿈사<br />이영권<br />whiletrue0222@gmail.com<br />
1. [10] (4)는 서브루틴 1.3.2M의 특성들을 서술한 것이다.그것을 참고해서 서브루틴 (5)의 특성들을 서술하라.<br />
1. [10] (4)는 서브루틴 1.3.2M의 특성들을 서술한 것이다.그것을 참고해서 서브루틴 (5)의 특성들을 서술하라.<br />1.4.1 (4) p233호출 명령열:<br />JMP MAXIMUM들어올 때 조건:<...
1. [10] (4)는 서브루틴 1.3.2M의 특성들을 서술한 것이다.그것을 참고해서 서브루틴 (5)의 특성들을 서술하라.<br />1.4.1 (4) p233호출 명령열:<br />JMP MAXIMUM들어올 때 조건:<...
2. [10] JSJ 명령을 사용하지 않고 (6)과 같은 일을 하는 코드를 제시하라.<br />
2. [10] JSJ 명령을 사용하지 않고 (6)과 같은 일을 하는 코드를 제시하라.<br />1.4.1.(6)<br />MAX50		ENT3	50<br />JSJ	MAXN<br />MAX100		ENT3	100<br ...
2. [10] JSJ 명령을 사용하지 않고 (6)과 같은 일을 하는 코드를 제시하라.<br />1.4.1.(6)<br />MAX50		ENT3	50<br />JSJ	MAXN<br />MAX100		ENT3	100<br ...
3. [M15] 서브루틴 수행의 결과로 레지스터 J와 비교 지시자에 어떤 일이 생기는지를 명시적으로 밝힘으로써 (4)의 정보를 완성하라.<br />또한 레지스터 I1이 양의 값이 아닐 때 어떤 일이 생기는지도 말하라.<...
4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인,<br />다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최...
4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인,<br />다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최...
4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인,<br />다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최...
4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인,<br />다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최...
5. [21] MIX에 J레지스터가 없다고 가정하고, 레지스터 J를 사용하지 않는 서브루틴 연계를 위한 수단을 고안하라.<br />그리고 그러한 고안의 실용 사례로, (1)과 사실상 동등한 MAX100 서브루틴을 작성하...
5. [21] MIX에 J레지스터가 없다고 가정하고, 레지스터 J를 사용하지 않는 서브루틴 연계를 위한 수단을 고안하라.<br />그리고 그러한 고안의 실용 사례로, (1)과 사실상 동등한 MAX100 서브루틴을 작성하...
6. [26] MIX에 MOVE 연산자가 없다고 가정하고,호출 명령열"JMP MOVE; NOP A,I(F)"가 "MOVE A,I(F)"(MOVE 명령이 허용된다고 할 때)와 같은 효과가 되는 서브루틴 MOVE를 작성하라...
6. [26] MIX에 MOVE 연산자가 없다고 가정하고,호출 명령열"JMP MOVE; NOP A,I(F)"가 "MOVE A,I(F)"(MOVE 명령이 허용된다고 할 때)와 같은 효과가 되는 서브루틴 MOVE를 작성하라...
호출 프로그램 / 메모리 영역 정의<br />	ENTA	55		rA, rI2는 사용중이었다고 가정<br />	ENT2	11<br />	ENT1	3		복사목적지 주소<br />	JMP	MOVE<br />	NOP 	1(2)...
MOVE	STJ	3F<br />	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4)...
MOVE	STJ	3F<br />	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4)...
MOVE	STJ	3F<br />	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4)...
MOVE	STJ	3F<br />	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4)...
MOVE	STJ	3F<br />	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4)...
MOVE	STJ	3F<br />	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4)...
MOVE	STJ	3F<br />	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4)...
MOVE	STJ	3F<br />	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4)...
MOVE	STJ	3F<br />	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4)...
MOVE	STJ	3F<br />	STA	4F	ST2	5F(0:2)	LD2	3F(0:2) 	LDA	0,2(0:3) 	STA	*+2(0:3)	LD2	5F(0:2) 	ENTA	*	LD2	3F(0:2)	LD2N	0,2(4:4)...
7. [20] 오늘날의 관점에서 자기 수정 코드가 문제가 되는 이유는 무엇인가?<br />프로그램 블록들이 "읽기 전용"임을 알고 있다면 운영체제는 고속 메모리를 좀 더 효율적으로 할당할 수 있다.<br />명령들이 변...
7. [20] 오늘날의 관점에서 자기 수정 코드가 문제가 되는 이유는 무엇인가?<br />프로그램 블록들이 "읽기 전용"임을 알고 있다면 운영체제는 고속 메모리를 좀 더 효율적으로 할당할 수 있다.<br />명령들이 변...
7. [20] 오늘날의 관점에서 자기 수정 코드가 문제가 되는 이유는 무엇인가?<br />프로그램 블록들이 "읽기 전용"임을 알고 있다면 운영체제는 고속 메모리를 좀 더 효율적으로 할당할 수 있다.<br />명령들이 변...
감사합니다. :D<br />
Upcoming SlideShare
Loading in …5
×

Taocp 1.4.1 subroutine

888 views

Published on

아꿈사 발표자료

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
888
On SlideShare
0
From Embeds
0
Number of Embeds
155
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Taocp 1.4.1 subroutine

  1. 1. TAOCP 1<br />1.4.1 서브루틴 연습문제<br />아꿈사<br />이영권<br />whiletrue0222@gmail.com<br />
  2. 2. 1. [10] (4)는 서브루틴 1.3.2M의 특성들을 서술한 것이다.그것을 참고해서 서브루틴 (5)의 특성들을 서술하라.<br />
  3. 3. 1. [10] (4)는 서브루틴 1.3.2M의 특성들을 서술한 것이다.그것을 참고해서 서브루틴 (5)의 특성들을 서술하라.<br />1.4.1 (4) p233호출 명령열:<br />JMP MAXIMUM들어올 때 조건:<br /> rI1 = n; n ≥ 1이라고 가정.나갈 때 조건:<br />rA= max{1≤k≤n} CONTENTS(X + k) = CONTENTS(X + rI2); rI3 = 0 ; rJ와 CI도 영향을 받음.<br />차이점:<br />n이 100일 경우의 진입점만 추가되었다.<br />
  4. 4. 1. [10] (4)는 서브루틴 1.3.2M의 특성들을 서술한 것이다.그것을 참고해서 서브루틴 (5)의 특성들을 서술하라.<br />1.4.1 (4) p233호출 명령열:<br />JMP MAXIMUM들어올 때 조건:<br /> rI1 = n; n ≥ 1이라고 가정.나갈 때 조건:<br />rA= max{1≤k≤n} CONTENTS(X + k) = CONTENTS(X + rI2); rI3 = 0 ; rJ와 CI도 영향을 받음.<br />해답:호출 명령열:<br /> JMP MAXN; 또는 만일 n = 100이면 JMP MAX100들어올 때 조건:<br /> MAXN 진입점의 경우 rI3 = n (n ≥ 1 이라고 가정).나갈 때 조건:<br />(4)에서와 같음.<br />
  5. 5. 2. [10] JSJ 명령을 사용하지 않고 (6)과 같은 일을 하는 코드를 제시하라.<br />
  6. 6. 2. [10] JSJ 명령을 사용하지 않고 (6)과 같은 일을 하는 코드를 제시하라.<br />1.4.1.(6)<br />MAX50 ENT3 50<br />JSJ MAXN<br />MAX100 ENT3 100<br />MAXN STJ EXIT<br /> JMP 2F<br /> ..<br /> ..<br />
  7. 7. 2. [10] JSJ 명령을 사용하지 않고 (6)과 같은 일을 하는 코드를 제시하라.<br />1.4.1.(6)<br />MAX50 ENT3 50<br />JSJ MAXN<br />MAX100 ENT3 100<br />MAXN STJ EXIT<br /> JMP 2F<br /> ..<br /> ..<br />1.4.1.(6)<br />MAX50 STJ EXIT<br />ENT3 50<br /> JMP 2F<br />MAX100 ENT3 100<br />MAXN STJ EXIT<br /> JMP 2F<br /> ..<br /> ..<br />rJ를 미리 저장하고 JUMP한다.<br />
  8. 8. 3. [M15] 서브루틴 수행의 결과로 레지스터 J와 비교 지시자에 어떤 일이 생기는지를 명시적으로 밝힘으로써 (4)의 정보를 완성하라.<br />또한 레지스터 I1이 양의 값이 아닐 때 어떤 일이 생기는지도 말하라.<br />
  9. 9. 4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인,<br />다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최대값을 구하는 서브루틴이 되도록 MAXN을 일반화하라.r = 1 인 경우에 대한 특별한 진입점도 제공할 것.<br />또한, 일반화한 서브루틴의 특성을 (4)처럼 서술하라.<br />
  10. 10. 4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인,<br />다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최대값을 구하는 서브루틴이 되도록 MAXN을 일반화하라.r = 1 인 경우에 대한 특별한 진입점도 제공할 것.<br />또한, 일반화한 서브루틴의 특성을 (4)처럼 서술하라.<br />n = 7<br />r = 3<br />a = 1<br />n = 8<br />r = 3<br />a = 2<br />
  11. 11. 4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인,<br />다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최대값을 구하는 서브루틴이 되도록 MAXN을 일반화하라.r = 1 인 경우에 대한 특별한 진입점도 제공할 것.<br />또한, 일반화한 서브루틴의 특성을 (4)처럼 서술하라.<br />SMAX1 ENT1 1 r = 1SMAX STJ EXIT 그 외의 r. JMP 2F 이전과 같은 방식으로 진행 ...DEC3 0,1 r만큼 감소. J3P 1BEXIT JMP * 나간다.<br />
  12. 12. 4. [21] r과 n이 매개변수이고 a가 a ≡ n (modulo r)인,<br />다시 말해서 a = 1 + (n - 1) mod r인 양수라고 할 때,X[a], X[a+r], X[a+2r], ..., X[n]의 최대값을 구하는 서브루틴이 되도록 MAXN을 일반화하라.r = 1 인 경우에 대한 특별한 진입점도 제공할 것.<br />또한, 일반화한 서브루틴의 특성을 (4)처럼 서술하라.<br />
  13. 13. 5. [21] MIX에 J레지스터가 없다고 가정하고, 레지스터 J를 사용하지 않는 서브루틴 연계를 위한 수단을 고안하라.<br />그리고 그러한 고안의 실용 사례로, (1)과 사실상 동등한 MAX100 서브루틴을 작성하라. 그 서브루틴의 특성을 (4)처럼 서술하라. (MIX의 자기 수정 코드 방식은 유지할 것.)<br />
  14. 14. 5. [21] MIX에 J레지스터가 없다고 가정하고, 레지스터 J를 사용하지 않는 서브루틴 연계를 위한 수단을 고안하라.<br />그리고 그러한 고안의 실용 사례로, (1)과 사실상 동등한 MAX100 서브루틴을 작성하라. 그 서브루틴의 특성을 (4)처럼 서술하라. (MIX의 자기 수정 코드 방식은 유지할 것.)<br />다른 레지스터를 사용해서 수동으로 JUMP주소를 기록한다.<br />호출 코드<br />ENTA  *+2JMP          MAX100<br />서브루틴 코드<br />MAX100 STA EXIT(0:2)<br /> ..<br />MAX100 STJ EXIT<br /> JMP 2F<br /> ..<br />
  15. 15. 6. [26] MIX에 MOVE 연산자가 없다고 가정하고,호출 명령열"JMP MOVE; NOP A,I(F)"가 "MOVE A,I(F)"(MOVE 명령이 허용된다고 할 때)와 같은 효과가 되는 서브루틴 MOVE를 작성하라.레지스터 J에 대한 영향과 서브루틴이 하드웨어 명령보다 당연히 더 많은 시간과 공간을 차지한다는 사실에서만 차이가 나야한다.<br />
  16. 16.
  17. 17. 6. [26] MIX에 MOVE 연산자가 없다고 가정하고,호출 명령열"JMP MOVE; NOP A,I(F)"가 "MOVE A,I(F)"(MOVE 명령이 허용된다고 할 때)와 같은 효과가 되는 서브루틴 MOVE를 작성하라.레지스터 J에 대한 영향과 서브루틴이 하드웨어 명령보다 당연히 더 많은 시간과 공간을 차지한다는 사실에서만 차이가 나야한다.<br />MOVE A,I(F)<br />JMP MOVE<br />NOP A,I(F)<br />
  18. 18. 호출 프로그램 / 메모리 영역 정의<br /> ENTA 55 rA, rI2는 사용중이었다고 가정<br /> ENT2 11<br /> ENT1 3 복사목적지 주소<br /> JMP MOVE<br /> NOP 1(2) 원본주소(복사크기)<br />
  19. 19. MOVE STJ 3F<br /> STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP *<br />4H CON 0<br />
  20. 20. MOVE STJ 3F<br /> STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP *<br />4H CON 0<br />rA와 rI2를 저장<br />레지스터 저장<br />
  21. 21. MOVE STJ 3F<br /> STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP *<br />4H CON 0<br />rI2에<br />NOP 1(2)<br />명령이 저장된 주소를 읽음<br />NOP A,I(F) 읽기<br />
  22. 22. MOVE STJ 3F<br /> STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP *<br />4H CON 0<br />명령열NOP 1(2) A,I 에서<br />A,I를 읽고<br />*+2에 저장함.<br />NOP A,I(F) 읽기<br />
  23. 23. MOVE STJ 3F<br /> STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP *<br />4H CON 0<br />rI2를 복구<br />NOP 1,2(2) 이럴경우쓰기때문임.<br />ENTA로 원본주소를 읽음.<br />NOP A,I(F) 읽기<br />
  24. 24. MOVE STJ 3F<br /> STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP *<br />4H CON 0<br />다시 NOP 0(2) <- 명령이 저장된 주소를 읽음<br />복사되는 크기를 음수로 읽음.<br />NOP A,I(F) 읽기<br />
  25. 25. MOVE STJ 3F<br /> STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP *<br />4H CON 0<br />복사크기가 0이면 종료<br />MOVE 0은 아무동작 안함.<br />인수 검사<br />
  26. 26. MOVE STJ 3F<br /> STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP *<br />4H CON 0<br />rA가 소스영역끝주소+1을 가르키도록 한다.<br />rI1은 복사영역끝주소+1을<br />가르키도록 한다.<br />소스주소 – (- 크기)<br />인덱스 지정<br />
  27. 27. MOVE STJ 3F<br /> STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP *<br />4H CON 0<br />소스를 읽고<br />값을 쓴다.<br />인덱스 감소<br />인덱스가 음수면 다시<br />값 복사 / 반복<br />
  28. 28. MOVE STJ 3F<br /> STA 4F ST2 5F(0:2) LD2 3F(0:2) LDA 0,2(0:3) STA *+2(0:3) LD2 5F(0:2) ENTA * LD2 3F(0:2) LD2N 0,2(4:4) J2Z 1F DECA 0,2 STA2F(0:2) DEC1 0,2 ST16F(0:2)2H LDA *,26H STA *,2 INC2 1 J2N 2B1H LDA 4F5H ENT2 *3H JMP *<br />4H CON 0<br />rA와 rI2를 복구하고 종료<br />레지스터 복구<br />
  29. 29. 7. [20] 오늘날의 관점에서 자기 수정 코드가 문제가 되는 이유는 무엇인가?<br />프로그램 블록들이 "읽기 전용"임을 알고 있다면 운영체제는 고속 메모리를 좀 더 효율적으로 할당할 수 있다.<br />명령들이 변하지 않는다면 하드웨어의 명령 캐시(cache)가 더 빠르고 저렴해진다.<br />(2)에서 "캐시" 대신 "파이프라인"이라고 해도 마찬가지. 어떤 명령이 파이프라인에 진입한 후에 변경되었다면 파이프라인은 비워져야 한다. CPU 회로가 이러한 조건을 점검하려면 더 복잡해져야 하며, 시간도 더 소비한다.<br />자기 수정 코드는 한 번에 한 프로세스에서만 사용할 수 있다.<br />자기 수정 코드는 점프 추적 루틴을 실패하게 만들 수 있다(연습문제 1.4.3.2-7). 점프 수정 루틴은 "프로파일링"(각 명령의 수행 횟수를 계산하는 것)을 위한 중요한 진단 도구이다.<br />
  30. 30. 7. [20] 오늘날의 관점에서 자기 수정 코드가 문제가 되는 이유는 무엇인가?<br />프로그램 블록들이 "읽기 전용"임을 알고 있다면 운영체제는 고속 메모리를 좀 더 효율적으로 할당할 수 있다.<br />명령들이 변하지 않는다면 하드웨어의 명령 캐시(cache)가 더 빠르고 저렴해진다.<br />(2)에서 "캐시" 대신 "파이프라인"이라고 해도 마찬가지. 어떤 명령이 파이프라인에 진입한 후에 변경되었다면 파이프라인은 비워져야 한다. CPU 회로가 이러한 조건을 점검하려면 더 복잡해져야 하며, 시간도 더 소비한다.<br />자기 수정 코드는 한 번에 한 프로세스에서만 사용할 수 있다.<br />자기 수정 코드는 점프 추적 루틴을 실패하게 만들 수 있다(연습문제 1.4.3.2-7). 점프 수정 루틴은 "프로파일링"(각 명령의 수행 횟수를 계산하는 것)을 위한 중요한 진단 도구이다.<br />MIX가 멀티태스킹 환경이면<br />자기 수정 코드는<br />다른 프로세스 동작에 영향을 준다.<br />
  31. 31. 7. [20] 오늘날의 관점에서 자기 수정 코드가 문제가 되는 이유는 무엇인가?<br />프로그램 블록들이 "읽기 전용"임을 알고 있다면 운영체제는 고속 메모리를 좀 더 효율적으로 할당할 수 있다.<br />명령들이 변하지 않는다면 하드웨어의 명령 캐시(cache)가 더 빠르고 저렴해진다.<br />(2)에서 "캐시" 대신 "파이프라인"이라고 해도 마찬가지. 어떤 명령이 파이프라인에 진입한 후에 변경되었다면 파이프라인은 비워져야 한다. CPU 회로가 이러한 조건을 점검하려면 더 복잡해져야 하며, 시간도 더 소비한다.<br />자기 수정 코드는 한 번에 한 프로세스에서만 사용할 수 있다.<br />자기 수정 코드는 점프 추적 루틴을 실패하게 만들 수 있다(연습문제 1.4.3.2-7).점프 수정 루틴은 "프로파일링"(각 명령의 수행 횟수를 계산하는 것)을 위한 중요한 진단 도구이다.<br />1.4.3 발표하시는 분이..<br />
  32. 32. 감사합니다. :D<br />

×