운영체제

[운영체제 이해하기 3] 인터럽트란?

Honey Badger 2023. 6. 1. 04:14

 

컴퓨터의 시스템의 구조

 

- 내부장치 : CPU, 메모리.

- 외부장치(입출력 장치) : 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등.

 

   컴퓨터는 외부장치에서 내부장치로 데이터를 읽어와(input) 각종 연산을 수행한 후, 그 결과를 다시 외부장치로 내보내는 (output)방식으로 업무를 처리합니다. 메모리 및 입출력장치 등의 하드웨어에는 '컨트롤러(Controller)'라는 일종의 작은 CPU가 붙어있습니다. 컨트롤러는 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리를 가지고 있는데 이를 로컬버퍼(Local Buffer)라고 부릅니다. 

 

   입출력 장치들의 I/O 연산은 입출력 컨트롤러가 담당하고, 컴퓨터 내에서 수행되는 연산은 메인 CPU가 담당합니다. 이때 입출력 장치와 메인 CPU는 동시 수행이 가능합니다. 예를 들자면 한 프로그램은 CPU를 할당받아 프로그램 코드를 수행하고, 또다른 프로그램은 하드디스크에서 정보를 읽어오는 작업을 동시에 수행할 수 있습니다. 

 

인터럽트란?

  입출력 장치에서 데이터를 읽어오는 경우, 우선 로컬버퍼에 데이터가 임시로 저장된 후 메모리에 전달됩니다. 이때 장치에서 로컬버퍼로 읽어오는 일을 컨트롤러가 담당합니다. 이때 다 읽어왔는지를 메인 CPU가 체크하는 것이 아니라 장치에 있는 컨트롤러가 CPU에 보고하게 됩니다. 이처럼 입출력 장치 컨트롤러들이 CPU의 서비스가 필요할 때 이를 통보하는 방법을 '인터럽트'라고 합니다. 정리하자면 인터럽트는 입출력장치의 컨트롤러가 CPU에게 알려줄 필요가 있는 이벤트, 예를 들어 키보드 입력이나 디스크 입출력 작업의 완료 등이 일어난 경우 발생시키는 것입니다. 

 

   기본적으로 CPU는 매 시점 메모리에서 명령(Instruction)을 하나씩 읽어와 수행하는데 이때마다 인터럽트가 발생했는지 확인합니다. 만약 인터럽트가 발생했다면  CPU 옆에는 인터럽트 라인(Interrupt Line)이라는 것이 있어서 하던 작업을 멈추고 인터럽트와 관련된 일을 먼저 처리합니다. 

 

   운영체제의 커널에는 인터럽트가 들어왔을 때 해야 할 일에 대한 코드가 보관되어 있습니다. 만약 입출력 장치의 컨트롤러가 인터럽트를 발생시키면 CPU는 하던 일을 잠시 멈추고 이 인터럽트 처리루틴이 정의된 코드를 찾습니다.

   이 때 운영체제는 할 일을 쉽게 찾아가기 위해 인터럽트 종류마다 번호를 정해서, 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키고 있는 자료구조를 사용하는데 이를 인터럽트 벡터(Interrupt Vector)라고 합니다. 실제 처리해야 할 코드는 인터럽트 처리루틴(Interrupt Service Routine)또는 인터럽트 핸들러(Interrupt Handler)라고 불리는 다른 곳에 정의됩니다.

 

 

인터럽트의 종류

   입출력장치가 CPU의 서비스가 필요한 경우 인터럽트 라인에 신호를 보내서 인터럽트가 발생했음을 알려주는 방식은 둘 다 동일하지만, CPU의 인터럽트 라인을 누가 세팅하느냐에 따라 인터럽트의 종류가 나뉘어집니다. 

 

1. 하드웨어 인터럽트 : 통상적으로 인터럽트라고 불립니다. 컨트롤러 등 하드웨어 장치가 인터럽트 라인을 세팅합니다. 

 

2. 소프트웨어 인터럽트 : 주로 트랩(trap)이라는 용어로 불립니다. 인터럽트 라인의 세팅을 소프트웨어가 수행합니다. CPU의 제어권이 사용자 프로세스로부터 운영체제에 이양되어 처리되는데, 이 과정에서 프로그램 코드가 직접 인터럽트 라인을 세팅하는 명령을 실행하여 인터럽트를 발생시킨 후 제어권이 넘어가므로 넒은 의미에서 인터럽트의 범주에 포함시킵니다.  소프트웨어 인터럽트의 예를 우리가 많이 들어본 두가지로 설명하겠습니다. 

 

2-1.예외상황(Exception) : 사용자 프로그램이 비정상적인 작업을 시도하거나, 자신의 메모리 영역 바깥에 접근하려는 시도 등 권한이 없는 작업을 시도할 때 이에 대한 처리를 위해 발생시키는 인터럽트를 말합니다. 처음 코딩을 접하면 이런 예외 상황을 매우 많이 마주칠 확률이 높습니다..

 

2-2.시스템 콜(System Call) : 사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하고 싶을 때 운영체제에 서비스를 요청하는 방법이라고 볼 수 있습니다. 사용자 프로그램에 정의되지 않고 운영체제 커널에 있는 코드를 실행하고자 할 때에는 인터럽트 라인 세팅을 통해 CPU 제어권을 운영체제로 넘겨 실행하게 됩니다. 예를 들어 프로그램 작성 중 키보드 입력이나 화면 출력 등의 입출력 작업이 필요한 경우 우리가 직접 입출력을 수행하는 코드를 작성하는 것이 아니라 이미 존재하는 커널의 코드를 호출하여 처리합니다. 

 

 

인터럽트 핸들링

   인터럽트 처리를 완료하고 나면 원래 수행하던 작업으로 돌아가 중단되었던 일을 계속해서 수행해야하는데 이때 돌아갈 위치는 인터럽트 처리 전에 별도의 장소에 저장하게 됩니다. 인터럽트 핸들링이란 인터럽트가 발생한 경우에 처리해야 할 일의 절차를 의미합니다.

 

   먼저 CPU에서 어떠한 명령이 실행될 때에는 CPU 내부에 있는 임시 기억장치인 레지스터(Register)에 데이터를 읽거나 쓰면서 작업을 하는데 이때 인터럽트가 발생하여 새로운 명령을 실행하면 기존의 레지스터값들이 모두 지워지게 됩니다. 그러므로 CPU의 이러한 상태를 저장해두고 이것이 끝난 후에야 인터럽트 처리가 이루어질 수 있습니다. 예를 들어 프로그램 A가 실행되고 있을 때 인터럽트가 발생하면, A가 현재 CPU에서 실행 중인 명령의 메모리 주소 등의 부가적인 정보들을 먼저 저장해야 합니다. 

 

   운영체제는 현재 시스템 내에서 실행되는 프로그램들을 관리하기 위해 프로세스 제어블록(Process Control Block : PCB)라는 자료구조를 두고 있습니다. PCB는 각 프로그램마다 하나씩 존재하며 해당 프로그램의 어느 부분이 실행 중이었는지를 저장하고 있습니다. 자세히 말하면 프로그램이 실행 중이던 코드의 메모리 주소, 레지스터값, 하드웨어 상태 등이 저장됩니다. 

 

 

 

마무리

   요즘 컴퓨터의 경우, 시스템이 부팅한 후 정상 상태에 머무르게 되면 CPU가 항상 사용자 프로그램에 의해 원하는 만큼 점유되며 인터럽트가 발생할 때에만 CPU가 운영체제로 이양됩니다. 쉽게 말하면 운영체제가 직접 CPU를 점유하는 경우는 인터럽트 아니고는 발생하지 않습니다. 그럼에도 불구하고 운영체제는 컴퓨터 시스템 내의 모든 하드웨어 및 소프트웨어 자원을 체계적이고 효율적으로 관리할 수 있습니다. 

 

 

 

 

 

 

 

이 포스팅은 책 '운영체제와 정보기술의 원리'를 읽고 공부한 내용을 정리하였습니다.

https://www.yes24.com/Product/Goods/90124877

 

운영체제와 정보기술의 원리 - 예스24

컴퓨터 운영체제와 정보기술의 기본 원리 및 핵심 철학을 설명한 컴퓨터 입문서온라인 공개강좌 KOCW에서 꾸준히 호평 받아온 이화여대 반효경 교수의 컴퓨터 입문서이다. 이제는 시대의 흐름에

www.yes24.com