인터럽트(interrupt)는 한국어로 새치기, 가로채기로 번역된다. 운영체제에서 인터럽트도 비슷한 의미가 되는데 단순한 가로채기가 아니라 제어권에 대한 이양이다. CPU가 사용자 프로그램에 의해 실행하는 도중 인터럽트가 발생하면, 이는 운영체제에게 제어권이 넘겨진다. 제어권을 넘겨받은 운영체제는 발생한 인터럽트를 해소한 후 사용자 프로그램에 다시 제어권을 이양하게 된다.
인터럽트가 발생하는 경우의 예는 다음과 같다.
인터럽트가 발생하는 경우의 예는 다음과 같다.
- 입출력동작이 종료되었을 때
- 0으로 나누는 계산을 했을 때
- 부적절한 기억장치를 접근하고자 할때
- 운영체제에 서비스를 요구할 때 등..
이다. 이외에도 다양한 인터럽트가 있을 수 있으며 이에 대한 자세한 설명은 http://rusy.tistory.com/entry/인터럽트interrupt 에 자세히 언급되어 있다.
인터럽트와 거의 비슷한 의미로 사용되는 트랩(trap)이 있다. 이는 소프트웨어 방식으로 구현하는 인터럽트와 거의 비슷한데, 예외를 검출할 수 있는 프로그램과 같이 생각하면 좋을 것 같다. 예로 시간초과등의 예외를 발생시키기 위해서 어떤 수를 클럭이 발생할때마다 누감할경우 수가 0이 되는 순간 인터럽트를 발생하게 할 수 있다.
인터럽트가 발생한후 이를 처리하고 복귀하는 과정은 다음과 같다.
인터럽트가 발생한후 이를 처리하고 복귀하는 과정은 다음과 같다.
- 인터럽트가 발생하면 운영체제는 하던일을 중단하고 중단된 상태정보를 저장한다.
- 제어를 인터럽트 벡터로 옮겨 요청한 인터럽트 처리 루팅의 주소를 가리키는 포인터를 참조한다.
- 포인터가 가리키는 주소로 이동하여 인터럽트 처리 루팅을 실행한다.
- 실행이 종료하면 저장 되었던 중단된 작업의 상태 정보를 복구하여 계속 실행한다.
위의 과정에서 인터럽트 벡터라는 용어가 나온다. 인터럽트 벡터는 일종의 인터럽트를 처리할 서비스들이 적힌 메뉴판이다. 해당되는 인터럽트 번호를 메뉴판에서 참고한후 메뉴판이 가리키는 서비스로 이동하여 해당 서비스를 통해 인터럽트를 처리한다.
댓글
댓글 쓰기