본문 바로가기
컴퓨터구조

[혼자 공부하는 컴퓨터구조] 04-3. 명령어 사이클과 인터럽트

by Lizardee 2023. 7. 27.
명령어 사이클(instruction cycle)

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

  • 인출 사이클(fetch cycle): 메모리에 있는 명령어를 CPU로 가지고 오는 단계
  • 실행 사이클(execution cycle): CPU로 가져온 명령어를 실행하는 단계; 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시킨다.
  • 간접 사이클(indirect cycle): 어떤 명령어는 인출과 실행 사이클만으로 실행되고, 어떤 명령어는 인출, 간접, 실행 사이클을 거쳐 실행된다.

 

인터럽트(interrupt)
동기 인터럽트(synchronous interrupt) = 예외(exception)

: CPU에 의해 발생하는 인터럽트

  • CPU가 명령어들을 수행하다가 예상치 못한 상황에 마주쳤을 때, 가령 CPU가 실행하는 프로그래밍상의 오류와 같은 예외적인 상황에 마주쳤을 때 발생하는 인터럽트

 

비동기 인터럽트(asynchronous interrupt) = 하드웨어 인터럽트(hardware interrupt)

: 주로 입출력장치에 의해 발생하는 인터럽트

 

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

  1. 입출력장치는 CPU에 인터럽트 요청 신호를 보낸다.
  2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인한다.
  3. CPU는 인터럽트 요청을 확인하고, 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인한다.
  4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업한다.
  5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행한다.
  6. 인터럽트 서비스 루틴 실행이 끝나면 (4)에서 백업해 둔 작업을 복구하여 실행을 재개한다.

▶ 인터럽트 요청 신호

: CPU에게 "지금 인터럽트 해도 되나요?" 물어보는 것

 

▶ 인터럽트 플래그(interrupt flag)

: 하드웨어 인터럽트를 받아들일지, 무시할지를 결정하는 플래그

  • 막을 수 있는 인터럽트(maskable interrupt)
  • 막을 수 없는 인터럽트(non maskable interrupt)

 

▶ 인터럽트 서비스 루틴(ISR; Interrupt Service Routine) = 인터럽트 핸들러(interrupt handler)

: 인터럽트를 처리하기 위한 프로그램

 

▶ 인터럽트 벡터(interrupt vector)

: 인터럽트 서비스 루틴을 식별하기 위한 정보

  • 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있다.

 


예외의 종류

※ 인터럽트(Interrupt)

▶ 동기 인터럽트(synchronous interrupt) = 예외(exception)

  • 폴트(fault): 예외를 처리한 직후 예외가 발생한 명령어부터 실행을 재개하는 예외
  • 트랩(trap): 예외를 처리한 직후 예외가 발생한 명령어의 다음 명령어부터 실행을 재개하는 예외
  • 중단(abort): CPU가 실행 중인 프로그램을 강제로 중단시킬 수밖에 없는 심각한 오류를 발견했을 때 발생하는 예외
  • 소프트웨어 인터럽트(software interrupt)

▶ 비동기 인터럽트(asynchronous interrupt)

  • 막을 수 있는 인터럽트(maskable interrupt)
  • 막을 수 없는 인터럽트(not maskable interrupt)