CS

명령어 사이클과 인터럽트

Jinn 2023. 12. 4. 01:06

CPU는 정해진 흐름에 따라 명령어를 처리하고 이 흐름을 명령어 사이클이라고 한다.

명령어 사이클은 메모리에 있는 명령어를 CPU의 레지스터로 가져오는 인출 사이클(fetch cycle)과 가져온 명령어를 실행하는 실행 사이클(execution cycle)이 반복하며 실행된다. 이때 CPU의 작업을 방해하는 신호를 인터럽트(interrupt)라고 한다. 인터럽트의 종류에는 동기 인터럽트와 비동기 인터럽트가 있다.

 

  • 동기 인터럽트(예외)

CPU가 명령어를 수행하다가 예상치 못한 상황을 마주쳤을 때 발생하는 인터럽트. 예외(exception)라고도 부른다.

 

  • 비동기 인터럽트(하드웨어 인터럽트)

주로 입출력창치에 의해 발생하는 알림과 같은 인터럽트. CPU가 입출력장치에 명령을 했을 때 입출력장치와의 속도 차이 때문에 작업 결과를 바로 받을 수 없다. 이때 CPU는 입출력장치의 작업이 끝날 때까지 기다리지 않고 다른 작업을 하고, 입출력장치는 작업을 완료하면 CPU에 인터럽트를 보내서 작업이 완료되었음을 알린다.

 

* 하드웨어 인터럽트 처리 순서

1. 입출력장치는 CPU에 인터럽트 요청 신호를 보낸다.

2. CPU는 실행 사이클이 끝나고 다음 인출 사이클을 시작하기 전에 인터럽트 여부를 확인한다.

3. 인터럽트 플래그를 통해 인터럽트를 받아들일 수 있는지 확인한다.

4. 인터럽트를 받아들일 수 있으면 지금까지의 작업을 백업한다.

5. 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴(인터럽트 핸들러)을 실행한다.

 

 

* 인터럽트 서비스 루틴: 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보를 담고 있는 프로그램

 

* 인터럽트 벡터: 인터럽트 서비스 루틴의 시작 주소를 식별하는 정보