인터럽트
태그 :
- 개념
- 인터럽트의 정의 어떤 장치가 다른 장치의 일을 잠시 중단시키고 자신의 상태 변화를 알려 주는 것 인터럽트가 발생하면, 인터럽트를 받은 장치는 현재 자신의 상태를 기억시켜두고 인터럽트를 처리
I. 장치의 상태 변화에 효과적으로 대응하기 위한 인터럽트의 개요
가. 인터럽트의 정의
- 어떤 장치가 다른 장치의 일을 잠시 중단시키고 자신의 상태 변화를 알려 주는 것
- 인터럽트가 발생하면, 인터럽트를 받은 장치는 현재 자신의 상태를 기억시켜두고 인터럽트를 처리
나. 인터럽트 관련 주요 개념
구분 |
설명 |
인터럽트 요청 (IRQ) |
- Interrupt ReQuest, CPU에 인터럽트를 요청하는 신호 - CPU에게 인터럽트 요청 시 CPU가 각 장치를 구분할 수 있는 공유한 IRQ 존재. |
인터럽트 처리루틴 (IPR) 또는 인터럽트 벡터 |
- Interrupt Process Routine, 인터럽트 발생 원인을 찾아 ISR 호출 |
인터럽트 서비스 루틴(ISR) |
- Interrupt Service Routine, 인터럽트에 대한 실체 처리를 담당 |
트랩 (Trap) |
- 오류나 사용자 요청에 의해 소프트웨어가 발생시킨 인터럽트 |
II. 인터럽트 처리 과정의 개념도 및 과정
가. 인터럽트 처리 개념도
나. 인터럽트 처리 과정
- 인터럽트 벡터 테이블의 해당 주소로 PC 값 변경(분기)
- 외부에서 인터럽트가 발생한 경우, IRQ에 해당하는 주소로 PC 값 변경(분기) (예. 0x20 번지)
- 인터럽트 벡터 테이블의 해당 주소에서, 해당 인터럽트 핸들러로 분기
- 이미 0x20 번지에는, 해당 인터럽트 핸들러(여기에서는 IRQ 핸들러)로 분기하는 명령이 있음
- 인터럽트 핸들러에서는, 현재 상태(context)를 저장하고, 해당하는 ISR을 찾아서 분기
- IRQ 핸들러에서는 인터럽트 컨트롤러의 상태 레지스터를 확인하여, 해당하는 ISR을 결정함
- 예. Timer와 DMA의 인터럽트가 동시에 발생한 경우, 우선순위가 높은 장치의 ISR로 결정됨
- ISR에서는 실제 해당 인터럽트에 대한 처리를 담당함, 종료 후 인터럽트 핸들러로 복귀
- 인터럽트 핸들러로 돌아오면, 원래 상태(context)를 복원(restore)하게 됨.
- 인터럽트 핸들러 종료 후 리턴하게 되면, 원래 수행되던 프로세스가 이어서 수행됨.
- 이 과정에서, 인터럽트의 마스킹(masking), 수행 불가/가능(disable/enable) 등도 설정됨.
III. 인터럽트의 유형 및 종류
가. 인터럽트 유형
분류 |
종류 |
설명 |
외부 인터럽트 (HW 인터럽트) |
전원 이상 인터럽트 |
정전 또는 전원 이상에 의한 인터럽트 발생 |
기계 착오 인터럽트 |
CPU의 기능적인 오류 동작 발생 |
|
외부 신호 인터럽트 |
- 타이머에 의해 규정된 시간을 알리는 경우 - 키보드로 인터럽트를 발생시킨 경우(Ctrl+Alt+Del) - 외부 장치로부터 인터럽트 요청 발생 |
|
입 출력 인터럽트 |
- 입출력 데이터의 오류나 이상 현상이 발생한 경우 - 입출력 장치가 데이터의 전송을 요구 또는 전송 완료 알림 |
|
내부 인터럽트 (HW 인터럽트) |
프로그램 검사 인터럽트 |
- 0으로 나누기가 발생한 경우 - Overflow, Underflow가 발생한 경우 - 부당한 기억장소의 참조와 같은 프로그램상의 오류 |
SW 인터럽트 |
SVC 인터럽트 |
- Supervisor Call (프로그램 내부에서 임의 호출) - 사용자가 SVC 명령을 써서 의도적으로 인터럽트를 발생 - 기억장치 할당 및 오퍼레이터와의 통신이 필요한 경우 |
나. 인터럽트 종류
- Maskable interrupt (IRQ): interrupt mask register (IMR)의 마스킹(masking)에 의해 무시될 수 있는 HW 인터럽트
- Non-maskable interrupt (NMI): 마스킹에 의해 무시될 수 없는 HW 인터럽트 (예. 시스템 상태를 검사하는 watchdog 타이머 등)
- Interprocessor interrupt: 특별한 인터럽트로, 어떤 프로세서에서 생성된 인터럽트가 다른 프로세서에서 처리되는 인터럽트 (멀티 프로세서 시스템)
- Software Interrupt: 명령어 수행으로 발생하는 인터럽트. 시스템 콜(system call) 형태로 구현됨.
- Spurious interrupt: 원치 않는 HW 인터럽트. 일반적으로 시스템 상태에 의해 발생 (예. HW 오동작, 인터럽트 핀(pin)의 전기적 간섭 현상 등)
IV. SW, HW 방식에 따른 인터럽트
가. SW, HW 방식에 따른 인터럽트 우선순위 체계
구분 |
설명 |
|
SW적 방식 (폴링) |
- 인터럽트 발생시 우선순위가 가장 높은 인터럽트 자원(Source)부터 인터럽트 요청 플래그를 차례로 검사하여 찾고 이에 해당하는 인터럽트 서비스 루틴 수행 - 우선 순위 변경이 쉬움(S/W변경) - 회로가 간단하고 융통성이 있으며 별도의 하드웨어가 필요 없으므로 경제적임 - 많은 인터럽트가 있을 때 그들을 모두 조사하는데 많은 시간이 걸려 반응시간이 느리다는 단점이 있음 |
|
HW 방식 (Vectored Interrupt) |
직렬 연결 |
- Daisy-Chain - 우선순위 부여 방식으로 인터럽트가 발생하는 모든 장치를 한 개의 회선에 직렬로 연결 - 우선순위가 높은 장치를 선두에 위치시키고 나머지를 우선순위에 따라 차례로 연결 |
병렬 연결 |
- Multiple Interrupt - 인터럽트가 발생하는 각 장치를 개별적인 회선으로 연결 - 각 장치의 회선에 대응하는 Mask Register를 사용하고 우선순위는 Mask Register의 비트 위치에 의해 결정 |
나. SW, HW 방식에 따른 인터럽트 비교
구분 |
SW적 구현 방식 |
HW적 구현 방식 |
반응속도 |
저속 |
고속 |
회로 복잡도 |
단순 |
복잡 |
경제성 |
경제적 |
비 경제적 |
융통성 |
있음 |
없음 |
동작방식 |
1) 현재 수행중인 명령어 완료 2) 수행이 중단된 프로그램의 상태(레지스터의 내용 + PC값)를 안전한 기억장소에 보존 3) 인터럽트 처리 루틴(IPR)을 통해 인터럽트의 원인을 찾아냄 4) 해당되는 인터럽트의 서비스 루틴을 수행 5) 보존시킨 프로그램의 상태를 복구하여 인터럽트 당한 프로그램을 중단된 곳에서부터 다시 계속하여 수행 |
1) 현재 수행중인 명령어 완료 2) 수행이 중단된 프로그램의 상태 (레지스터의 내용 + PC값)를 안전한 기억장소에 보존 3) 인터럽트 벡터를 통해 인터럽트 서비스 루틴으로 분기 (인터럽트의 원인이 하드웨어에 의해 판별되므로 인터럽트 처리 루틴이 필요하지 않음) 4) 해당되는 인터럽트의 서비스 루틴을 수행 5) 보존시킨 프로그램의 상태를 복구하여 인터럽트 당한 프로그램을 중단된 곳에서부터 다시 계속하여 수행 |
V. 인터럽트의 처리 우선 순위와 인터럽트 처리 과정
가. 인터럽트의 처리 우선 순위
구분 |
내용 |
개념 |
하나의 명령 사이클 수행 도중 여러 인터럽트가 중앙처리장치에 도달할 경우 처리할 인터럽트를 결정하기 위한 순위 |
기능 |
- 각 장치에 우선순위를 부과하는 기능 - 인터럽트를 요청한 장치의 우선순위를 판별하는 기능 - 우선순위가 높은 것을 먼저 처리할 수 있는 기능 |
종류별 우선순위 |
- 외부 인터럽트 -> 내부 인터럽트 -> SW 인터럽트 의 우선순위로 처리 - 전원이상 à 기계 착오 à 외부 신호 à 입.출력 à 내부 à SW 인터럽트 |
우선순위 판별 방법 |
- LCFS(Last Come First Serve): 가장 최근에 인터럽트를 요청한 장치가 최고 우선 순위 - FCFS(First Come Fist Serve): 제일 먼저 인터럽트를 요청한 장치가 최고 우선순위 |
- HW 방식: 데이지 체인 방식, 병렬 우선순위 부여 방식 - SW(폴링) 방식: 우선순위가 높은 source 부터 차례대로 인터럽트 요청 플래그 검사 |
나. 인터럽트의 처리과정
1) 단일 인터럽트의 처리 과정
개념도 |
처리 과정 |
|
1. 인터럽트 요청 신호 검출 및 인터럽트 우선순위 제어 및 허용 여부 판단 2. 인터럽트 처리 루틴의 시작 번지 확인 3. 복귀 주소 및 레지스터 저장 4. 인터럽트 서비스 루틴 실행 5. 인터럽트 서비스 루틴 종료 및 프로세스 복귀 |
우선순위에 따른 인터럽트 처리 |
순차 처리에 따른 인터럽트 처리 |
- 인터럽트의 우선 순위를 정하고, 우선 순위가 낮은 인터럽트가 처리되고 있는 동안에 우선순위가 더 높은 인터럽트가 들어오면, - 현재의 인터럽트 서비스 루틴의 수행을 중단하고 새로운 인터럽트를 처리 |
- 이전 인터럽트의 처리가 종료될 때까지 인터럽트 처리를 연기 - CPU가 인터럽트 서비스 루틴을 처리하고 있는 도중에는 새로운 인터럽트 요구가 들어오더라도 CPU가 인터럽트 사이클을 수행하지 않도록 방지 |
- Device 의 ISR 처리 시 우선순위가 높은 Network 인터럽트가 발생하여, Network ISR을 수행 후 Device ISR로 복귀 |
- Device 의 ISR 처리 중에 Network 인터럽트가 발생하였으나, Device ISR 완료까지 Pending. Device ISR 완료 후 인터럽트의 유무를 확인 후 Network ISR을 수행 |
3) 다중 인터럽트의 처리를 위한 인터럽트 백터
구분 |
내용 |
|
개념 |
인터럽트가 발생했을 때, 그 인터럽트를 처리할 수 있는 서비스 루틴들의 주소를 가지고 있는 공간 |
인터럽트 벡터 테이블 구조 |
벡터형 인터럽트 Vectored Interrupt |
- 인터럽트가 발생했을 때, 인터럽트 벡터, 즉 해당 인터럽트를 처리할 수 있는 서비스 루틴들의 주소를 가지고 있고, 인터럽트에 따라 이를 호출하여 인터럽트를 처리 하는 방식 - 인터럽트 처리 시간이 빠름 - 주변장치의 많고 적음에 영향이 없다. |
VII. 인터럽트의 동작원리 개념 (요청회선의 연결 방법)
- 인터럽트가 가능한 자원들에게 고유 번호를 부여하여 CPU가 구별하도록 인터럽트 번호를 할당
유형 |
설명 |
단일 회선방법 (SW폴링, 데이지체인) |
- 프로그램 수행 중 Disk가 인터럽트를 요청하면 PC+1 값인 46번지를 저장후 인터럽트 처리루틴인 300번지로 분기하여 Dis의 인터럽트 서비스 루틴인 401번지로 분기 |
① 현재 수행중인 명령어를 완료. ② 수행이 중단된 프로그램의 상태(레지스터의 내용 + PC값)를 안전한 기억장소에 보존 ③ 인터럽트 처리 루틴을 통해 인터럽트의 원인을 찾아냄 ④ 해당되는 인터럽트의 서비스 루틴을 수행 ⑤ 보존시킨 프로그램의 상태(레지스터의 내용 + PC값)를 복구하여 인터럽트 당한 프로그램을 중단된 곳에서부터 다시 계속하여 수행 |
|
- 한 개의 회선에서 여러 개의 장치를 연결, SW폴링 방식, 데이지 체인방식에 사용 |
|
다중 회선방법 (Vectored) |
- 프로그램 수행 중 Disk가 인터럽트를 요청하면 PC=1 값인 46번지를 저장 후 인터럽트 백터를 통해 Disk의 인터럽트 서비스 루틴인 401 번지로 분기함. |
② 수행이 중단된 프로그램의 상태(레지스터의 내용+PC값)를 안전한 기억장소에 보존 ③ 인터럽트 백터를 통해 인터럽트 서비스 루틴으로 분기 (인터럽트의 원인이 하드웨어에 의해 판별되므로 인터럽트 처리 루틴이 필요하지 않음) ④ 해당되는 인터럽트의 서비스 루틴을 수행 ⑤ 보존시킨 프로그램의 상태(레지스터의 내용 + PC값)를 복구하여 인터럽트 당한 프로그램을 중단된 곳에서부터 다시 계속하여 수행 - 장치마다 고유의 요청 신호 회선을 연결, 다중 인터럽트 방식(Vectored)에 사용 |
|
혼합 회선방법 |
- 단일회선방법과 다중회선방식을 혼합 |