명령어 사이클
CPU가 하나의 명령어를 처리하는 과정을 명령어 사이클이라고 합니다. 일반적으로 명령어 사이클은 4개의 단계로 구성됩니다.
1) 인출(Fetch)
- 메모리에서 명령어를 가져오는 단계
- 프로그램 카운터(PC)에 저장된 주소를 사용하여 해당 명령어를 메모리에서 읽어옵니다.
- 읽어온 명령어는 명령어 레지스터(IR)에 저장됩니다.
- PC 값이 증가하여 다음 명령어를 가리킵니다.
2) 해독(Decode)
- 명령어를 해석하는 단계
- 명령어 레지스터(IR)에 저장된 명령어를 분석하여 어떤 연산을 수행해야 하는지 결정합니다.
- 연산 코드(OPCODE)와 필요하면 피연산자(Operand)도 확인합니다.
3) 실행(Execute)
- 해독한 명령을 실제로 실행하는 단계
- 산술 및 논리 연산(ALU 사용), 메모리 접근, 데이터 이동, 입출력 등 다양한 연산 수행
- 실행 결과를 레지스터나 메모리에 저장
4) 간접(Interrupt Check)
- 인터럽트(Interrupt)가 발생했는지 확인하는 단계
- 인터럽트가 발생하면 CPU는 현재 작업을 중단하고 인터럽트 서비스 루틴(ISR)을 실행합니다.
- 인터럽트가 없으면 다음 명령어를 인출하는 과정으로 돌아갑니다.
즉, 명령어를 인출하고 실행한 뒤, 바로 다음 명령어를 가져오는 단계로 가는 것이 아니라, 인터럽트가 발생했는지 확인하고, 인터럽트가 발생했다면 인터럽트 서비스 루틴을 실행해야합니다.
인터럽트
인터럽트는 CPU가 프로그램을 실행하는 도중 외부 또는 내부에서 발생하는 이벤트를 처리하기 위해 현재 실행 중인 작업을 중단하고, 특정 루틴(인터럽트 서비스 루틴, ISR)을 실행하는 과정을 의미합니다.
인터럽트의 종류
- 외부 인터럽트(External Interrupt)
- 하드웨어적인 요인으로 발생
- 예: 키보드 입력, 마우스 클릭, 타이머 신호, 입출력 장치의 데이터 요청 등
- 내부 인터럽트(Internal Interrupt, 트랩)
- 프로그램 실행 중 예외적인 상황이 발생했을 때 발생
- 예: 0으로 나누기 오류(Divide by Zero), 오버플로우, 보호 오류(메모리 접근 오류) 등
- 소프트웨어 인터럽트(Software Interrupt)
- 명령어에 의해 발생하는 인터럽트
- 예: 시스템 콜(System Call) → 운영체제의 기능을 호출할 때 사용됨
인터럽트 처리 과정
- 인터럽트 발생 감지
- 명령어 실행 중 인터럽트가 발생하면 CPU는 이를 감지함.
- 현재 상태 저장(Save Context)
- 현재 실행 중이던 프로그램의 레지스터 값, PC 값 등을 저장하여 나중에 복구할 수 있도록 함.
- 인터럽트 벡터 테이블 확인
- 어떤 인터럽트 핸들러(ISR)를 실행해야 하는지 확인.
- 인터럽트 서비스 루틴(ISR) 실행
- 해당 인터럽트에 맞는 처리 루틴을 실행.
- 기존 작업 복귀(Restore Context)
- ISR 실행이 끝난 후 저장해둔 상태를 복구하고 중단했던 작업을 다시 수행.
이렇게 CPU는 명령어 사이클마다 인터럽트가 발생했는지 확인하고, 인터럽트가 발생하면 현재 명령어 수행을 중지하고 인터럽트 서비스 루틴을 실행 후 원래 작업으로 돌아가고, 이를 통해 CPU는 여러 작업을 효과적으로 처리할 수 있습니다.
'CS > 컴퓨터 구조' 카테고리의 다른 글
| 🖥️컴퓨터 구조 - 레지스터 (0) | 2025.03.11 |
|---|---|
| 🖥️컴퓨터 구조 - CPU의 제어 장치 (0) | 2025.03.07 |
| 🖥️컴퓨터 구조 - CPU의 ALU (0) | 2025.03.06 |
| 🖥️컴퓨터 구조 - 컴퓨터의 4가지 핵심 부품과 역할 (1) | 2025.03.05 |