반응형


인터럽트(Interrupt)


인터럽트는 현재 실행 중인 프로그램을 중단하고 다른 프로그램의 실행을 요구하는 명령어이다.


인터럽트가 있음으로 인해 시스템의 처리 효율이 향상되고, 프로그램의 실행 순서를 바꿔 바며 처리 할 수 있기에 다중 프로그래밍에 사용된다.


이때 인터럽트는 I/O 혹은 프로그램에서 프로세서(CPU)로 보내는 하드웨어 신호이고, 컴퓨터 시스템에서 예상치 못한 상황이 발생했을 때 인터럽트가 필요로 된다.


이 인터럽트가 들어오면 실행중이던 프로그램을 잠깐 중지하고 인터럽트 요청이 온 프로그램에 대한 명렁어를 수행 할 수 있다.

이 인터럽트는 사용자가 요청 할 순 있지만 인터럽트에 대한 처리는 사용자가 아닌 OS가 알아서 해준다.


이때 인터럽트를 위해 프로세서는 연결된 각 I/O의 현재 상태를 파악하고 있어야 하는데 이 상태를 파악하기 위해 Polling 방식으로 각 장치의 상태 비트를 검사한다.


즉, 소프트웨어 풀링으로 I/O를 동기화한다.

 - I/O가 inturrupt를 보내기 전까지 CPU는 I/O를 실행시키고 계속 감시한다.


이때 디바이스 컨트롤러는 디바이스와 통신하기위한 레지스터를 가지고 있다.

   - input register, output register - 데이터 관리를 위해 존재

   - control register - 제어를 위해 존재한다.

   - status register - 상태를 감시하며 끝났는지 진행중인지 감시한다.



polling : cpu가 device들이 일하는지 감시하는 것 

vectored interrupt system : device가 일을 마치면 cpu에게 알려주는 것


폴링은 다음 링크를 참고하자.

https://www.crocus.co.kr/544?category=204622


만약 인터럽트가 없다면?


인터럽트가 존재하지 않는 OS라면 I/O의 상태를 OS가 계속해서 점검해야 하므로 이 동안 프로세서가 다른 일을 할 수 없게 된다.

따라서 오버헤드가 급증하게 되고 프로세서의 낭비가 일어난다.




인터럽트 종류



분류

종류

설명

외부 인터럽트

(HW인터럽트)

전원 이상 인터럽트

정전 또는 전원 이상에 의한 인터럽트 발생

기계 착오 인터럽트

CPU의 기능적인 오류 동작 발생

외부 신호 인터럽트

- 타이머에 의해 규정된 시간을 알리는 경우

- 키보드로 인터럽트를 발생시킨 경우(Ctrl+Alt+Del)

- 외부 장치로부터 인터럽트 요청 발생

입 출력 인터럽트

- 입출력 데이터의 오류나 이상 현상이 발생한 경우

- 입출력 장치가 데이터의 전송을 요구 또는 전송 완료 알림

내부인터럽트

(HW 인터럽트)

프로그램 검사 인터럽트

- 0으로 나누기가 발생한 경우

- Overflow, Underflow가 발생한 경우

- 부당한 기억장소의 참조와 같은 프로그램상의 오류

SW 인터럽트

SVC 인터럽트

- Supervisor Call (프로그램 내부에서 임의 호출)

- 사용자가 SVC 명령을 써서 의도적으로 인터럽트를 발생

- 기억장치 할당 및 오퍼레이터와의 통신이 필요한 경우





CPU가 인터럽트를 받을때

 

인터럽트를 받을 때 CPU가 어떻게 동작하는지 보자.


1. A 프로그램을 프로세서가 실행중인 상태에서 PC는 A 프로그램의 명령 부분을 가르키고 있다.


2. B 프로그램 실행을 위해 갑작스런 인터럽트를 발생시킨다. 


3. CPU는 현재 자신이 가지고 있던 레지스터의 모든 상태를 스택 혹은 프로세스 제어 블록에 저장하고 인터럽트 백터를 이용하여 적절한 인터럽트 핸들러를 쓴다(부른다). (컨텍스트 스위칭이 일어나는 구간이다.)


4. B 프로그램의 PC를 가르키고 프로세서는 작업을 다시 시작한다.


5. B의 작업이 모두 끝나면 이전 저장해둔 스택에서 A의 상태를 프로세서에 복구한다.


6. 아까 일부터 다시 시작






반응형