인터럽트가 발생하면 어떤 일이 벌어지나요?

면접용 답변

인터럽트가 발생하면, 먼저 CPU는 현재 수행 중이던 작업의 상태를 스택에 저장합니다. 이후 인터럽트 벡터 테이블을 참조하여 해당 인터럽트에 대응하는 서비스 루틴인 ISR으로 흐름을 전환합니다. ISR을 실행하여 인터럽트를 처리한 후, CPU는 저장해둔 상태를 복원하고 중단했던 작업을 이어서 실행합니다.

개념 설명

인터럽트

프로그램 실행 중에 CPU의 현재 처리 순서를 중단하고, 다른 동작을 수행하도록 요구하는 것

  • 인터럽트가 발생하면, 운영체제는 CPU에게 하고 있던 일을 멈추고, 인터럽트를 해결하게 함

  • 인터럽트 발생시 ISR(Interrupt Service Routine)이 실행됨. 이를 인터럽트 핸들러라고 함

  • 인터럽트는 크게 외부 인터럽트, 내부 인터럽트, SW 인터럽트로 나눌 수 있다~

외부 인터럽트 (하드웨어 인터럽트)

  • CPU 외부의 하드웨어 장치가 보내는 인터럽트 요청 (비동기적 이벤트)

  • I/O 장치, 타이머, 전원 이상 등 외부 이벤트에 의해 발생

  1. 전원 이상 인터럽트 : 전원 공급이 중단되는 경우, CPU엔 인터럽트를 걸어 작업 중이던 프로세스를 대피시킴

  2. I/O 인터럽트 : 키보드, 마우스, 프린터 등 입출력 장치에 의해서 발생

  3. 타이머 인터럽트 : 하드웨어 타이머 장치가 설정된 시간 간격마다 CPU에 인터럽트 신호를 보내는 것 운영체제는 이 신호를 받아 스케줄링, 시간 추적, 타임슬라이스 관리 등에 활용함

내부 인터럽트 (소프트웨어 인터럽트)

  • 프로그램 내 코드에서 의도적으로 발생시키는 인터럽트 (동기적 이벤트)

  • 예외 처리 또는 운영체제 서비스를 요청할 때 사용됨

  1. Exception: 프로그램 실행 중 예기치 않은 오류 발생시 동작 ex) 0으로 나눔, 페이지폴트, 불법 명령어 실행

  2. Trap : 디버깅, 모니터링 등 개발 도구에서 사용

  3. 시스템 콜: 사용자 프로그램이 OS에 기능을 요청할 때 사용 ex) 파일 열기, 프로세스 생성

인터럽트 처리 과정

요청 -> 중단 -> 보관 -> 인터럽트 처리 -> 재개

  1. 인터럽트 발생

  2. 프로그램 실행 중단, 현재 작업 상태 저장

    • 실행 중이던 micro operation까지 수행

  3. 현재 작업 상태 저장

    • Program Counter, Process Control Block 등을 스택에 저장

  4. 인터럽트 원인 판별

    • 인터럽트를 요청한 장치를 판별 = 인터럽트 원인 파악

    • Interrupt Vector 테이블을 참조해서 호출할 ISR 주소 값을 얻음

  5. ISR 처리

    • 서비스 루틴 수행 중, 우선순위가 더 높은 인터럽트가 발생하면 재귀적으로 1-5번 과정 수행

    • 이떄 인터럽트 플래그를 0으로 하면 인터럽트 발생 방지 가능

  6. 상태 복원

    • 상태 복구 명령어가 실행되면, 저장해준 Program Counter를 복원해 이전 실행 위치로 복원

  7. 원래 작업으로 복귀

    • PCB의 값을 확인해 이전에 수행 중이던 프로그램을 재개

✏️ ISR이란?

  • 인터럽트 서비스 루틴

  • 인터럽트가 발생했을 때 CPU가 실행하는 특수한 함수. == 인터러트 처리 담당 함수!

  • 주의할 점:

    • 최대한 빠르게 종료 되어야 함

    • 블로킹 작업 금지. ex) wait, sleep, 파일 입출력

    • 인터럽트는 언제든지 발생하므로 임계 영역 보호 필요

꼬리 질문

  1. CPU는 인터럽트 발생 시 어떤 상태 정보를 저장하나요?

  • CPU는 인터럽트가 발생하면 현재 실행 중인 프로세스의 프로그램 카운터(PC), 레지스터 값, 플래그 상태 등을 저장합니다. 이를 통해 인터럽트 처리 후에도 원래 실행 중이던 작업을 정확히 복원할 수 있습니다.

  1. 인터럽트 벡터 테이블은 무엇이고 어떤 역할을 하나요?

  • 인터럽트 벡터 테이블은 인터럽트 종류에 따라 호출해야 할 처리 루틴의 주소를 저장한 테이블입니다. 인터럽트 발생 시 CPU는 이 테이블을 참조해 적절한 ISR(Interrupt Service Routine)을 빠르게 찾아 실행합니다.

Last updated