코딩하는 둥둥

[ 쉽게 배우는 운영체제 ] 4-5. 인터럽트 처리 본문

Computer Science/쉽게 배우는 운영체제

[ 쉽게 배우는 운영체제 ] 4-5. 인터럽트 처리

둥둥 2022. 8. 3. 00:09
728x90

인터럽트의 개념

인터럽트는 입출력뿐만 아니라 시스템을 보호하는데 매우 중요한 역할이다.

 

컴퓨터 사용 초기의 프로그래밍 방식은 프로그램을 위에서부터 한 줄로 사용하는 순차적 프로그래밍 sequence programming이었다. 

순차적 프로그래밍에서는 버튼이 눌렸는지 안 눌렸는지 주기적으로 확인하는데 이러한 방식은 비효율적이다. 

오늘날의 프로그래밍에서는 버튼이 눌렸는지 안 눌렸는지를 주기적으로 확인하는 대신 버튼이 눌리면 프로세스에 알려주는데 이를 이벤트 드리븐 event driven이라고 한다.

 

운영체제에서의 입출력또한 이와 같다. 과거에는 입출력 장치가 거의 없었기 때문에 입출력을 요청하면 운영체제가 주기적으로 입출력 장치를 확인하여 처리했는데 이러한 방식을 폴링이라고 한다. 하지만 다양한 입출력 장치가 개발되어 운영체제가 모든 입출력을 관리하기 어려워지자 이벤트 드리븐 방식과 마찬가지로 입출력을 요청하고 입출력이 완료되면 이벤트를 발생시켜 이 사실을 알리게 되었는데 이를 인터럽트라고 한다.

 

인터럽트는 입출력에만 국한된 개념이라고 생각할 수 도 있으나, 인터럽트는 종류가 많고 매우 광범위하게 쓰인다.


동기적 인터럽트와 비동기적 인터럽트

동기적 인터럽트 synchronous interrupt

프로세스가 실행 중인 명령어로 인해 발생하며 사용자 인터럽트라고도 한다.

  • 프로그램상의 문제 때문에 발생하는 인터럽트 : 다른 사용자의 메모리 영역에 접근하는 경우, 오버플로나 언더플로에 의해 발생하는 경우 등
  • 컴퓨터 작업자가 의도적으로 프로세스를 중단하기 위해 발생시킨 인터럽트 : ctrl + c
  • 입출력 장치 같은 주변장치의 조작에 의한 인터럽트 
  • 산술 연산 중 발생하는 인터럽트 : 어떤 수를 0으로 나눔

 

비동기적 인터럽트 asynchronous interrupt

실행 중인 명령어와 무관하게 발생하며 하드디스크 읽기 오류, 메모리 불량과 같은 하드웨어적인 오류로 발생하는 인터럽트를 말한다.

사용자가 직접 작동하는 키보드 인터럽트, 마우스 인터럽트 등이 있다. 


인터럽트 처리 과정

인터럽트에는 해당 인터럽트가 발생하며 어떤 일을 할지도 정의되어 있다. 즉, 인터럽트 번호와 그 번호에 붙어있는 함수의 쌍으로 이루어져 있다. 

윈도우에서는 이 인터럽트 번호를 IRQ라고하며, 시스템에 인터럽트가 발생하면 IRQ로 인터럽트를 식별한다.

 

인터럽트는 한 번에 하나씩 발생하는 것이 아니라 한순간에 여러 개가 동시에 발생하기도 하는데, 이렇게 동시에 발생하는 인터럽트를 하나씩 묶어서 처리하는 개념이 인터럽트 백터이다. 

인터럽트 백터는 인터럽트의 집합이다. 인터럽트가 발생하면 인터럽트 백터의 번호가 0에서 1로 바뀐다. 

인터럽트 백터에는 각 인터럽트를 처리하는 함수가 연결되어있다. 해당 인터럽트가 발생하면 어떤 일을 처리할 것이지가 이 함수에 정의되어있는데 이를 인터럽트 핸들러 interrupt handler라고 부른다.

모든 인터럽트에는 기본적인 인터럽트 핸들러가 정의되어 있으며 사용자가 이를 다시 정의할 수도 있다.

 

인터럽트 처리과정

① 인터럽트가 발생하면 현재 실행 중인 프로세스는 일시 정지 상태가 되며, 재시작하기 위해 현재 프로세스 관련 정보를 임시로 저장한다.

② 인터럽트 컨트롤러가 실행되어 인터럽트의 처리 순서를 결정한다. 이때 여러 개의 인터럽트가 동시에 발생했다면 인터럽트의 우선순위를 고려하여 중요한 인터럽트부터 처리하도록 순서를 결정한다.

③ 먼저 처리할 인터럽트가 결정되면 인터럽트 벡터에 등록된 인터럽트 핸들러가 실행된다. 

④ 인터럽트 벡터에 연결된 핸들러가 인터럽트 처리를 마치면 일시 정지된 프로세스가 디시 시작되거나 종료된다.


인터럽트와 이중 모드

프로세스는 크게 커널 프로세스와 사용자 프로세스로 나뉘고 운영체제와 관련된 커널 프로세스가 실행되는 상태를 커널 모드, 사용자 프로세스가 실행되는 상태를 사용자 모드라고 한다.

이때 사용자 프로세스가 커널 기능을 사용하려면 시스템 호출을 요청한 후 커널 모드로 전환되는데 이와 같이 운영체제가 두 모드를 전환하며 일 처리를 하는 것을 이중 모드 dual mode라고 한다.

이중 모드는 운영체제가 자원을 보호하기 위해 사용하는 기법으로 사용자 프로세스가 커널 모드에서 실행되지 못하게 한다.

 

커널이 제공하는 시스템 호출은 사용하기가 어렵고 매우 제한적이기 때문에 다양한 방법으로 시스템 호출을 사용하기 위해 운영체제는 API(Application Programming Interface)를 제공한다.

사용자는 시스템 호출을 사용할 수 있고, API가 준비해놓은 다양한 함수를 이용하여 시스템 자원에 접근할 수 있다. 

 

사용자가 시스템 호출에 의해 커널 모드로 진입하는 것은 자신이 원해서 진입하는것이기때문에 자발적voluntary이지만 인터럽트에 의해 커널모드로 진입하는것은 비자발적 non-voluntary이다.

728x90