7월 3일 - 인터럽트

Yullgiii·2024년 7월 3일
0
post-thumbnail

인터럽트(Interrupt)

인터럽트란?
하드웨어 장치가 CPU에게 어떤 사실을 알려주거나 CPU의 서비스를 요청할 경우, CPU 내에 있는 인터럽트 라인을 세팅하여 인터럽트를 발생시킨다. 프로그램이 명령을 수행하기 위해서는 CPU를 할당받아야 하며, CPU는 매번 프로그램 카운터가 가리키는 명령을 수행한 후, 다음 명령을 수행하기 직전에 인터럽트 라인이 세팅되었는지 체크한다. 이를 통해 인터럽트가 발생했으면 CPU는 현재 수행 중이던 프로세스를 멈추고 운영 체제의 인터럽트 처리 루틴으로 이동하여 인터럽트 처리를 수행한다.

인터럽트의 종류

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

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

이미지 1: 하드웨어 인터럽트 발생 과정

소프트웨어 인터럽트 (Trap:트랩)

예외 상황(Exception)

프로그램이 허용되지 않은 연산을 수행하려고 할 때 자동적으로 발생한다. 운영 체제는 예외 상황이 발생했을 때, CPU의 제어권을 획득해 이 상황에 대한 조치를 취한다.

예제

  • 0으로 나누는 연산
  • 자신의 주소 공간을 넘어서는 메모리 참조

예외 상황에 대한 처리 루틴을 운영 체제의 코드 영역에 가지고 있다.

시스템 콜(System Call)

사용자 프로세스가 운영 체제의 서비스를 요청하기 위해 커널의 함수를 호출하는 것이다. 사용자 프로세스는 직접 특권 명령을 수행할 수 없으므로, 특권 명령을 수행하려 할 때 시스템 콜을 사용한다.

이미지 2: 소프트웨어 인터럽트 발생 과정

시스템 콜이나 예외 상황은 모두 사용자 프로세스로부터 CPU의 제어권이 운영 체제에게 이양되어 처리된다. 이 과정에서 인터럽트 라인을 세팅하여 인터럽트를 발생시킨 후 제어권이 넘어가게 되므로, 이들도 넓은 의미에서 인터럽트의 범주에 포함된다. 다만, 인터럽트를 발생시키는 주체가 하드웨어 장치가 아닌 소프트웨어이므로 이를 소프트웨어 인터럽트라고 부른다.

인터럽트 발생 처리 과정

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

인터럽트가 발생했을 때 수행 중이던 프로세스의 정보는 프로세스 제어 블록(PCB: Process Control Block)에 저장된다. 인터럽트 처리를 모두 마치면 프로그램 A의 PCB에 저장된 주소를 복원시켜 원래 수행하던 일을 재개하게 된다.

인터럽트 벡터(Interrupt Vector)

여러 가지 인터럽트에 대해 해당 인터럽트 발생 시 처리해야 할 루틴의 주소를 보관하고 있는 테이블이다. 이는 일종의 함수를 가리키는 포인터 역할을 한다.

인터럽트 핸들러(Interrupt Handler)

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

예제
입출력 관련 인터럽트가 발생한 경우, CPU는 인터럽트 라인을 통해 발생한 인터럽트를 확인한다. 인터럽트 벡터를 통해 해당 인터럽트 발생 시 처리해야 할 루틴의 메모리 주소를 알아내고, 그 주소를 통해 실제 수행되어야 할 코드가 담겨 있는 루틴을 찾아가 상황에 맞는 처리를 진행한다.

So...

인터럽트는 하드웨어와 소프트웨어 모두에서 발생할 수 있으며, CPU가 특정 작업을 수행하는 중에도 다른 중요한 작업을 처리할 수 있게 해주는 중요한 메커니즘이다. 인터럽트는 시스템의 응답성을 높이고, 다양한 이벤트에 빠르게 반응할 수 있도록 도와준다. 이와 같은 특성 덕분에 운영 체제는 효율적이고 유연하게 시스템 자원을 관리할 수 있다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글