본문 바로가기
컴퓨터구조

[컴퓨터구조][기초] 하드웨어 인터럽트

by codingbird1234 2025. 3. 27.

*해당 글은 '혼자 공부하는 컴퓨터구조 + 운영체제(강민철 지음)'을 참고하여 작성되었습니다.

*구체적인 예시와 함께 더 자세히 공부하고 싶으신 분들은 해당 책을 읽어보시기를 추천드립니다.

 

 

지난 시간에는 인터럽트를 배웠습니다.

인터럽트에는 동기 인터럽트비동기 인터럽트(하드웨어 인터럽트)가 있다고 했습니다.

오늘은 이 하드웨어 인터럽트에 대해서 자세히 알아보겠습니다.

 

먼저, 하드웨어 인터럽트에 대해서 복습해봅시다.

하드웨어 인터럽트는 CPU와 입출력장치의 속도 차이 때문에 필요합니다.

입출력에 많은 시간이 걸리기 때문에, 입출력장치가 작업을 진행하는 동안 CPU가 다른 작업을 할 수 있게 하기 위해서죠!

입출력장치는 자신의 작업이 끝나면 이를 CPU에게 알려주는데, 이를 하드웨어 인터럽트라고 합니다.

 

그렇다면 하드웨어 인터럽트가 발생했을 때, CPU는 이를 어떤 식으로 처리할까요?

하드웨어 인터럽트 처리 순서에 대해 한번 알아봅시다.

 


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

  1. CPU는 기본적으로 각 명령어의 실행 사이클이 끝날 때마다 인터럽트 요청이 있는지 왔는지 확인합니다.

  2. (입출력 작업이 끝나면) 입출력장치가 CPU에게 인터럽트 요청 신호를 보냅니다.
    • 인터럽트 요청 신호 : 인터럽트해도 되는지를 물어보는 신호
  3. CPU는 인터럽트 요청을 확인하고, 인터럽트 플래그에서 해당 인터럽트를 받아들일 수 있는지 확인합니다.
    • 인터럽트 플래그(Interrupt Flag) : 해당 하드웨어 인터럽트를 받아들일지를 결정하는 플래그. 플래그 레지스터에 있음.
  4. (인터럽트를 받아들일 수 있다면) CPU는 현재 작업을 백업합니다.
    • 불가능한 경우, 해당 요청 무시함
    • 막을 수 없는 인터럽트도 있음
    • 스택에 백업함.
  5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행합니다.
    • 인터럽트 서비스 루틴(ISR : Interrupt Service Routine) : 인터럽트를 처리하기 위한 프로그램
    • 인터럽트 핸들러(Interrupt Handler)라고도 함.
    • 인터럽트 벡터는 아래 설명 참고.
  6. 인터럽트 서비스 루틴 실행이 끝나면, 4번에서 백업해두었던 작업을 복구하여 다시 실행합니다.
    • 인터럽트가 끝났으니, 기존에 실행하고 있던 프로그램으로 다시 복귀함
    • 스택에 저장했던 기존 작업 내용을 복구

정리해보면,

CPU에 인터럽트 요청이 들어오면 CPU는 인터럽트 처리할 수 있는 상황인지 확인하고,

(가능하다면) 현재 작업을 백업하고 인터럽트 서비스 루틴을 실행한 후,

백업해둔 작업을 다시 복구하여 기존 작업을 이어서 진행한다고 요약할 수 있습니다.

CPU가 인터럽트를 처리한다  =  인터럽트 서비스 루틴을 실행하고, 기존 작업으로 되돌아온다

 

기존 작업 진행 - 인터럽트 발생 - 인터럽트 서비스 루틴 실행 - 기존 작업 재개

 

위에 인터럽트 벡터라는 용어가 있었죠?

인터럽트는 다양하고, 각 인터럽트에는 그에 대한 인터럽트 서비스 루틴이 각각 존재합니다.

그래서 인터럽트가 발생했을 때, 어떤 인터럽트 서비스 루틴을 실행해야 하는지를 알아야 합니다.

이것이 바로 인터럽트 벡터(Interrupt Vector)입니다.

인터럽트 벡터를 통해 인터럽트 서비스 루틴의 시작 주소를 알 수 있습니다.

 

주요 개념을 다시 한번 정리해봅시다!

주요 개념 내용
인터럽트 요청 신호 인터럽트가 가능한지 CPU에게 물어보는 신호
인터럽트 플래그 인터럽트 요청 신호를 받아들일지를 결정하는 비트
인터럽트 벡터 인터럽트에 대한 인터럽트 서비스 루틴 정보 (+인터럽트 서비스 루틴의 시작 주소)
인터럽트 서비스 루틴 인터럽트를 처리하는 프로그램

 


 

이렇게 명령어 사이클인터럽트에 대해 알아보았습니다!

명령어가 어떤 식으로 실행되는지를 인출/실행/간접/인터럽트 사이클을 통해 배웠습니다.

다음 시간에는 예외(동기 인터럽트)에 대해 좀 더 자세히 알아보겠습니다!

이번 시간도 수고하셨습니다~