Your SlideShare is downloading. ×
0
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

1.4.2 코루틴연습문제

885

Published on

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

  • Be the first to like this

No Downloads
Views
Total Views
885
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 1.4.2 코루틴 연습문제
  • 2. 1. 교재를 저술하는 저자가 짧고 간단한 코루틴 예제를 찾기 힘들어하는 이유는 무엇인지 설명하라.
  • 3. 1.어떤 코루틴이 다른 코루틴을 한 번만 호출한다면 그냥 서브루틴일 뿐이다. 따라서 각 코루틴이 다른 코루틴을 적어도 서로 다른두 장소에서 호출하는 응용문제를 찾아야 한다. 게다가, 일종의 스위치를 설정하거나 어떤 자료 속성을 활용해서한 코루틴안의 어떤 고정된 장소로의 진입점으로부터 그런 두 장소중 하나로 분기하게 만드는 게 더 쉬운 경우도 많다. 그런 경우라면그냥 서브루틴으로 충분하다. 코루틴은 코루틴들 사이의 참조횟수가 커질수록 더 유용해진다.
  • 4. 2. 본문의 프로그램은 OUT 코루틴부터 시작한다. 만일 IN부터시작한다면, 즉 줄 60을 "JMP OUT1"에서 "JMP IN1"로 바꾼다면어떻게 될까?
  • 5. 2.IN으로 얻은 첫 글자를 잃게 된다. [본문의 예제에서는, 줄58~59에서 IN에 필요한 초기화를 수행했기 때문에 OUT부터 수행을 시작한다. 만일 IN을 먼저 시작하고자 한다면, OUT의 초기화를 위해 "ENT4 -16"을 수행하고 만일 출력 버퍼가 비어 있다는초기조건이 없다면 출력 버퍼를 비우는 작업을 먼저 수행해야한다. 그런 다음에 줄 62에서 먼저 줄 39로 점프하도록 한다.]
  • 6. 3. 참 또는 거짓을 말하라 : OUT 코루틴 안의 세 "CMPA PERIOD"명령들을 모두 제거할 수 있으며, 그래도 프로그램이 제대로 작동한다.(세심히 살펴볼 것.)
  • 7. 3.거의 참이다. 그 명령을 제거한다면 IN의 "CMPA =10="이 프로그램 전체에서 유일한 비교 명령이 되기 때문이며, 또한 "."에 대한 코드가 40이기 때문이다. (!) 그러나 만일 마지막 마침표 앞에 반복 횟수 숫자가 존재한다면 IN의 조건 판정은 그 사실을 놓치게 된다. [참고: 줄 40,44,48을 제거하고 줄 26과 27 사이에"CMPA PERIOD"를 삽이해서 프로그램을 더욱 최적화할 수 있다.그러나 만일 비교 지시자의 상태가 코루틴을 넘나들면서 쓰인다면, 그 사실을 프로그램 문서화에 코루틴 특성들의 일부로 기록해 두어야 할 것이다.]
  • 8. 4.독자에게 익숙한 실제 컴퓨터에게 (1) 비견할 수 있는 코루틴연계를 달성하려면 어떻게 해야 하는지 말하라.
  • 9. 4. 다음은 역사적으로 중요한 세 가지의 상당히 다른 컴퓨터들의예이다. (i) IBM 650에서 SOAP 어셈블리 언어를 사용하는 경우호출 명령열은 "LDD A"와 "LDD B", 연계는 "A STD BX AX"와 "BSTD AX BX"이다(두 연께 명령들을 되도록이면 코어에 둔다.) (ii)IBM 709에서 공통 어셈블리 언어들을 사용하는 경우 호출 명령열은 "TSX A,4"와 "TSX B,4"이고 연계 명령들은 다음과 같다. A SXA BX,4 B STA AX,4 AX AXT 1-A1,4 BX AXT 1-B1,4 TRA 1,4 TRA 1,4(iii) CDC 1604에서 호출 명령열은 A나 B로의 "복귀 점프" (SLJ 4)이고 연계는 예를 들면 A: SLJ B1; ALS 0 B: SLJ A1; SLJ A이다. 이들은 연속적인 두 48비트 워드들에 담긴다.
  • 10. 5.코루틴 IN과 OUT 모두, 그 들어옴과 나감 사이에서 레지스터A의 내용이 변하지 않아야 한다고 하자. 달리 표현하자면, OUT안에서 언제 "JMP IN" 명령이 수행된다 하더라도 나중에 그 다음줄로 돌아왔을 때 레지스터 A의 내용이 그 전과 변함없어야 하는 것이다. IN 안에서 "JMP OUT"이 수행되었을 때에도 마찬가지이다. 이를 위해서는 어떤 코루틴 연계가 필요한가? (그것을 (4)의 것과 비교해 볼것.)
  • 11. 5.OUT과 OUTX사이에 "STA HOLDAIN; LDA HOLDAOUT",IN과 INX사이에 "STA HOLDAOUT;LDA HODAIN"
  • 12. 6. 세 코루틴 A,B,C가 각각 다른 둘 중 하나로 점프할 수 있는 경우에 대한, (1)과 비슷한 형태의 코루틴 연계를 제시하라. (한 코루틴이 발동될 때마다 그 코루틴은 이전에 마지막으로 자신을떠났던 곳에서 시작해야 한다.)
  • 13. 6.A안에서 "JMP AB"로 B를, "JMP AC"로 C를 발동한다. B와 C에서는 장소 BA,BC,CA,CB를 그와 비슷하게 사용하면 된다. 연계는 AB STJ AX BC STJ BX CA STJ CX BX JMP B1 CX JMP C1 AX JMP A1 CB STJ CX AC STJ AX BA STJ BX JMP BX JMP CX JMP AX[참고: 코루틴이 n개라 할 때, 이런 스타일의 연계에 필요한 메모리 칸수는 2(n-1)n개이다. 만일 n이 크다면 연계를 위한 "중앙집중적"루틴을 사용하는 게 물론 나을 것이다. 3n+2 칸들만 사용하는 방법을 고안하는 것도 어렵지 않다. 그러나 실제 응용에서 위에 나온 더 빠른 방법은 2m개의 칸들만 사용한다.여기서 m은 코루틴 i에서 코루틴 j로 점프한다고 할 때 그런(i,j) 쌍들의 개수이다. 각자 독립적으로 다른 코루틴으로 점프하는 코루틴들이 많다면, 제어의 흐름은 일반적으로 외부의 영향 하에 놓이게 된다.(2.2.5절 참고)]
  • 14. COUROUTINES IN Chttp://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
  • 15. * SUBROUINE FOR CHARACTER INPUTREADER EQU 16INPUT ORIG *+16NEXTCHAR STJ 9F JXNZ 3F1H J6N 2F IN INPUT(READER) JBUS *(READER) ENN6 162H LDX INPUT+16,6 INC6 13H ENTA 0 SLAX 19H JANZ * JMP NEXTCHAR+1* FIRST COROUTINE2H INCA 30 JMP OUTIN1 JMP NEXTCHAR DECA 30 JAN 2B CMPA =10= JGE 2B STA *+1(0:2) ENT5 * JMP NEXTCHAR JMP OUT DEC5 1 J5NN *-2

×