CS

[CS] 명령어 사이클과 인터럽트

seonggu 2023. 2. 7. 14:07

✅ CPU가 하나의 명령어를 처리하는 과정에서 어떤 정해진 흐름이 있고, CPU는 그 흐름을 반복하며 명령어들을 처리해 나간다. 하나의 명령어를 처리하는 정형화된 흐름을 명령어 사이클이라고 한다,

 

CPU는 정해진 흐름에 따라 명령어를 처리해 나가지만, 간혹 이 흐름이 끊어지는 상황이 발생하는데 이를 인터럽트라고 한다.

 

1️⃣ 명령어 사이클

프로그램은 수많은 명령어로 이루어져 있고, CPU는 이 명령어 들을 하나씩 실행한다. 이때 프로그램 속 각각의 명령어들은 일정한 주기가 반복되어 실행되는데, 이 주기를 명령어 사이클(instruction cycle)이라고 한다. 프로그램 속 각각의 명령어들은 명령어 사이클이 반복되며 실행된다.

 

메모리에 저장된 명령어를 하나 실행한다고 가정할 때, 명령어를 메모리에서 CPU로 가져와야 한다. 이게 명령어 사이클의 첫 번째 과정이다. 메모리에 있는 명령어를 CPU로 가져오는 단계를 인출 사이클(fetch cycle)이라고 한다.

 

CPU로 명령어를 인출했다면 이제 명령어를 실행한다. 이것이 명령어 사이클의 두 번째 과정이다. CPU로 가져온 명령어를 실행하는 단계를 실행 사이클(execution cycle)이라고 한다. 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시키는 단계가 실행 사이클이다.

 

프로그램을 이루는 수많은 명령어는 일반적으로 인출과 실행 사이클을 반복하며 실행된다. CPU는 프로그램 속 명령어를 가져오고 실행하고, 또 가져오고 실행하고를 반복하는 것이다. 하지만 모든 명령어가 이렇게 간단하게 실행되진 않는다. 명령어를 인출하여 CPU로 가져왔다고 하더라도 곧바로 실행할 수 없는 경우도 있다.

 

예를 들어 간접 주소 지정 방식을 생각해 보면, 간접 주소 지정 방식은 오퍼랜드 필드에 유효 주소의 주소를 명시한다. 이 경우 명령어를 인출하여 CPU로 가져왔다고 하더라도 실행 사이클에 돌입할 수 없다. 명령어를 실행하기 위해 메모리 접근을 한 번 더 해야 하기 때문이다. 이 단계를 간접 사이클(indirect cycle)이라고 한다. 아래는 간접 사이클까지 추가한 명령어 사이클 도식이다.

2️⃣ 인터럽트

인터럽트란 무엇일까? interrupt는 '방해하다, 중단시키다'의 의미를 가지고 있다.

CPU가 수행 중인 작업은 방해를 받아 잠시 중단될 수 있다. 이렇게 CPU의 작업을 방해하는 신호를 인터럽트(interrupt)라고 한다. 인터럽트의 종류는 크게 동기 인터럽트와 비동기 인터럽트가 있다.

동기 인터럽트(synchronous interrupts)는 CPU에 의해 발생하는 인터럽트이다. CPU가 명령어들을 수행하다가 예상하지 못한 상황에 마주쳤을 때, CPU가 실행하는 프로그래밍상의 오류와 같은 예외적인 상황에 마주쳤을 때 발생하는 인터럽트가 동기 인터럽트이다. 이런 점에서는 동기 인터럽트는 예외(exception)이라고 부른다. 

 

비동기 인터럽트(asynchornous interrupts)는 주로 입출력장치에 의해 발생하는 인터럽트이다. 입출력장치에 의한 비동기 인터럽트는 세탁기 완료 알림, 전자레인지 조리 완료 알림과 같은 알림 역할을 한다.

● CPU가 프린터와 같은 입출력장치에 입출력 작업을 부탁하면 작업을 끝낸 입출력장치가 CPU에 완료 알림(인터럽트)를 보낸다.

● 키보드, 마우스와 같은 입출력장치가 어떠한 압력을 받아들였을 때 이를 처리하기 위한 CPU에 입력한(인터럽트)을 보낸다.

일반적으로 비동기 인터럽트를 인터럽트라고 칭한다고 한다. 하드웨어 인터럽트라고도 사용하기도 한다.

 

다음 글에서는 하드웨어 인터럽트 처리 순서에 대해 기술해 보도록 하자.

 

참고자료 -