[ OS ] 인터럽트 ( Interrupt )

이숭인·2021년 7월 29일
0

[ OS ] 운영체제

목록 보기
3/9

인터럽트 ( Interrupt )

인터럽트의 정의

CPU가 프로그램을 실행하는 도중, 예외 상황 이 발생하여 처리가 필요한 경우,
현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 원래 실행중이던 작업으로 복귀하는 것


인터럽트가 필요한 이유

  • 선점형 스케쥴러 구현
    - 하나의 프로세스가 실행중일때, 우선순위가 높은 다른 프로세스가 현재 프로세스를 중단시키고 실행되어질때.
    (인터럽트를 발생시켜 현재 실행중인 프로세스를 중단시키기 위함)
  • I/O event 처리
    - 프로세스의 상태가 running -> waiting / ready-> running 으로 변경되어야할때 interrupt를 이용하여 CPU 가 해당 처리를 할 수 있도록 알림
  • 예외 상황 핸들링
    - CPU가 프로그램을 실행하고 있을 때, I/O event나 예외상황이 발생할 경우 CPU가 해당 처리를 할 수 있도록 알림

인터럽트의 종류

내부 인터럽트 ( Software Interrupt )

내부 인터럽트는 주로 프로그램 내부에서 잘못된 명령 또는 잘못된 데이터 를 사용했을때에 발생하게 됩니다.
일반적인 경우로 CPU 내부에서 프로세스가 실행되면서 인터럽트가 발생되고

  • 0으로 나눌 때

  • 계산 결과가 OverFlow or UnderFlow 일때

  • 허용되지 않은 명령 혹은 공간에 접근했을 때 (Exception)

위와 같은 경우에 인터럽트가 발생하게 됩니다.

외부 인터럽트 ( Hardware Interrupt )

주로 하드웨어에서 발생하는 이벤트 입니다.
CPU 외부에서 어떤 일이 발생했을 경우, 전기적인 신호로 CPU에게 알립니다.

  • I/O 장치

  • Timer event

  • 전원 장치 이상

위와 같은 경우 인터럽트가 발생하게 됩니다.

시스템 콜 인터럽트

시스템 콜 인터럽트 실행을 위해서는 강제로 코드에 인터럽트 명령을 넣어 CPU에게 실행시켜야 합니다.

위의 사진에서 Timer Interrupt에 의해 프로세스 A의 실행이 중단되고 프로세스 B 가 실행되는 중 입니다.

인터럽트의 발생에 의해 프로세스가 변경되는 과정에 대한 사진인데,

이때 사용자 모드커널 모드 로 수시로 바뀌면서 시스템 콜 (예: Timer Interrupt) 이 필요할때 수행시킵니다.


인터럽트와 IDT (Interrupt Descriptor Table)

IDT란?

IDT ( Interrupt Descriptor Table )


미리 정의되어 있는 인터럽트들의 번호실행 코드가리키는 주소 들이 저장되어 있는 Table.

  1. 컴퓨터 부팅 시 운영체제가 IDT에 인터럽트들을 기록하고,

  2. 인터럽트가 발생하면 IDT를 확인하여 Interrupt 번호에 해당하는 함수를 호출해서 인터럽트를 처리하게 됩니다.


인터럽트와 프로세스

아래의 사진은 프로세스 실행 중 인터럽트가 발생되었을때의 처리 흐름을 보여줍니다.

처리과정을 살펴보자면,

  1. 프로세스 실행중 인터럽트 발생

  2. 현재 프로세스의 실행 중단

  3. 현재 수행중이었던 프로세스의 상태를 해당 프로세스의 PCB에 저장

  4. 발생한 인터럽트의 번호IDT 에서 확인하여 해당하는 인터럽트 번호 에 해당하는 함수를 호출 해서 실질적인 작업을 수행

  5. 실행이 중단되었던 프로세스PCB 를 불러와 CPU 레지스터에 초기화 시켜줌으로서 프로세스를 다시 수행

위와 같은 흐름이 됩니다.

요약해보자면

바로 이전에 공부했던 PCB, Context Switching 에 대한 내용이 여기서 나오네요!
아직 CPU 스케줄링에 대한 내용을 공부해보지 않아 정확히 어떤 방식으로 프로세스가 수행되는지 정확히는 모르겠네요.
CPU 스케줄링에 대한 내용을 공부해보면 전체적인 흐름을 파악할수있을거같아요 !

profile
iOS Developer

0개의 댓글