티스토리 뷰

정보처리기사 필기 2과목 전자계산기 구조의 중요 개념 중 이번 포스팅은 인터럽트(Interrupt)에 대한 내용입니다. 인터럽트를 발생시키는 원인들과 이에 기준한 인터럽트의 종류를 구별하는 방법, 인터럽트가 발생할 경우 CPU가 확인할 사항, 인터럽트의 동작 순서, 그리고 인터럽트 우선순위 등 인터럽트의 모든 것에 대해 정리해보겠습니다.

1. 인터럽의의 발생 원인과 종류

인터럽트는 컴퓨터 프로그램을 실행하는 중에 프로그램을 정상적으로 진행할 수 없는 예기치 못한 상황이 발생할 경우에 현재 진행 중인 작업을 즉시 중단하고, 발생된 긴급 상황을 우선 처리한 후 원래 실행하던 작업으로 복귀하여 계속해서 진행하는 것을 의미합니다. 인터럽트를 직역한 뜻 그대로 '끼어들기'라고도 부릅니다.

인터럽트는 발생 원인에 따라 외부 인터럽트, 내부 인터럽트, 소프트웨어 인터럽트로 구분할 수 있습니다. 외부 인터럽트와 내부 인터럽트는 CPU의 하드웨어 신호에 의해 발생하는 이상이고 소프트웨어 인터럽트는 명령어를 수행하며 발생하는 인터럽트입니다.

외부 인터럽트에 속하는 인터럽트의 종류로는 전원 이상 인터럽트(Power Fail Interrupt), 기계 착오 인터럽트(Machine Check Interrupt), 외부 신호 인터럽트(External Interrupt), 입·출력 인터럽트(Input-Output Interrupt)가 있습니다. 전원 이상 인터럽트는 인터럽트 처리 우선순위 중 가장 첫 번째에 속하는 인터럽트로써 프로그램을 실행하는 도중에 정전이 되거나 전원 이상이 있는 경우에 발생합니다.

기계 착오 인터럽트는 컴퓨터 내부 장치인 CPU의 기능적인 오류가 발생한 경우 작동됩니다. 외부 신호 인터럽트는 외부 장치로 인터럽트를 요청하거나 키보드로 인터럽트를 발생시키는 키를 누른 경우에 작동합니다. 입·출력 인터럽트는 ·출력 데이터의 오류나 이상 현상이 발생한 경우 작동합니다.

내부 인터럽트는 하드웨어적인 이상 신호에 의해 발생하는 것이 아니라 잘못된 명령이나 데이터를 사용할 때 발생하는 인터럽트입니다. 다른 말로는 '트랩(Trap)'이라고도 합니다. 내부 인터럽트로는 프로그램 검사 인터럽트(Program Check Interrupt)가 있습니다. 프로그램 검사 인터럽트는 프로그램이 명령어를 해독하여 작업을 수행하는 도중 발생하는 중간 단계들에서 오류가 발생하는 경우 작동됩니다.

예를 들어 0으로 나누기(Divide by Zero)와 같은 명령 자체에 오류가 있는 경우나 Overflow와 Underflow가 발생한 경우가 프로그램 검사 인터럽트에 해당합니다. 또한 프로그램 명령어를 상황에 맞지 않게 잘못 사용한 경우와 부적합한 기억장소 참조와 같은 오류도 이에 해당합니다.

소프트웨어 인터럽트는 원래 프로그램의 처리 도중 명령의 요청에 의해 작동되는 인터럽트입니다. 대표적인것으로는 감시 프로그램을 불러오는 SVC(SuperVisor Call) 인터럽트가 있습니다. SVC 인터럽트는 사용자가 직접 SVC 명령을 사용해 의도적으로 불러오는 인터럽트입니다. 

2. 인터럽트 발생 시 CPU가 확인할 사항

인터럽트가 발생할 경우 CPU가 확인할 사항으로는 프로그램 카운터의 내용, 사용한 모든 레지스터 장치의 내용, 그리고 상태 조건의 내용(PSW)이 있습니다. 프로그램 카운터는 중앙처리장치 중 제어장치에 속하는 것으로써 다음에 실행할 명령과 주소를 저장하고 순차적으로 다음 작업을 실행하도록 하는 장치입니다. 인터럽트가 발생할 경우 이러한 프로그램 카운터를 확인하여 인터럽트 서브루틴을 처리한 뒤 원래 진행 중이던 프로그램으로 복귀할 수 있게 합니다.

다음으로 인터럽트가 발생 했을 때 사용한 모든 레지스터의 내용과 상태 조건의 내용을 확인하는 이유는 프로그램 카운터와 마찬가지로 원래 실행 중이던 프로그램 상태를 보존하기 위함이 가장 큰 부분을 차지합니다. 인터럽트 발생 시 프로그램의 상태를 보존하는 이유는 인터럽트 작업을 끝마친 뒤, 원래 수행 중이던 작업으로 복귀하여 계속해서 작업을 진행하기 위해서입니다. 따라서 원래 수행 중이던 작업에 사용된 모든 레지스터의 내용과 상태 조건의 내용을 CPU가 확인하여 인터럽트 작업을 수행한 뒤 복귀해야 하는 주소로 원활하게 복귀할 수 있게 합니다.

3. 인터럽트의 동작 순서

인터럽트가 작동하는 자세한 순서에 대해 차례대로 알아보겠습니다. 먼저 인터럽트를 요청하는 신호가 발생하면 실행 중이던 프로그램의 작동을 중단합니다. 단 이때 실행중이던 명령어(Micro Instruction)는 끝까지 실행합니다.

현재 실행 중이던 프로그램의 작동을 중단하면서 현재의 프로그램 상태를 보존해야합니다. 현재 프로그램의 상태는 인터럽트 작업 수행 뒤 실행할 명령의 주소의 형태로 PC에 저장됩니다. 현재 프로그램의 상태를 저장한 뒤 인터럽트를 처리하는 서브루틴을 실행합니다.

 

인터럽트 처리 루틴을 실행하며 인터럽트 작업을 요청한 특정 장치를 식별합니다. 다음으로 인터럽트 서비스(취급) 루틴을 실행하는데, 이때 인터럽트의 정확한 원인을 결정하고 실질적인 인터럽트를 실행하게 됩니다.

 

실질적인 인터럽트를 처리하면서 레지스터의 상태를 보존합니다. 이 때 현재 처리하는 인터럽트 보다 우선순위가 높은 인터럽트가 발생하면 우선순위가 높은 인터럽트를 먼저 처리합니다.

인터럽트를 처리하고 난 뒤, 원래 실행중이던 프로그램으로 상태를 복귀합니다. 인터럽트 요청 신호가 발생했을 때 PC에 저장한 주소 값을 다시 사용하여 인터럽트 작업 이전에 수행하던 프로그램을 계속해서 실행하는 것으로 인터럽트 동작이 끝나게 됩니다.

 

4. 인터럽트 우선순위

인터럽트의 우선순위를 결정하는 이유는 동시에 여러 종류의 인터럽트가 발생할 경우 먼저 처리할 우선순위를 정하여 원활하게 인터럽트를 처리하기 위해서입니다. 인터럽트의 우선순위는 중요도에 따라 결정됩니다.

최우선적으로 처리되어야 할 인터럽트는 전원 이상 인터럽트(Power Fail Interrupt)입니다. 컴퓨터 장치에 있어서 정전 등으로 인한 전원 이상 인터럽트는 다시 깨어날 수 없는 죽음의 상태와 같은 것이므로 인터럽트 발생 시 최우선적으로 처리되어야 하는 것입니다.

다음으로 중요도에 따라 기계 착오 인터럽트(Machine Check Interrupt), 외부 신호(External Interrupt), 입·출력 인터럽트(Input/Output Interrupt), 명령어 잘못, 프로그램 검사 인터럽트(Program Check Interrupt), SVC 인터럽트(SuperVisor Call Interrupt)로 이어집니다. 

인터럽트 우선순위를 분석해보면 외부 인터럽트를 먼저 처리하고 내부 인터럽트와 소프트웨어 인터럽트를 수행하는 것으로 나타나는 것을 알 수 있습니다. 외부 인터럽트는 사용자가 원치 않는 기계 장치 오류 등에 기인한 것으로써 사용자가 의도적으로 인터럽트를 요청하는 소프트웨어 인터럽트와는 중요도의 차원을 달리합니다. 따라서 인터럽트는 동시에 여러 장치에서 발생할 경우 위의 우선순위에 따라 진행되게 됩니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday