프로세서 간 인터럽트
정의
프로세서 간 인터럽트(Inter‑Processor Interrupt, IPI)는 다중 프로세서 시스템(멀티코어·멀티프로세서 아키텍처)에서 하나의 프로세서가 다른 프로세서에게 특정 작업을 수행하도록 요청하기 위해 발생시키는 하드웨어 수준의 신호이다.
주요 목적
| 목적 | 설명 |
|---|---|
| 작업 동기화 | 특정 캐시 라인 무효화, TLB(Translation Lookaside Buffer) 플러시 등 전체 시스템의 일관성을 유지하기 위해 사용 |
| 스케줄링 | 다른 프로세서에 대기 중인 작업을 깨우거나, 현재 실행 중인 작업을 중단하도록 지시 |
| 시스템 관리 | 전원 관리, 부트·리부팅, 오류 복구 등 시스템 전반에 걸친 제어 신호 전달 |
| 통신 | 특정 서비스(예: I/O 완료 알림)를 다른 프로세서에 알리는 데 활용 |
동작 방식
-
신호 생성
- 요청 프로세서는 메모리 매핑된 레지스터 혹은 특수 명령어를 통해 대상 프로세서의 인터럽트 라인에 신호를 기록한다.
-
전달 경로
- 현대의 고성능 버스(예: Intel QPI, AMD Infinity Fabric) 또는 클러스터 내 로컬 인터커넥트가 신호를 전달한다.
-
핸들러 실행
- 대상 프로세서는 해당 인터럽트를 수신하면 사전에 정의된 인터럽트 핸들러를 실행한다. 핸들러는 요청된 작업을 수행하고, 필요에 따라 응답 신호를 원발 프로세서에 되돌려 보낸다.
사용 예시
- 멀티코어 운영체제
- Linux 커널은
smp_call_function()계열 API를 통해 IPI를 발행한다. 예를 들어, 커널 모듈 업데이트 시 모든 CPU에서 TLB를 플러시해야 할 경우 IPI가 사용된다.
- Linux 커널은
- 하이퍼바이저
- 가상화 환경에서 하이퍼바이저가 가상 CPU(VCPU) 간에 상태 전환을 요청할 때 IPI를 활용한다.
관련 용어
- Inter‑Processor Communication (IPC): 프로세서 간 데이터 교환을 포괄하는 개념으로, 인터럽트 외에도 공유 메모리, 메세지 패싱 등 다양한 메커니즘을 포함한다.
- 소프트웨어 인터럽트: 운영체제나 응용 프로그램이 소프트웨어적으로 발생시키는 인터럽트로, 하드웨어 인터럽트와 구분된다.
제한 및 고려 사항
- 오버헤드: IPI는 인터럽트 처리와 컨텍스트 전환을 수반하므로 과도한 사용은 시스템 성능에 부정적인 영향을 끼칠 수 있다.
- 동시성 관리: 여러 프로세서가 동시에 IPI를 발생시킬 경우 경쟁 조건이 발생할 수 있어, 적절한 동기화 메커니즘이 필요하다.
요약
프로세서 간 인터럽트는 다중 프로세서 환경에서 핵심적인 제어·동기화 메커니즘이며, 운영체제와 하이퍼바이저가 시스템 전체의 일관성과 효율성을 유지하기 위해 널리 활용한다.