(Computer Architecture) 인터럽트 사이클

인터럽트(interrupt):프로그램 처리 중에 CPU로 하여금 순차적인 명령어 실행을 중단하고 다른 프로그램을 처리하도록 요구할 수 있는 메커니즘. 주프로그램(main program)의 관점에서 볼때 정상적인 프로그램 처리의 흐름을 방해하는 동작이나, 긴급한 상황에 대처하거나 외부 장치들과의 상호 작용을 위하여 반드시 필요한 기능이다.

인터럽트 서비스 루틴(interrupt service routine:ISR):CPU가 어떤 프로그램을 순차적으로 수행하는 도중에 외부로부터 인터럽트 요구가 들어오게 되면, CPU는 원래의 프로그램 수행을 중단하고 요구된 인터럽트를 처리해주기 위한 프로그램을 먼저 수행한다. 인터럽트에 대한 처리가 끝나면 CPU는 원래의 프로그램으로 복귀(return)하여 그 수행을 계속한다.




만약, 인터럽트 요구가 들어왔다면, CPU는 다음의 동작들을 수행한다.
  1.  다음에 실행할 명령어의 주소를 가리키는 현재의 PC 내용을 스택(stack)에 저장한다. 이것은 인터럽트 처리를 완료한 후에 복귀할 주소를 저장해두기 위한 절차이다.
  2. 해당 인터럽트 서비스 루틴을 호출하기 위하여 그 루틴의 시작 주소를 PC에 적재한다. 이때 시작 주소는 인터럽트를 요구한 장치로부터 전송되거나 미리 정해진 값으로 결정된다.
만약, 중요한 프로그램이 실행되는 중이라서 CPU가 인터럽트를 받지 못하도록 설정 되어 있는 경우라면, 인터럽트 사이클은 수행되지 않는다. 그렇지 않은 경우라면 CPU는 항상 인터럽트 사이클을 수행한다.

인터럽트 사이클(interrupt cycle):
t0: MBR  PC
t1: MAR ← SP, PC ← ISR 의 시작 주소
t2: M[MAR] ← MBR, SP ← SP-1
스택포인터(stack pointer:SP):특수 목적용 레지스터들 중의 하나로 그 냐용은 항상 스택의 최상위(top of stack:TOS)의 주소를 가리킨다. 일반적으로 스택으로는 주기억장치의 끝 부분이 사용되기 때문에, SP의 초기값은 주기억장치의 마지막 주소로 설정된다.


다중 인터럽트(multiple interrupt):인터럽트 서비스 루틴의 명령어들이 실행되고 있는 동안에 다른 인터럽트 요구가 발생. 다중 인터럽트를 처리하는 방법으로는 두 가지가 있다.
  1. CPU가 인터럽트 서비스 루틴을 처리하고 있는 도중에는 새로운 인터럽트 요구가 들어 오더라도 인터럽트 사이클을 수행하지 않도록 하는 것.(interrupt disabled) 이렇게되면 그 루틴을 처리하는 동안에 발생한 인터럽트 요구는 대기 상태로 남아 있다가, CPU가 다시 인터럽트 가능(interrupt enabeld) 상태로 바뀐후에 인식
  2. 인터럽트 요구들 간에 우선순위를 정하고, 우선순위가 낮은 인터럽트 요구를 처리하고 있는 동안에 우선순위가 더 높은 인터럽트 요구가 들어오면, 현재의 인터럽트 서비스 루틴의 수행을 중단하고 새로운 인터럽트를 처리.

댓글

이 블로그의 인기 게시물

(ElasticSearch) 결과에서 순서 정렬

(네트워크)폴링방식 vs 롱 폴링방식

(18장) WebSocekt과 STOMP를 사용하여 메시징하기