인터럽트의 개념은 정산적인 프로그램 실행 순서를 벗어나 발생하는 문제를 처리합니다. 즉 언제 발생할지 모르는 비동기적인 사건을 처리하는 방법입니다. 예를 들어 입출력 과정에서 언제 입출력 데이터가 준비될지 알 수 없으며 이를 CPU가 계속 검사하는 방법은 좋지 않습니다. 따라서 입출력 준비 상태를 인터럽트를 이용하여 알리는 방법을 일반적으로 사용합니다. 인터럽트가 요청되면 CPU는 현재 실행하고 있는 프로그램을 중단하고 요청된 인터럽트에 대한 서비스 프로그램으로 분기하여 필요한 조치를 취합니다. 인터럽트에 대한 서비스가 끝나면 인터럽트가 발생한 초기의 위치로 복귀하여 프로그램을 계속 실행합니다.
1. 인터럽트 종류
1) 외부 인터럽트
입출력 장치, 타이머, 전원 등 외부적 요인으로 발생하며 예를 들면 입출력 장치가 데이터 전송을 요구하거나 전송이 끝났음을 알릴 때 인터럽트가 발생합니다.
2) 내부 인터럽트
불법 명령이나 데이터를 사용할 때 발생하며 트랩이라 합니다. 내부 인터럽트는 프로그램 자체에서 발생하는 문제이고 외부 인터럽트는 프로그램 외적인 원인으로 발생하는 차이점이 있습니다. 따라서 내부 인터럽트는 프로그램과 동기적이나 외부 인터럽트는 비동기적입니다. 만약 인터럽트가 발생한 프로그램을 다시 실행시키면 내부 인터럽트는 매번 같은 위치에서 발생하는 반면 외부 인터럽트는 프로그램이 실행되는 상황에 따라 발생하는 차이점이 있습니다.
3) 소프트웨어 인터럽트
외부 또는 내부 인터럽트는 CPU 하드웨어의 신호에 의해 요청되지만 소프트웨어 인터럽트는 명령 실행에 의해 발생합니다. 소프트웨어 인터럽트는 인터럽트처럼 동작하는 call 명령으로 프로그래머에 의해 프로그램상의 원하는 위치에서 의도적으로 요청합니다. 소프트웨어 인터럽트의 예로는 Supervisor call 명령이 있습니다.
인터럽트 종류별 우선순위는 다음과 같습니다.
① power fail(정전) interrupt
② external interrupt
③ internal interrupt
④ software interrupt
2. 인터럽트의 동작 원리
인터럽트가 요청되면 해당 서비스 프로그램으로 분기하고 실행이 끝나면 다시 인터럽트가 발생한 위치로 되돌아와 프로그램을 계속 실행해야 하므로 원래의 프로그램으로 돌아오기 위하여 인터럽트가 요청된 시점의 CPU 상태를 저장해야 합니다. 인터럽트 발생시 프로그램 카운터만 저장하는 경우도 있으며 이 경우 서비스 프로그램이 레지스터나 상태 비트 등을 사용한다면 이들을 사용하기 전에 이전의 내용을 저장합니다. CPU 상태의 저장 방법은 스택을 이용하는 방법이 좋습니다. 프로그램 카운터는 서비스 프로그램의 시작 주소로 변경되며 시작 주소는 하드웨어적인 방법이나 또는 소프트웨어적인 방법으로 결정합니다.
인터럽트를 처리하는 방법은 다음과 같습니다.
① CPU는 명령 사이클이 완료될 때마다 인터럽트 발생 여부를 확인하여 발생했다면 인터럽트 사이클을 실행합니다. 즉 인터럽트를 요청합니다.
② 인터럽트 사이클 동안 PC를 저장하고 분기 주소를 PC로 전송합니다.
인터럽트 사이클의 예
SP ← SP + 1 ; 스택 포인터 증가
M[SP] ← PC ; PC를 스택에 푸시
INTACK ← 1 ; 인터럽트 승인 응답을 활성화
PC ← VAD ; 벡터번지를 PC에 전송
IEN ← 0 ; 인터럽트 요청 금지
GO TO FETCH CYCLE
③ 인터럽트 요청 장치를 식별하여 해당 서비스 루틴으로 분기
④ 인터럽트 서비스 루틴 실행
서비스 루틴의 초기 동작
- 낮은 순위의 인터럽트 마스크
- CPU 레지스터의 내용을 보관
인터럽트 서비스 루틴의 최종 동작
- 보관한 레지스터 내용을 복구
- 복귀 주소를 PC에 전송
⑤ 인터럽트가 발생한 프로그램으로 복귀하여 계속 프로그램 실행
3. 우선순위 인터럽트
CPU에는 여러 가지 입출력 장치가 연결되므로 인터럽트 시스템은 인터럽트를 요청한 장치를 식별해야 하며 또한 여러 인터럽트가 동시에 발생하는 경우 어떤 장치를 먼저 서비스할지를 판단해야 합니다. 우선순위 인터럽트는 동시에 여러 인터럽트가 발생했을 때 먼저 서비스할 장치를 판단하기 위해 각 장치에 우선순위(priority)를 부여한 인터럽트 시스템이 필요합니다. 또한 우선순위는 소프트웨어나 하드웨어적으로 판단할 수 있습니다.
1) 폴링(polling)
폴링은 소프트웨어적으로 우선순위가 높은 인터럽트를 알아내는 방법으로 모든 인터럽트를 대상으로 공통 서비스 프로그램을 가지고 있습니다. 이 프로그램은 인터럽트가 발생했을 경우 각 장치를 우선순위에 따라 차례로 검사하여 그중 가장 우선순위가 높은 장치를 찾고 이에 해당하는 서비스 루틴을 싱행하게 합니다.
폴링의 단점은 인터럽트를 요청하는 장치가 많으면 그들을 모두 검사해야만 하기 때문에 시간이 많이 걸린다는 점입니다. 이러한 단점은 하드웨어적인 방법으로 해결할 수 있습니다. 하드웨어 우선 순위 인터럽트 장치는 인터럽트 회선을 병렬 또는 직렬로 연결하여 우선순위를 결정하여 CPU에 인터럽트 신호를 전송합니다.
2) 데이지 체인 우선순위 인터럽트
데이지 체인 방법은 하드웨어적인 방법으로 모든 장치를 우선순위에 따라 직렬로 연결합니다. CPU와 세 가지 주변 장치 1,2,3을 연결한 인터럽트 요청 회선은 모든 장치가 공동으로 사용하도록 설정되어 있습니다. 하나의 장치가 인터럽트 신호를 요청하면 CPU는 INTACK 신호로 응답합니다 INTACK 신호는 각 장치에 직렬로 연결되어 해당 장치가 인터럽트 요청하지 않은 경우 다음 장치로 신호가 전송되며 해당 장치가 인터럽트를 요청한 상태면 통과되지 않고 VAD를 데이터 버스를 통해 CPU에 보냅니다. 따라서 INTACK 신호를 먼저 받는 장치가 인터럽트를 요청한 장치 중 가장 우선순위가 높은 장치가 될 권한이 있습니다.
인터럽트 서비스 루틴의 분기 주소를 판단하는 방법에 따른 분류
① nonvector 인터럽트 : 항상 일정한 위치로 분기하며 인터럽트 원인 판단하는 인터럽트 처리 루틴을 가지고 있습니다.
② vector 인터럽트 : 인터럽트를 요청한 장치가 분기에 관한 정보를 알리는 방법으로 분기에 관한 정보는 해당 인터럽트 서비스 루틴의 시작 주소 또는 pointer 등이 될 수 있습니다. 인터럽트 요청 장치가 프로세서에게 알리는 분기 정보인 기억 장치의 특정 위치에 있는 연속 단어를 interrupt vector라 합니다.
'컴퓨터정보' 카테고리의 다른 글
DMA(Direct Memory Access) 란? (0) | 2022.01.09 |
---|---|
데이터 전송 입출력 방식 (0) | 2022.01.09 |
데이터 전송 개념과 방식 (0) | 2022.01.08 |
입출력 장치를 알아보자 (0) | 2022.01.08 |
가상 기억 장치 (0) | 2022.01.07 |