CS

[OS] Interrupt 인터럽트란?

D0HAN. 2021. 8. 15. 23:45

인터럽트란?

  • CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 처리할 수 있도록 하는 것
  • 우선적으로 처리해야할 일이 발생하였을 때 그것을 처리하고 원래 동작으로 돌아옴
  • 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 나눔

하드웨어 인터럽트

  • 일반적으로 인터럽트를 이르는 말
  • CPU외부로부터의 인터럽트 요구 신호에 의해 발생되는 인터럽트
  • Maskable interrupt, Non-maskable interrupt 가 있다. (Interrunpt Mask가 가능)
    • Maskable interrupt
      - Interrupt Mask(인터럽트가 발생하였을 때 요구를 받아들일지 말지 지정하는 것)가 가능 
      - 인텔CPU 에서 INTR pin으로 신호가 들어옴
    • Non Maskable interrupt 
      - Interrupt Mask가 불가능
      - 거부, 무시할 수 없음 (매우 중요함)
      - 정전, 하드웨어 고장 등 어쩔수없는 오류
      - 인텔 CPU에서 NMI pin으로 신호가 들어옴

 

하드웨어 인터럽트 종류

  • 입출력 인터럽트 (I/O interrupt) - 입출력 작업의 종료나 입출력 오류에 의해 CPU의 기능이 요청됨
  • 정전,전원 이상 인터럽트(Power fail interrupt) - 전원 공급의 이상
  • 기계 착오 인터럽트(Machine check interrupt) - CPU의 기능적인 오류
  • 외부 신호 인터럽트(External interrupt) - I/O 장치가 아닌 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단된 경우

소프트웨어 인터럽트

  • CPU내부에서 자신이 실행한 명령이나 CPU의 명령 실행에 관련된 모듈이 변화하는 경우 발생
  • trap 또는 exception 이라고도 함
  • 프로그램의 오류에 의해 생기는 인터럽트

 

소프트웨어 인터럽트 종류

  • 프로그램 검사 인터럽트 (Program check interrupt) 
    • 0으로 나누는 경우
    • OverFlow/UnderFlow
    • 페이지 부재
    • 부당한 기억장소의 참조
    • 등등...
  • SVC(Supervisor Call: 감시프로그램 호출)인터럽트
    • 사용자가 프로그램을 실행시키거나 supervisior을 호출하는 동작을 수행하는 경우
    • 프로그래머에 의해 코드로 짜인 감시 프로그램을 호출하는 방식

인터럽트 우선순위


인터럽트 벡터   Interrupt Vector

  • 여러가지 인터럽트에 대해 해당 인터럽트 발생시 처리해야 할 루틴(ISR)의 주소를 보관하고 있는 공간
  • 대부분의 CPU들은 인터럽트 벡터 테이블을 가지고 있음
  • 인텔x86에서는 이를 IDT(Interrupt Descriptor Table)이라고 한다.

 

인터럽트 서비스 루틴   Interrupt Service Routine(ISR)

  • 인터럽트 핸들러 Interrupt handler 라고도 함
  • 인터럽트가 접수되면 각각의 인터럽트에 대응하여 특정 기능을 처리하는 기계어 코드 루틴(커널이 실행)
  • ex) 키보드 자판을 눌러 키보드 인터럽트가 발생하면 이에 해당하는 인터럽트 서비스 루틴이 실행됨

인터럽트 과정

>> 프로세스 A 실행 중 디스크에서 어떤 데이터를 읽어오라는 명령을 받았을 때

  • 프로세스 A는 system call을 통해 인터럽트를 발생시킴
  • CPU는 현재 진행중인 기계어 코드를 완료
  • 현재까지 수행중이었던 상태를 해당 프로세스의 PCB(Process Control Block)에 저장 
    (수행중이던 메모리 주소, 레지스터 값 등등)
  • PC(Program Counter, IP)에 다음 실행할 명령의 주소 저장
  • 인터럽트 벡터를 읽고 ISR 주소값을 얻어 ISR(interrupt Service Routine)으로 점프하여 루틴을 실행
  • 해당 코드 실행
  • 해당 일을 다 처리하면 저장했던 프로세스 상태 복구
  • ISR의 끝에 IRET명령어에 의해 인터럽트가 해제
  • IRET 명령어가 실행되면, 대피시킨 PC 값을 복원하여 이전 실행위치로 복원

 

* IRET(Interrupt Return) 명령어: 이전 태스크로 다시 돌아가는 어셈블리 명령어. ISR의 마지막 명령어.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참고

https://huistorage.tistory.com/111

https://medium.com/@lazypanda43/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8-%EC%A2%85%EB%A5%98%EC%99%80-%EC%B2%98%EB%A6%AC%EA%B3%BC%EC%A0%95%EA%B3%BC-%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84-c95c26909472

https://velog.io/@adam2/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8

https://otakuking.tistory.com/70

https://docs.oracle.com/cd/E19455-01/806-3773/instructionset-75/index.html