탕구리's 블로그

#3 인터럽트의 원리 - 운영체제와 정보기술의 원리 본문

Conception/Operating System

#3 인터럽트의 원리 - 운영체제와 정보기술의 원리

탕구리당 2019. 5. 28. 16:49
반응형

인터럽트란?

CPU가 다른 프로그램을 실행하고 있을 때, 입출력 하드웨어 혹은 소프트웨어에 의해 예외상황이 발생하여 처리가 필요한 경우에 CPU에게 이를 알려주는 것을 말한다. 예를 들어, A라는 프로그램이 CPU를 할당받고 명령을 수행하고 있는데 인터럽트가 발생하면 A는 현재 수행 중인 명령의 위치를 저장해 놓고 인터럽트를 처리한 후, 다시 돌아와 A의 작업을 다시 실행합니다.

 

그렇다면, 인터럽트가 발생했을 때 수행중이던 프로세스의 정보는 어디로 가는 걸까요?

진행 중이던 작업의 내용은 커널(운영체제 중 메모리에 상주하여 일을 처리하는 녀석)의 자료 구조에 저장됩니다. 이 자료 구조를 우리는 PCB(Process control Block :프로세스 제어 블록)이라고 부릅니다.

인터럽트의 종류

인터럽트의 종류는 하드웨어 인터럽트와 소프트웨어 인터럽트로 나누어 볼 수 있다.

 

하드웨어 인터럽트

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

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

 

2. 운영체제의 타이머(Timer) 인터럽트

- 운영 체제에서는 각 프로그램들이 공평한 시간 동안 CPU를 할당 받을 수 있도록 세팅된 시간 동안 CPU를 사용하고, 사용시간이 종료되면 인터럽트를 발생시킨다.

 

하드웨어 인터럽트 발생 과정

 

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

1. 예외상황(Exception)

- 프로그램이 허용되지 않은 연산을 수행하려고 할 때 자동적으로 발생하는 인터럽트이다. (ex: 0으로 나누기, 권한 없는 메모리 참조 등..)

 

2. 시스템 콜(System Call)

- 프로세스가 운영 체제의 서비스를 요청하기 위해 커널의 함수를 호출하는 경우 발생하는 인터럽트

 

소프트 웨어 인터럽트 발생 과정

인터럽트 발생 및 처리

앞서 알아본 것처럼 인터럽트 발생은 입출력 장치에 의한 하드웨어 인터럽트, 예외 발생이나 시스템 콜에 의한 소프트웨어 인터럽트에 의해 발생하고 발생한 인터럽트에 대하여 CPU가 인터럽트 라인을 통해 인터럽트를 확인하고 인터럽트 벡터와 인터럽트 핸들러를 통해 상황에 맞는 인터럽트를 처리합니다.

 

그렇다면 인터럽트 벡터와 인터럽트 핸들러는 무슨 역할을 할까요?

 

인터럽트 벡터

여러 가지 인터럽트 상황에 대해 해당 인터럽트 발생 시 처리해야 할 루틴의 주소를 담고 있는 테이블입니다.

 

인터럽트 핸들러

실제 인터럽트를 처리하기 위한 루틴으로 인터럽트 서비스 루틴이라고도 합니다.

 

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

 

프로세스의 상태

프로세스 상태는 크게 생성, 실행, 준비, 봉쇄, 종료 상태로 나눌 수 있습니다. 실행 상태는 CPU를 할당받고 기계어 명령을 수행하고 있는 단계를 말합니다. 준비 상태는 CPU만 할당받으면 당장 명령을 수행할 수 있지만 CPU가 하나밖에 없어 CPU를 할당받지 못한 프로세스의 상태를 말합니다. 봉쇄 상태는 CPU를 할당받더라도 명령을 수행할 수 없는 프로세스의 상태를 말합니다.

 

프로세스의 상태 관리는 커널의 주소 영역 중 데이터 영역에 역할에 따라 다양한 큐(Queue)를 두어 이루어지게 됩니다.

각 프로세스들이 CPU를 기다리는지, 입출력을 기다리는지 등의 정보를 커널이 총체적으로 관리하게 됩니다. 예를 들어 타이머 인터럽트가 발생하면 커널은 자신의 데이터 영역에 있는 준비 큐의 정보를 참조해 다음에 어느 프로세스에게 CPU를 할당할지를 결정하고 현재 실행되던 프로세스는 준비 큐의 제일 뒤로 보내게 됩니다.

 

영역 별 큐 사용 흐름

이렇게 프로그램들은 다양한 상태 변화를 반복하며 자신의 프로그램을 수행하게 됩니다.

반응형
Comments