인터럽트란 무엇인가? 현대 컴퓨터에서 작동하는 스마트한 방식
컴퓨터를 움직이는 뇌, 즉 CPU는 우리 눈에 보이지 않는 곳에서 끊임없이 명령을 처리하죠. 그런데 마우스를 움직이거나, 키보드를 누르거나, 네트워크에서 데이터가 도착할 때마다 CPU는 어떻게 바로 반응할 수 있을까요? 현대 시스템의 놀라운 '인터럽트' 기술이 바로 이 모든 비밀을 풀어줍니다. 이 글에서는 컴퓨터가 외부 이벤트에 즉각적으로 대응할 수 있는 인터럽트의 원리와 역할, 그리고 그 뒷이야기까지 쉽고 재미있게 알려드릴게요.
CPU와 인터럽트의 만남: 일상 속의 반응 속도
CPU는 본질적으로 메모리에서 명령을 가져와 실행하는 일을 반복합니다. 운영체제는 여러 프로그램 간에 CPU를 배분해 주지만, 외부에서 예기치 않은 이벤트가 발생하면 어떻게 할까요? '폴링(polling)'이라는 방법은 CPU가 반복적으로 "마우스 움직였니?", "키 눌렸어?", "데이터 도착했어?" 등 외부 장치에 물어보는 방식입니다. 하지만 이 방식은 많은 CPU 자원을 낭비시킬 뿐만 아니라, 빠른 반응이 어렵다는 한계가 있습니다. 여기서 인터럽트가 등장합니다. 인터럽트는 외부 장치가 스스로 '지금 중요한 일이 벌어졌으니, CPU야 너 당장 나 좀 봐!' 하고 신호를 보내는 시스템입니다. 이 덕분에 컴퓨터는 불필요하게 대기하지 않고, 중요한 상황에만 즉각적으로 반응할 수 있죠.
하드웨어 인터럽트와 그 전달 방식: IRQ vs MSI
인터럽트에도 종류가 있습니다. 하드웨어 인터럽트는 외부 장치(마우스, 키보드, 네트워크 카드 등)가 CPU에게 직접 신호를 보내는 유형이죠. 예전 컴퓨터나 임베디드 시스템에서는 '인터럽트 요청 라인(IRQ)'이라는 물리적 선을 통해 전달되었습니다. 예를 들어, IRQ1은 마우스 컨트롤러, IRQ14는 하드디스크처럼 각각 특정 장치와 연결되어 있어, CPU는 어떤 장치에서 신호가 왔는지 정확히 알 수 있습니다. 하지만 IRQ 라인은 한정된 수만 사용 가능해서 할당에 신중함이 필요했죠. 반대로, 요즘 컴퓨터에서는 '메시지 신호 인터럽트(MSI)'라는 방식이 널리 쓰입니다. PCI-Express를 이용해서 직접 메모리에 인터럽트 정보를 기록하는 방식으로, 물리적 라인이 필요 없기 때문에 훨씬 유연하고 확장성이 높습니다. 하드웨어 설계가 단순해지고, 비용도 절약되는 효과까지!
소프트웨어 인터럽트와 예외: CPU 내부의 경고 신호
하드웨어 인터럽트가 외부 장치에 의해 발생된다면, 소프트웨어 인터럽트(예외)는 CPU 내부에서 발생합니다. 대표적인 예가 '0으로 나누기', '접근 권한 없는 메모리 접근', '페이지 폴트', '디버깅을 위한 중단점' 등입니다. 예외는 다시 'Fault(실수)', 'Trap(덫)', 'Abort(중단)'으로 구분됩니다:
Fault: 회복 가능한 오류(예: 페이지 폴트)
Trap: 의도적으로 발생하는 이벤트(예: 시스템 호출, 디버그 중단)
Abort: 복구 불가능한 심각한 오류(예: 치명적 시스템 오류)
각 예외는 고유한 '인터럽트 벡터 번호'로 식별되어 CPU가 정확히 어떤 이벤트인지를 파악할 수 있게 도와줍니다.
인터럽트 처리 과정: CPU가 사건에 신속히 대응하는 방법
인터럽트가 발생하면 CPU는 현재 작업을 잠깐 멈추고, 다음과 같은 세 단계를 거칩니다.
프로세스 상태 저장: 지금 작업 중이던 정보를 메모리에 저장해 두고, 이벤트 처리가 끝나면 원래 상태로 복귀할 수 있도록 합니다.
인터럽트 서비스 루틴(ISR) 실행: CPU는 '인터럽트 벡터 테이블'에서 해당 인터럽트에 맞는 특별한 함수를 찾아 실행합니다. 이 함수는 이벤트에 따라 마우스 위치를 업데이트하거나, 네트워크 데이터를 처리하는 등 특화된 작업을 담당하죠.
상태 복구 또는 프로그램 종료: 만약 ISR이 정상적으로 처리를 마치면 원래 작업으로 돌아가고, 처리 불가능한 예외라면 운영체제가 문제 있는 프로그램을 종료합니다. 이렇게 함으로써, CPU는 다양한 이벤트에 빠르고 안정적으로 대응할 수 있습니다.
인터럽트 벡터의 역할과 각 장치별 구분 방식
인터럽트 벡터는 CPU가 인터럽트를 식별하고 맞춤 처리를 할 수 있도록 돕는 ID 역할을 합니다. x86 시스템에서는 예외에 대해 0~31번, 하드웨어 인터럽트는 32~255번 벡터 번호가 정해집니다. 덕분에 충돌 없이 많은 이벤트를 동시에 처리할 수 있죠. 예를 들어, 키보드 이벤트는 33번, 마우스 이벤트는 44번처럼 장치와 이벤트마다 다른 번호가 부여됩니다. 이 구조 덕분에 복잡한 시스템도 쉽게 확장할 수 있습니다.
최신 컴퓨터에서 인터럽트가 왜 중요한가?
오늘날의 컴퓨터는 초당 수백, 수천 개의 인터럽트를 처리합니다. 자고 일어나서 마우스를 흔들 때마다, 네트워크로 영상이 재생될 때마다 CPU는 각종 신호를 받아 순식간에 반응하고 있죠. 이처럼 인터럽트 시스템은 컴퓨터가 효율적으로 멀티태스킹하고, 즉각적으로 사용자의 요청에 답할 수 있는 가장 핵심적인 기술입니다.
마무리 인터럽트는 기계적 반복만 하던 CPU를 '센스 있는 비서'로 업그레이드한 최고의 발명품입니다. 외부·내부 이벤트가 발생할 때마다 적재적소에 대응하기 위한 인터럽트 구조와 처리 방법, 그리고 최신 기술 MSI까지 알아보았습니다. PC나 임베디드 시스템을 설계하거나, 성능을 개선하고 싶다면 인터럽트 구조 이해가 필수입니다. 혹시 더 깊이 배우고 싶다면 관련 서적이나 온라인 강의도 적극 활용해보세요. 컴퓨터의 반응 속도를 결정하는 진짜 뒷이야기, 이제 여러분의 손에 있습니다!
출처 :
