[OS] 인터럽트

hyeondoonge·2023년 3월 10일
1

OS

목록 보기
1/7

정의

사전적 의미로는 (말 ・ 행동을) 방해해다 또는 (무엇을 잠깐) 중단시키다의 의미를 가진다.
이와 비슷하게 컴퓨터공학에서는 CPU가 프로그램을 실행하고 있을 때, 입출력 등의 장치나 예외상황이 발생하여 운영체제의 처리가 필요하여 작업을 중단하는 것을 의미한다.
그 후 CPU의 제어권이 운영체제로 넘어가 인터럽트를 처리하는 것이다.

종류

인터럽트를 발생시킨 주체에 따라 하드웨어 인터럽트, 소프트웨어 인터럽트로 분류할 수 있다.
하드웨어 인터럽트는 입출력 장치나 타이밍 장치와 같은 하드웨어가 발생시킨 인터럽트를 말한다.
소프트웨어 인터럽트는 Trap이라고도 부르는데, 프로그램에 의한 Exception이나 System call에 의해 발생하는 인터럽트이다.

  • Exception의 예: 0으로 나누기, overflow, 페이지 부재 등
  • System call의 예: I/O 요청, 프로세스 제어 요청, 프로세스 통신 등

동작 방식

기본동작 방식은 다음과 같다.

  1. 인터럽트가 발생한다.
  2. CPU는 인터럽트를 인지하고, PCB를 저장한다.
  3. mode bit를 커널 모드로 바꾸고 진입한다.
  4. 운영체제는 커널 주소 공간에 저장된 인터럽트 벡터를 참조한다.
  5. 인터럽트 벡터를 통해 알아낸 인터럽트 처리 루틴을 수행한다.
  6. CPU 제어권을 반납하고 mode bit를 사용자 모드로 바꾼다.
  7. CPU는 PCB를 불러오고 작업을 이어서한다.

I/O 요청과 완료 인터럽트가 발생했을 때, 기본동작을 바탕으로 각각의 처리 과정을 보며 이해해보자.

파일 읽기 요청

  1. 프로그램이 file input system call을 요청하여 인터럽트가 발생했다.
  2. 중단된 프로세스의 PCB를 저장한다.
  3. mode bit를 변경하고 CPU 제어권을 운영체제가 획득한다.
  4. 발생한 인터럽트에 대한 인터럽트 처리 루틴을 수행한다.
    이때, Disk I/O queue에 프로세스를 넣어 프로세스를 대기 상태로 만든다.
  5. CPU 제어권을 반납하고 mode bit를 사용자 모드로 바꾼다.
  6. CPU는 중단됐던 다음 프로세스의 PCB를 불러와 작업한다.

4번의 과정은 조금 특이하다.

만약 이때 운영체제가 제어권을 내놓지않는다면, I/O 작업 완료가되기까지 CPU는 아무작업도 하지못하고 놀고있게된다.
I/O 작업은 오래 걸리는 작업이므로 CPU가 기다리게하는 것은 대단한 자원 낭비를 하고있는 것이다.

결국 CPU 처리율을 극대화하기 위해 위와 같이 처리하게된다.

파일 읽기 완료

  1. 요청한 파일 읽기 작업이 끝이났다. Disk controller가 인터럽트를 발생시켰다.
  2. 중단된 프로세스의 PCB를 저장한다.
  3. mode bit를 변경하고 CPU 제어권을 운영체제가 획득한다.
  4. 발생한 인터럽트에 대한 인터럽트 처리 루틴을 수행한다.
  5. 레지스터에 저장된 결과물을 메인 메모리에 복사한다.
  6. 대기 queue에 있던 프로세스를 ready queue로 옮겨준다.
  7. CPU 제어권을 반납하고 mode bit를 사용자 모드로 바꾼다.
  8. CPU는 중단됐던 프로세스의 PCB를 불러와 작업을 이어서 한다.

2번 과정의 경우 context switching이 발생하지 않는데도 PCB를 저장하고있다.
이는 운영체제가 인터럽트 처리 후 context switching의 발생 가능성이 있기 때문이다.

용어

System call: 운영체제 서비스 사용을 위해 커널 함수를 호출하는 것
인터럽트 벡터: 해당 인터럽트에 대한 처리 루트 주소를 가지고 있는 정보
인터럽트 처리 루틴(ISR): 해당 인터럽트를 처리하는 커널 함수

의문사항

인터럽트와 관련해 생각해볼만한 질문들에 대해 답변을 해보자.

인터럽트 발생 시 항상 Context Switching이 발생할까?

그렇지 않다. 인터럽트 종류에 따라 다르다. 위의 예시 중 파일 읽기 과정에서 알 수 있듯이 모든 인터럽트에 대해 Context switching이 발생하진않는다.
I/O 요청이나 Timer에 의한 인터럽트 발생 시 Context switching이 발생한다.

인터럽트 수행 중에 인터럽트가 발생하면 어떻게 처리될까?

운영체제마다 상황을 처리하는 방법은 다르다.
우선 순차적인 방식으로서 실행 중인 인터럽트 처리를 끝난 후에 새로 들어온 인터럽트를 처리하는 방법이 있다.
반면 우선순위 기반 처리 방식으로서 인터럽트에 우선순위가 부여되어, 현재 처리중인 인터럽트 보다 더 높은 우선순위의 인터럽트가 발생했다면 이를 먼저 처리하는 방식도 있다.

참고

운영체제 - 이화여자대학교, System Structure & Program Execution 2

0개의 댓글