본문 바로가기
운영체제

운영체제 인터럽트란?

by PudgeKim 2020. 11. 24.

인터럽트란 cpu가 프로세스를 실행하고 있을 때 입출력, 파일읽기, 예외사항 등이 발생하여 처리가 필요한 경우 cpu에 알려주는 것이다.

 

저번 포스팅에서 프로세스의 상태에 대해 설명했었다.

간략히 설명하자면 프로세스의 상태는 프로세스의 생성과 종료를 제외하면 ready, running, block 이렇게 3가지로 나타낼 수 있다.

cpu가 프로세스를 실행도중 파일 읽기 같은 명령을 수행하게되면 프로세스는 block 상태에 돌입하게 되고 파일 읽기가 끝나면 다시 ready 상태로 돌아오게 된다. 그런데 파일 읽기가 끝난걸 어떻게 알까?

1) 여기서 파일 읽기가 끝났다는걸 운영체제에 알려주는게 인터럽트의 역할이다.

2) 이외에도 0으로 나누기 등의 예외사항 처리를 위해서도 인터럽트가 발생하게 된다.

3) 키보드, 마우스, 프린터기 등의 이벤트에 대해서도 인터럽트가 일어나게 된다.

4) 타이머 인터럽트라고 선점형 스케쥴러에서 cpu가 1초마다 프로세스를 번갈아가면서 실행한다고 가정해보자.
   이 경우 1초마다 인터럽트를 걸어주어 cpu에게 알려서 cpu가 프로세스를 바꾸게 해주는 것도 있다.

5) 시스템콜도 인터럽트이다.

 

인터럽트는 내부 인터럽트(소프트웨어 인터럽트)와 외부 인터럽트(하드웨어 인터럽트)로도 나뉘게 된다.

내부 인터럽트란 프로그램 내부에서 잘못된 명령 등이 사용되었을 때 발생하게 된다.
- 0으로 나누기
- overflow/underflow
- 잘못된 주소 접근 (예를 들면 사용자모드 상태에서 커널모드에서 접근 가능한 주소로 접근할 때)

외부 인터럽트란 프로그램 외부 즉, 주로 하드웨어에 의해 발생하게 된다.
- 키보드, 프린터 등의 I/O 이벤트
- 타이머 이벤트

 

IDT란?

Interrupt Descriptor Table의 약자로 시스템콜, 0으로 나누기 등의 여러 인터럽트들이 각각 번호와 실행코드로 IDT에 미리 정의되어 있다. (컴퓨터 부팅시에 운영체제가 기록한다.)

인터럽트가 발생하면 IDT를 확인해서 해당함수를 실행한다.

즉, 프로세스가 실행되다가 인터럽트가 발생하면 프로세스를 잠시 중단하고 IDT를 확인하여 인터럽트에 맞는 해당함수를 실행한 후에 다시 프로세스가 재실행된다.