
메모리에 저장된 명령어를 CPU로 가져오는 과정입니다.
프로그램 카운터(PC)가 가리키는 주소에서 명령어를 읽어와 명령어 레지스터(IR)에 저장합니다.

인출한 명령어를 해석하고 실제로 수행하는 과정입니다.
제어장치가 명령어를 해석하여 적절한 연산(ALU 연산, 데이터 이동 등)을 수행합니다.



| 구분 | 동기 인터럽트 (Synchronous Interrupt)(예외) | 비동기 인터럽트 (Asynchronous Interrupt)(하드웨어 인터럽트) |
|---|---|---|
| 발생 시점 | 명령어 실행 중 예측 가능한 시점 | 명령어 실행과 무관하게 발생 |
| 발생 원인 | 명령어 실행 중 예외 상황 발생 | 하드웨어 장치에서 발생 |
| 예시 | 0으로 나누기, 페이지 폴트, 시스템 호출 | 키보드 입력, 타이머 인터럽트, I/O 장치 신호 |
| 연관성 | 실행 중인 명령어와 직접적인 관련 있음 | 실행 중인 명령어와 직접적인 관련 없음 |
| 처리 방식 | 현재 실행 중인 프로세스가 처리 | 별도의 인터럽트 핸들러가 처리 |
| 발생 예측 가능 여부 | 예측 가능 | 예측 불가능 |
인터럽트 벡터(Interrupt Vector)는 인터럽트가 발생했을 때 실행해야 할 인터럽트 서비스 루틴(ISR)의 주소를 저장하는 테이블입니다.
쉽게 말해, "어떤 인터럽트가 발생하면, 어떤 함수를 실행할지 알려주는 목록"이라고 볼 수 있습니다.
💡 예제: 긴급 연락처 목록
각 상황(인터럽트)이 발생하면, 미리 정해진 번호(인터럽트 벡터)를 통해 해당 기관(ISR)으로 연결되는 것과 같습니다.
인터럽트 벡터는 단순히 "목록"이므로, CPU는 인터럽트 벡터 테이블(IVT)이라는 것을 사용합니다.
IVT는 인터럽트 번호와 해당 인터럽트 처리 함수(ISR)의 주소를 저장한 테이블입니다.
| 인터럽트 번호 | 인터럽트 원인 | 인터럽트 서비스 루틴(ISR) 위치 |
|---|---|---|
0x00 | 0으로 나누기 오류 | 0x00008C00 |
0x08 | 타이머 인터럽트 | 0x00001234 |
0x09 | 키보드 입력 | 0x00005678 |
0x0E | 페이지 폴트 | 0x00009ABC |
0x21 | 시스템 호출(BIOS) | 0x0000DEAD |
💻 예제: 키보드 입력 인터럽트 처리
1. 사용자가 키보드를 누름 → 키보드 컨트롤러가 인터럽트 요청(IRQ 1)을 보냄
2. CPU는 인터럽트 벡터 테이블(IVT)에서 IRQ 1의 주소를 찾음
3. 해당 ISR(키보드 입력 처리 함수)을 실행
4. ISR이 눌린 키를 읽고 화면에 출력
5. ISR 실행이 끝나면 CPU는 원래 프로그램으로 복귀
| 개념 | 설명 |
|---|---|
| 인터럽트 서비스 루틴(ISR) | 특정 인터럽트를 처리하는 코드(함수) |
| 인터럽트 벡터 | 인터럽트 번호와 ISR 주소를 매핑하는 목록 |
| 인터럽트 벡터 테이블(IVT) | 여러 개의 인터럽트 벡터를 저장하는 메모리 영역 |
💡 쉽게 말하면:
인터럽트 벡터 = "주소록"
ISR = "주소록에 있는 사람"

하드웨어 인터럽트의 처리 순서
| 단계 | 처리 과정 |
|---|---|
| ① | 입출력 장치가 CPU에 인터럽트 요청 신호를 보냄 |
| ② | CPU는 실행 사이클이 끝난 후, 명령어 인출 전에 인터럽트 여부 확인 |
| ③ | CPU는 인터럽트 요청을 확인하고, 인터럽트 플래그를 통해 인터럽트를 받을 수 있는지 검사 |
| ④ | 인터럽트를 받을 수 있으면, CPU는 현재까지의 작업을 백업 |
| ⑤ | CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴(ISR)을 실행 |
| ⑥ | ISR 실행 종료 후, ④에서 백업한 작업을 복구하고 실행을 재개 |
인터럽트 플래그(Interrupt Flag, IF)는 CPU가 인터럽트를 처리할 수 있는 상태인지 여부를 나타내는 플래그(Flag) 비트입니다.
CPU 내부의 프로세서 상태 레지스터(PSW, EFLAGS 등)에 저장되며, 인터럽트의 허용 및 차단을 제어합니다.
인터럽트 활성화(Enable) 및 비활성화(Disable) 제어
IF = 1 → 인터럽트 허용 (인터럽트 요청을 받을 수 있음)IF = 0 → 인터럽트 차단 (인터럽트 요청을 무시함)CPU가 인터럽트를 처리할 수 있는 상태인지 확인
| 구분 | 막을 수 있는 인터럽트 (Maskable Interrupt, MI) | 막을 수 없는 인터럽트 (Non-Maskable Interrupt, NMI) |
|---|---|---|
| 정의 | 소프트웨어 또는 하드웨어에 의해 무시하거나 지연할 수 있는 인터럽트 | 무조건 처리해야 하며, 사용자가 막을 수 없는 인터럽트 |
| 발생 원인 | 일반적인 하드웨어 요청 (I/O 장치, 타이머 등) | 심각한 오류 (전원 장애, 하드웨어 고장 등) |
| 우선순위 | 비교적 낮음 | 매우 높음 |
| CPU 제어 가능 여부 | CPU에서 Interrupt Mask Bit 설정을 통해 무시 가능 | CPU에서 무시 불가능, 반드시 처리해야 함 |
| 예시 | 키보드 입력, 타이머 인터럽트, 네트워크 패킷 수신 | 메모리 오류, 전원 장애, 하드웨어 오작동 |
| 사용 목적 | 시스템 성능 최적화 (필요에 따라 처리 순서 조정 가능) | 시스템 보호 및 복구 (중대한 오류 감지 시 즉시 처리) |
Maskable Interrupt (MI)
Non-Maskable Interrupt (NMI)
인터럽트 서비스 루틴(ISR, Interrupt Service Routine)은 인터럽트가 발생했을 때 실행되는 특별한 함수입니다.
예를 들어, "누군가 초인종(인터럽트)을 누르면, 집주인(ISR)이 나가서 문을 열어주는 것"과 같습니다.
💡 예제 상황: 스마트폰 전화 수신
스마트폰을 사용하고 있는데 전화가 오면(인터럽트 발생) → 전화 수락 또는 거절을 결정하는 기능(ISR)이 실행됩니다.
이처럼 인터럽트가 발생하면 CPU는 특정 기능(ISR)을 실행한 후, 원래 작업으로 돌아갑니다.
💻 예제 1: 키보드 입력
1. 사용자가 키보드를 누름 → 키보드가 CPU에 인터럽트 요청(IRQ 1) 보냄
2. CPU는 현재 작업을 멈추고 ISR(키 입력 처리 함수)을 실행
3. ISR은 눌린 키를 읽고, 화면에 표시하도록 OS에 전달
4. ISR이 끝나면 CPU는 원래 작업으로 복귀
💾 예제 2: USB 장치 연결
1. 사용자가 USB를 컴퓨터에 꽂음 → USB 컨트롤러가 인터럽트 요청
2. CPU는 ISR을 실행하여 "새로운 장치가 연결됨" 메시지를 표시
3. ISR이 장치 드라이버를 로드하여 USB 사용 가능하도록 설정
4. CPU는 원래 작업으로 돌아감

이번 강의로 CPU의 명령어 사이클과 인터럽트 동작 원리를 이해할 수 있었습니다! 😊
다음 강의에서 더 심화된 내용을 다뤄보겠습니다.