03. Interrupt와 IO Control

Interrupt

  • 정의

    IO 입출력이나 각종 예외 상황을 처리하기 위해 프로세서에게 알리는 신호

    CPU와는 별도로 비동기적으로 발생

  • Interrupt 목적

    CPU Utilization을 위해

    I/O 처리가 Processor보다 속도가 현저하게 느리기 때문에 CPU를 효율적으로 쓰기 위해서 I/O 처리 등을 시키면 그게 끝날 때까지 기다리지 않고 다른 작업을 수행하다가, 신호가 오면 처리한다

    항상 Kernel 모드에서 실행된다

  • 처리 과정

    1. I/O Device가 Interrupt 발생

    2. CPU가 Instruction 처리 후 Interrupt 왔는지 체크

    3. 있다면, 있는걸 확인했다고 ACK을 보냄

    4. 기존의 PC와 PSW 상태를 저장 (Memory의 Stack에 보냄)

    5. PC를 Interrupt를 처리하기 위한 Interrupt Handler 주소로 설정, PSW를 커널 모드로 설정

    6. 레지스터 내부 값들을 저장 (Memory의 Stack에 보냄)

    7. Interrupt를 잠시 받지 않음(Disable 처리)

    8. Interrupt Handler로 들어가서 ISR 실행
      (Interrupt Service Routine : 인터럽트에 특화된 Operation, Interrupt Handler의 부분집합)

    9. ISR에는 어떤 Interrupt가 왔을 때 어떤 함수를 실행할지 명세하는 Table인 IDT가 존재

    10. 처리 끝나면 다시 원래 상태로 복원

PIC

Programmable Interrupt Controller

Interrupt가 왔는지(INTR 핀),

어디에서 왔는지 알려주고(IRQ# 핀),

CPU와 통신(ACK 핀, Interrupt 확인 등)

Interrupt의 우선순위 조정 및 Masking 처리

Interrupt와 Exception 차이

구분InterruptException
발생 위치외부내부
(시스템 콜 포함)
동기AsyncSync
실행 중이었던 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에 저장했다가 복구하는 작업 필요


© 2025. Na2te All rights reserved.