[ CS / OS ] Interrupt (인터럽트)

황승환·2022년 7월 19일
0

CS

목록 보기
52/60

Interrupt

인터럽트란 하드웨어 장치가 CPU에게 어떠한 이벤트를 전달하거나 어떠한 수행을 요구할 때에 CPU의 인터럽트 라인을 세팅하여 발생시킨다.

CPU는 PC(Program Counter)가 가리키고 있는 작업을 계속해서 수행하는데, 이렇게 다음 작업을 수행하기 전에 인터럽트 라인을 확인하여 인터럽트가 들어왔는지 확인한다.

이때 인터럽트 라인이 세팅되어 있을 경우, CPU는 수행 중이던 프로세스를 멈추고, OS의 인터럽트 처리 루틴으로 이동하여 인터럽트를 처리한다.

Interrupt의 종류

Hardware Interrupt

일반적인 인터럽트로, 하드웨어 컨트롤러가 CPU의 서비스를 요청하기 위해 발생시키는 인터럽트이다.

그림과 같이 하드웨어 장치의 컨트롤러가 CPU로 인터럽트를 요청한다.

Software Interrupt (Trap)

Exception (예외 상황)

0으로 나누는 연산이나 주소 공간을 넘어 메모리를 참조하려는 등의 프로그램이 허용하지 않는 연산을 수행하려고 할 때, 자동적으로 발생한다. OS는 예외상황이 발생했을 때, CPU의 제어권을 획득하여 조치를 취한다.

예외상황에 대한 처리 루틴은 코드 영역에서 관리한다.

System Call (시스템 콜)

사용자 프로세스가 OS의 서비스를 요청하기 위해 커널의 함수를 호출하는 것으로, 사용자 프로세스가 직접 특권 명령을 수행할 수 없기 때문에 이를 OS에 요청하는 System Call을 사용한다.

(사용자 프로세스 - OS - 커널 의 구조를 가지기 때문에 사용자 프로세스는 커널의 함수를 직접적으로 호출할 수 없다. 커널은 OS에 의해 보호되고 있다고 생각할 수 있다.)

Software Interrupt 발생 과정

Exception이나 System Call 모두 사용자 프로세스가 CPU의 제어권을 OS에 넘겨주어 이를 OS가 처리한다. 이 과정에서 인터럽트 라인을 세팅하여 인터럽트를 발생시키고 난 후에 제어권이 넘어가기 때문에 이 역시 인터럽트 범주 안에 포함된다. 인터럽트의 발생 주체가 하드웨어라면 Hardware Interrupt가 되는 것이고, 소프트웨어라면 Software Interrupt가 되는 것이다.

Interrupt 발생 처리 과정

인터럽트가 발생하면 CPU는 수행 중이던 프로세스를 중단하고 인터럽트를 처리하게 된다. 이때 프로세스의 수행 정보를 따로 저장해 두고, 인터럽트를 모두 처리하고 난 후에 그 지점부터 다시 프로세스를 수행한다.

프로세스의 수행 정보는 PCB(Process Controll Block)에 저장된다. PCB는 프로세스 하나 당 하나씩 할당되고, 해당 프로세스의 다양한 정보를 저장하고 있다. 이름 그대로 프로세스를 제어하는 블록이라고 할 수 있다.

Interrupt Vector

  • 여러가지 인터럽트의 처리해야 할 루틴의 주소를 저장하고 있는 테이블이다.
  • 함수를 가리키는 포인터라고 할 수 있다.

Interrupt Handler

  • 실제 인터럽트를 처리하기 위한 루틴으로 인터럽트 서비스 루틴이라고도 한다.
  • OS 코드 부분에는 각종 인터럽트 별로 처리해야 할 내용이 이미 프로그램되어 있는데, 이 부분을 인터럽트 서비스 루틴 또는 인터럽트 핸들러라고 한다.

정리

  • 인터럽트는 하드웨어 장치의 컨트롤러에 의해 CPU의 인터럽트 라인을 세팅하게 되고, CPU가 이를 확인하면 수행중이던 프로세스를 중단하고 인터럽트를 처리한다.
  • 인터럽트에는 하드웨어 인터럽트와 소프트웨어 인터럽트로 나눌 수 있다.
  • 하드웨어 인터럽트는 가장 일반적인 인터럽트로 위에서 설명한 바와 같이 하드웨어에 의해 발생하는 인터럽트를 말한다.
  • 소프트웨어 인터럽트는 2가지가 있는데 시스템 콜과 예외 상황이다.
  • 시스템 콜은 사용자 프로세스가 커널의 함수를 호출하고자 할 때, 인터럽트를 발생시켜 OS를 통해 커널의 함수를 호출하는 것이다.
  • 예외 상황은 프로그램이 허용하지 않는 연산을 수행하게 될 때 자동적으로 발생하게 되고, 이 역시 OS가 처리한다.
  • 인터럽트가 발생하면 프로세스를 중단하게 되는데, 이때 프로세스의 진행 상황을 PCB에 저장한다.
  • 인터럽트를 처리하고 나서 다시 프로세스를 수행할 때, PCB에 저장된 정보를 확인하여 그 지점부터 다시 수행을 이어간다.
  • 인터럽트를 처리하는 루틴은 코드 영역에 저장되어 있다.
  • 인터럽트를 처리하는 루틴을 인터럽트 헨들러 또는 인터럽트 서비스 루틴이라고 한다.
  • 인터럽트 벡터에는 각각의 인터럽트가 발생했을 때 처리해야 하는 인터럽트 루틴의 주소값이 저장되어 있다. (테이블 형태)
profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글