인터럽트에 대해서 알아보자

Haiseong Jeong·2022년 9월 29일
3
post-thumbnail

인터럽트란 무엇일까


구글에 인터럽트를 검색해 보았다. 잘 감이 오지 않는다. 이 기회에 인터럽트라는 말을 정확이 이해하고 가보자.

정상적인 수행을 방해하는것

한 대학교에 교수님 한분이 계신다. 수업시간이 되면 교수님은 컴퓨터 구조를 강의한다. ppt를 보여주며 강의를 계속 하고 있는데 한 학생이 손을든다.
"교수님, 질문 있습니다!"
잘 강의를 하던 교수님은 잠시 설명을 멈추고 질문이 뭔지 듣고 대답을 해준다. 그리고 다시 강의를 이어나간다.

인터럽트가 발생하는 모습을 비유해봤다. 여기서 교수는 cpu에 비유된다. cpu는 정해진 순서대로 연산을 수행하는 것이 정상적인 수행을 하는거라고 말 할수 있다. 그러나 학생이 질문을 하는 행위, 이것이 인터럽트이다. 교수, 즉 cpu의 정상적인 수행을 방해한것이다.

근데 그냥 순서대로 처리하면 안되는거야?

근데 굳이 들어온 질문을 먼저 처리해야 할까? 수업 시간이 끝나고 학생이 남아서 질문을 하면 되지 않을까 라는 생각을 하게 된다. 수업시간 중간에 질문을 하면 흐름이 끊어지고 시간이 더걸리는것 아닌가 라는 생각이 든다. 그러나 여기서 컴퓨터의 특성을 생각해 봐야 한다. 우선 이 이야기를 하기전에 인터럽트의 종류부터 알아보도록 하겠다.

4가지 인터럽트

Program Interupt : Generated by some condition that occurs as a result of an instruction execution, such us arithmetic overflow, division by zero, attempt to execute an illegal machine instruction, or reference outside a user's allowed memory space.
Timer Interupt : Generated by a timer within the processor. This allows the operating system to perform certain functions on a regular basis.
I/O Interupt : Generated by an 1/O controller, to signal normal completion of an operation, request service from the processor, or to signal a variety of error conditions.
Hardware failure Interupt : Generated by a failure such as power failure or memory parity error.

본인도 영어를 매우 못하지만 본인이 공부하는 교재를 그대로 들고와보았다. 인터럽트는 4가지 종류가 있다. 우선 Program Interupt와 Hardware failure Interupt를 보자. Program Interupt는 오버플로우가 발생한 경우, 0으로 나눈경우, 명령어가 잘못된 경우를 말하고 Hardware failure Interupt는 하드웨어 장치의 문제가 있을때 발생한다. 이 두가지 경우는 어떤 종류든 문제가 있을때 발생하는 경우이다.

문제가 있을때 발생하는 두 인터럽트와는 다르게 Timer Interupt와 I/O Interupt는 그렇지 않다. 우선 Timer Interupt는 프로그램을 병렬적으로 실행시키키기 위해 사용된다. cpu는 매우 빠르기 때문에 여러가지 프로세스를 한번에 실행시킬 수 있다. 정확히는 한번에 실행시키는 것이 아니라 조금씩 돌아가면서 실행시킨다. 이때 이 조금씩 실행시키는 시간을 Timer로 계산해서 그만큼씩 cpu가 일을 한다. 이것이 Timer Interupt이다.

가장 중요한것은 I/O 인터럽트

가장 중요한것은 I/O Interupt이다. 이 인터럽트가 있는 이유는 cpu와 I/O 장치의 속도차이 때문이다. 앞서 말했듯이 cpu는 매우 빠르다. 하지만 I/O장치는 그에 비해 아주 매우 현저히 느리다. 따라서 I/O 인터럽트가 필요하다.

I/O 인터럽트가 없다고 가정한다. I/O 장치로 write라는 기능을 수행하는 상황을 생각해보자. cpu는 I/O에게 출력을 준비하라고 지시한다. 그러면 I/O는 출력을 할 준비를 한다. 앞서 말했듯이 cpu에 비해 I/O가 매우 느리기 때문에 cpu는 I/O를 기다려야 한다. 마침내 I/O가 준비를 마치고 cpu는 write를 수행 완료했다.

cpu는 답답했다. 그래서 I/O가 준비를 하는동안 자기가 할 일을 하고 있기로 했다. write를 준비하라고 지시하고 자기가 할일을 하고있는다. I/O가 준비를 다했다. cpu에게 손을 든다. cpu는 하고있던 일을 멈추고 write를 수행한다. 자 여기에서 I/O가 준비를 다하고 손을 든 순간 I/O 인터럽트가 발생한 것이다.

이 그림이 잘 설명 해준다. 명령어 목록은 다음과 같다.

1 -> (write) -> 2 -> (write) -> 3

4번이 I/O에게 준비를 하라고 명령하는 과정, 5번이 I/O가 write하도록 하는 과정이다. 인터럽트가 없다면 왼쪽 그림처럼 I/O가 준비할 동안 기다려야 한다. 오른쪽 그림처럼 인터럽트가 있다면 2번 연산을 수행하고 있다가 준비가 다되면 출력을 한다. 이렇게 인터럽트는 오히려 수행시간을 빠르게 한다.

마치며

수능 영어 과목시간을 생각해보자. 처음은 듣기영역, 그 다음은 읽기 영역이다. 많은 학생들이 듣기 문제를 푸는 중간에 읽기 영역으로 잠깐 넘어가 문제를 읽고 있다. 읽다가 다음 듣기문제 시작을 알리는 소리가 들리면 읽은 부분을 표시하고 다시 돌아와 듣기 문제를 푼다. 이것도 인터럽트의 과정과 닮았다.

인터럽트가 발생할 때 이를 핸들링하게 하는 알고리즘을 인터럽트 핸들러라고 한다. 이 내용은 운영체제 과목에서 자세하게 배운다고 한다. 다음 학기 강의를 듣고 자세하게 써보겠다.

profile
나는 개발자다. 5000만큼 코딩한다.

0개의 댓글