- Interrupt
- PIC
- Interrupt와 Exception 차이
- IO Controller
- IO Port Register
- I/O Address Space 구현 방식
- I/O 통신 방법 ( Processor가 I/O 처리를 보낸 후 Interrupt가 오기 전까지 )
- APIC
- SMP
- Mutiple Interrupts 처리 방법
- Interrupt 장단점
Interrupt
정의
IO 입출력이나 각종 예외 상황을 처리하기 위해 프로세서에게 알리는 신호
CPU와는 별도로 비동기적으로 발생
Interrupt 목적
CPU Utilization을 위해
I/O 처리가 Processor보다 속도가 현저하게 느리기 때문에 CPU를 효율적으로 쓰기 위해서 I/O 처리 등을 시키면 그게 끝날 때까지 기다리지 않고 다른 작업을 수행하다가, 신호가 오면 처리한다
항상 Kernel 모드에서 실행된다
처리 과정
I/O Device가 Interrupt 발생
CPU가 Instruction 처리 후 Interrupt 왔는지 체크
있다면, 있는걸 확인했다고 ACK을 보냄
기존의 PC와 PSW 상태를 저장 (Memory의 Stack에 보냄)
PC를 Interrupt를 처리하기 위한 Interrupt Handler 주소로 설정, PSW를 커널 모드로 설정
레지스터 내부 값들을 저장 (Memory의 Stack에 보냄)
Interrupt를 잠시 받지 않음(Disable 처리)
Interrupt Handler로 들어가서 ISR 실행
(Interrupt Service Routine : 인터럽트에 특화된 Operation, Interrupt Handler의 부분집합)ISR에는 어떤 Interrupt가 왔을 때 어떤 함수를 실행할지 명세하는 Table인 IDT가 존재
처리 끝나면 다시 원래 상태로 복원
PIC
Programmable Interrupt Controller
Interrupt가 왔는지(INTR 핀),
어디에서 왔는지 알려주고(IRQ# 핀),
CPU와 통신(ACK 핀, Interrupt 확인 등)
Interrupt의 우선순위 조정 및 Masking 처리
Interrupt와 Exception 차이
| 구분 | Interrupt | Exception |
|---|---|---|
| 발생 위치 | 외부 | 내부 (시스템 콜 포함) |
| 동기 | Async | Sync |
| 실행 중이었던 Instruction 처리 | 항상 Interrupt 처리를 완료하고 나서 | 실행 중 완료되지 않은 채로 처리될 수 있음 |
IO Controller
IO Controller는 IO Devices에게 IO관련 Operation을 control할 수 있는 시스템 SW를 허용하여 Communication함
IO Controller는 적어도 3개의 Address(Port) 가 버스에 존재하는데, 각각이 Controller의 register에 대응되며 이를 IO Port Register라고 함
IO Port Register
| 역할 | |
|---|---|
| Status | 디바이스의 현재 상태를 확인 |
| Control Command | 디바이스에게 작업 명령 |
| Data | 디바이스와 데이터 송수신 |
I/O Address Space 구현 방식
Port mapped IO
IO Controller가 시스템 버스에 연결되고, 이때 내부의 Port들이 메모리처럼 별도의 주소로 매핑되고, I/O Instruction Trigger로 접근
Memory mapped IO
기존의 Memory Address 내에 IO Address 공간을 할당해서 사용하는 것
=> 메모리 내에 위치하므로 메모리의 load, store Instruction으로도 IO에 접근할 수 있다
(I/O를 위한 Address로 Physical Memory에는 접근 불가)
I/O 통신 방법 ( Processor가 I/O 처리를 보낸 후 Interrupt가 오기 전까지 )
Programmed I/O(Polling I/O)
CPU가 I/O Controller에게 명령을 내린 뒤 계속해서 Status를 확인하며 끝날 때까지 기다리는 방식 (Busy-Wait, Non-Block - Async)
Interrupt Driven I/O
I/O Controller에게 명령을 내리고, Interrupt가 올 때까지 다른 일을 처리하는 방식 (Non-Block - Async)
DMA(Direct Message Access)
대용량의 I/O를 word 단위로 왔다 갔다 하면서 Interrupt를 보내긴 비효율적임
기존까지는 word 연산 단위였다면, Block 단위 대용량 I/O를 처리할 필요 있음
=> DMA에게 I/O 커맨드 블럭을 보내면, DMA가 직접 메모리로 접근해 I/O 처리를 한 뒤 CPU에게 Interrupt 보냄
I/O Controller와 분리된 방식, 통합된 방식 다 구현 가능
APIC
Advanced Programmable Interrupt Controller
어떤 프로세스에게 어떤 Interrupt를 줄 것인지도 결정하는 Controller
SMP
Symmetric Multi-Processor
대칭 멀티 프로세서
한 시스템에 여러개의 프로세서가 있을 때, APIC을 이용해서, 공유 Device에서 발생하는 Interrupt를 프로세서별로 처리할 수 있다, 또한, 각 프로세서 별로 가지고 있는 Local Device에 대한 Interrupt 관련 처리를 위한 Local APIC이 존재한다
Mutiple Interrupts 처리 방법
Sequential Interrupt Processing
인터럽트가 처리되는 동안 다른 인터럽트들은 disable 했다가 끝나면 re enable해서 pending되었던 다른 인터럽트들을 처리
장점
구현이 단순함
단점
우선순위를 고려하지 않음
Nested Interrupt Processing
인터럽트 간 우선순위를 설정하고, 인터럽트를 처리하고 있었더라도 더 높은 우선순위의 인터럽트가 발생하면 그것 먼저 처리한 뒤 이어서 진행
장점
우선순위를 고려하여 처리할 수 있음
단점
구현이 복잡함
Interrupt 장단점
장점
I/O를 처리하려고 기다리지 않아도 되서 CPU를 효율적으로 활용 가능
단점
Interrupt를 처리하기 위해 register를 Memory에 저장했다가 복구하는 작업 필요