인터럽트란 하드웨어 장치가 CPU에게 어떤 사실을 알려주거나 CPU의 서비스를 요청해야할 경우 발생합니다. CPU내에는 인터럽트 라인이 있는데, 이를 세팅하여 인터럽트를 발생시키죠.

CPU는 매번 프로그램 카운터가 가리키고 있는 곳의 명령어를 수행한 뒤, 다음 명령어를 수행하기 직전에 인터럽트 라인을 체크합니다. 이를통해 인터럽트가 발생했으면 CPU는 현재 수행중이던 프로세스를 멈추고, 운영체제의 인터럽트 처리루틴에 따라 인터럽트를 처리하죠.

인터럽트의 종류

  1. 하드웨어 인터럽트(일반적인 인터럽트)

    Untitled

  2. 소프트웨어 인터럽트

    Untitled

    1. 예외상황
      1. 프로그램이 허용되지 않은 연산을 수행할때 발생합니다. 예를들어 10을 0으로 나누는 연산과 같은 경우에, 운영체제는 CPU의 제어권을 획득하여 이 상황에 대한 조치를 취합니다.
    2. 시스템콜
      1. 사용자 프로세스가 운영체제의 서비스를 요청하기 위해 커널의 함수를 요청하는 것입니다.
      2. 사용자 프로세스는 직접 CPU를 점유할 수 없습니다. 이에따라 시스템콜을 통해 점유하여야만 합니다.

인터럽트 발생 처리 과정

A프로그램이 CPU를 할당받고 명령을 수행하고 있다고 가정해봅시다. 만약 이때 인터럽트가 발생하면 A는 현재 수행중인 명령의 위치를 저장하게 됩니다. 이후, 운영체제의 내부 코드인 인터럽트 처리 루틴으로 넘어가서 인터럽트 처리를 하고 돌아온 후, 이전 작업지점부터 수행을 이어나가게 됩니다.

→ 이때, 진행중이던 A프로세스의 정보는 PCB(프로세스 제어블록)에 저장됩니다. 이후, 인터럽트 처리를 모두 마치면 프로그램 A의 PCB에 저장된 주소를 복원시켜 원래 하던 일을 재개합니다.(컨텍스트스위칭)