명령어 사이클과 인터럽트
( 명령어 사이클 [컴퓨터가 명령어를 처리하는 순서] )
컴퓨터가 메모리에 있는 명령어를 실행하려면 먼저 CPU가 메모리에서 해당 명령어를 가져와야 한다. 이런 과정을 '인출'이라고 부른다. 그러나 명령어를 CPU로 가져왔다 해도 바로 실행할 수 없는 경우도 있다. 예를 들어, 추가적으로 메모리에 접근해야 하는 경우가 있을 수 있다.
이런 과정들을 "명령어 사이클(instruction cycle)"이라고 한다.
명령어 사이클에는 크게 세 가지가 있다.
- 인출 사이클 (Fetch cycle): 메모리에서 명령어를 CPU로 가져오는 단계.
- 실행 사이클 (Execution cycle): CPU에서 명령어를 실행하는 단계. 여기서 제어 장치는 명령어 레지스터에 담긴 값을 해석하고 제어 신호를 발생시킨다.
- 간접 사이클 (Indirect cycle): 명령어를 실행하기 위해 한 번 더 메모리 접근을 하는 과정을 간접 사이클이라고 한다. 간접 주소 지정 방식을 사용하는 경우에 필요한 사이클이다.
( 인터럽트: CPU에게 긴급한 일을 알리는 방법 )
명령어 사이클이 원활하게 진행되는 동안, 때때로 CPU는 '인터럽트'라는 메시지를 받는다. 이 메시지는 "CPU야, 지금 다른 일을 하고 있더라도 이건 긴급해서 지금 당장 처리해야 하는 일이야"라는 식의 메시지이다.
인터럽트는 크게 두 가지로 나뉜다.
< 동기 인터럽트 (예외) >
CPU가 예기치 못한 상황에 부딪혔을 때 발생한다. 예를 들면, CPU가 접근해야 하는 주소에 접근했는데 메모리가 없거나, 연산 중 오버플로우가 발생하는 경우가 있다. 이런 경우, CPU는 현재의 작업을 중단하고 이러한 예외 상황을 처리한다.
< 비동기 인터럽트 >
인터럽트는 CPU가 다른 작업을 수행하는 도중에 외부에서 발생하는 이벤트에 의해 발생한다. 이들은 주로 입출력 장치(IO devices), 타이머, 그리고 다른 프로세서에서 발생한다. 예를 들어, 키보드가 키 입력을 받았거나, 네트워크 카드가 데이터 패킷을 받았을 때 이런 비동기 인터럽트가 발생할 수 있다. 이러한 인터럽트가 발생하면 CPU는 현재의 작업을 일시 중단하고 이 인터럽트를 처리한다.
인터럽트가 발생하면 CPU는 현재 실행 중인 명령어를 완료한 후 인터럽트 처리를 시작한다. 이는 인터럽트가 발생한 시점의 CPU 상태를 저장하고, 해당 인터럽트를 처리하는 데 필요한 서비스 루틴으로 점프하는 과정을 포함한다. 인터럽트 처리가 완료되면, CPU는 인터럽트가 발생하기 전의 상태를 복구하고, 원래의 작업을 계속 수행한다.
정리하자면, CPU가 메모리에 저장된 명령어를 처리하는 과정은 명령어 사이클을 통해 이루어지며, 때때로 긴급한 작업을 처리해야 할 때는 인터럽트가 발생한다. 이렇게 명령어 사이클과 인터럽트를 통해 CPU는 다양한 작업을 효율적으로 처리하며, 컴퓨터 시스템이 원활하게 작동하도록 돕는다.
Reference : 혼자 공부하는 컴퓨터 구조+운영체제
https://product.kyobobook.co.kr/detail/S000061584886