[CS] 인터럽트(interupt)

박현우·2021년 10월 22일
0

CS

목록 보기
6/20

인터럽트란?

  • 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것입니다.
  • 지금 수행 중인 일보다 더 중요한 일(ex. 입출력, 시스템 콜 등의 예외상황)이 발생하면 그 일을 먼저 처리하고 나서 하던 일을 계속해야합니다.
  • 인터럽트는 크게 하드웨어 인터럽트, 소프트웨어 인터럽트로 나뉘어 집니다.
  • 하드웨어 인터럽트는 키보드 마우스와 같은 하드웨어가 발생시킨 인터럽트를 말합니다.
  • 소프트웨어 인터럽트는 프로그램이 오류를 범하여 Exception이 발생하거나 사용자 프로그램이 커널함수 사용을 위해 호출하는 Systeme Call이 발생하는 경우를 말합니다.

인터럽트 발생 과정

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

ref.

0개의 댓글