728x90
1. 명령어 사이클이란?
CPU는 프로그램을 실행하기 위해 *명령어 사이클(Instruction Cycle)을 끊임없이 반복한다. 이 사이클은 크게 세 단계로 구성된다:

- 인출(Fetch): 메모리에서 다음 실행할 명령어를 가져온다
- 간접(Indirect): 간접 주소 지정 방식을 사용하는 명령어의 경우, 실제 데이터 주소를 얻기 위해 메모리에 한 번 더 접근한다
- 실행(Execute): 가져온 명령어를 해석하고 실행한다
이 과정을 Fetch-Execute Cycle이라고도 하며, 컴퓨터가 켜져 있는 동안 계속해서 반복된다.
2. 인터럽트: CPU를 깨우는 신호
인터럽트의 필요성
CPU는 명령어 사이클을 실행하던 중 인터럽트(Interrupt) 신호에 의해 중단될 수 있다. 왜 이런 메커니즘이 필요할까?
키보드나 하드디스크 같은 주변 장치는 CPU보다 훨씬 느리다. 만약 인터럽트가 없다면 CPU는 폴링(Polling) 방식으로 주기적으로 장치 상태를 확인해야 하는데, 이는 엄청난 CPU 자원 낭비다. 인터럽트를 사용하면 주변 장치가 필요할 때만 CPU에 신호를 보내므로 효율적이다.

인터럽트의 종류
1) 동기 인터럽트 (예외, Exception)
- CPU 내부에서 명령어 실행 중 발생한다
- 예: 0으로 나누기, 오버플로우, 잘못된 메모리 접근
2) 비동기 인터럽트 (하드웨어 인터럽트)
- 외부 하드웨어 장치에서 발생한다
- CPU 내부의 인터럽트 플래그(Interrupt Flag)에 신호를 보낸다
- 예: 키보드 입력, 마우스 클릭, 타이머, 하드디스크 작업 완료
3. 인터럽트 처리 과정

인터럽트가 발생하면 다음과 같은 순서로 처리된다:
① 인터럽트 요청 신호 발생
- 하드웨어 장치가 CPU에 인터럽트 요청(IRQ) 신호를 보낸다
② 인터럽트 가능 여부 확인
- CPU는 매 명령어 실행 전에 인터럽트 플래그(IF)를 확인한다
- 플래그가 활성화되어 있으면 인터럽트를 받아들인다
③ 현재 상태 백업
- 작업 중이던 레지스터 값과 프로그램 카운터(PC)를 스택(Stack)에 저장한다
- 이렇게 해야 인터럽트 처리 후 원래 작업으로 돌아갈 수 있다
④ 인터럽트 벡터 참조
- 인터럽트 벡터 테이블(Interrupt Vector Table)에서 해당 인터럽트의 처리 코드 시작 주소를 찾는다
⑤ 인터럽트 서비스 루틴 실행
- 인터럽트 서비스 루틴(ISR, Interrupt Service Routine)을 실행하여 인터럽트를 처리한다
- 예: 키보드 입력을 버퍼에 저장, 하드디스크 데이터 읽기 등
⑥ 원래 작업 복귀
- 스택에 저장해둔 정보를 복원하여 중단되었던 작업을 재개한다
4. 인터럽트 벡터와 서비스 루틴

- 인터럽트 벡터(Interrupt Vector): 각 인터럽트 종류별로 처리 루틴의 시작 주소를 저장한 테이블이다.
인터럽트가 발생하면 이 테이블을 참조하여 어디로 가야 할지 알 수 있다. - 인터럽트 서비스 루틴(ISR): 인터럽트를 실제로 처리하는 프로그램 코드다.
각 하드웨어 장치마다 고유한 ISR이 있으며, 인터럽트가 발생하면 해당 ISR이 실행된다.
예를 들어, 키보드 인터럽트가 발생하면 → 인터럽트 벡터 테이블에서 키보드 ISR 주소를 찾고 → 키보드 ISR이 실행되어 입력을 처리한다.
마무리
CPU는 명령어 사이클을 반복하며 프로그램을 실행하고, 외부 장치는 인터럽트를 통해 필요할 때만 CPU에 신호를 보낸다.
이를 통해 폴링 방식에 비해 CPU 자원을 효율적으로 사용할 수 있게 해준다.
728x90
'Computer Science > 컴퓨터구조' 카테고리의 다른 글
| [혼공컴운] - CPU 성능 향상과 병렬처리 기법 (0) | 2025.10.18 |
|---|---|
| [혼공컴운] CPU의 핵심 구성요소: 레지스터(Register) (0) | 2025.10.14 |
| [혼공컴운] 컴퓨터의 문자 표현과 명령어 구조 (0) | 2025.10.12 |
| [혼공컴운] 컴퓨터가 코드를 실행하는 원리 (0) | 2025.10.12 |