명령어 사이클(instruction cycle)
프로그램은 수많은 명령어들로 이루어져 있고, CPU는 이 명령어들을 하나씩 실행한다. 이때 프로그램 속 각각의 명령어들은 일정한 주기로 반복되며 실행되는데, 이 주기를 명령어 사이클(instruction cycle)이라고 한다.
- 인출 사이클(fetch cycle): 메모리에 있는 명령어를 CPU로 가지고 오는 단계
- 실행 사이클(execution cycle): CPU로 가져온 명령어를 실행하는 단계; 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시킨다.
- 간접 사이클(indirect cycle): 어떤 명령어는 인출과 실행 사이클만으로 실행되고, 어떤 명령어는 인출, 간접, 실행 사이클을 거쳐 실행된다.
인터럽트(interrupt)
동기 인터럽트(synchronous interrupt) = 예외(exception)
: CPU에 의해 발생하는 인터럽트
- CPU가 명령어들을 수행하다가 예상치 못한 상황에 마주쳤을 때, 가령 CPU가 실행하는 프로그래밍상의 오류와 같은 예외적인 상황에 마주쳤을 때 발생하는 인터럽트
비동기 인터럽트(asynchronous interrupt) = 하드웨어 인터럽트(hardware interrupt)
: 주로 입출력장치에 의해 발생하는 인터럽트
※ 하드웨어 인터럽트 처리 순서
- 입출력장치는 CPU에 인터럽트 요청 신호를 보낸다.
- CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인한다.
- CPU는 인터럽트 요청을 확인하고, 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인한다.
- 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업한다.
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행한다.
- 인터럽트 서비스 루틴 실행이 끝나면 (4)에서 백업해 둔 작업을 복구하여 실행을 재개한다.
▶ 인터럽트 요청 신호
: CPU에게 "지금 인터럽트 해도 되나요?" 물어보는 것
▶ 인터럽트 플래그(interrupt flag)
: 하드웨어 인터럽트를 받아들일지, 무시할지를 결정하는 플래그
- 막을 수 있는 인터럽트(maskable interrupt)
- 막을 수 없는 인터럽트(non maskable interrupt)
▶ 인터럽트 서비스 루틴(ISR; Interrupt Service Routine) = 인터럽트 핸들러(interrupt handler)
: 인터럽트를 처리하기 위한 프로그램
▶ 인터럽트 벡터(interrupt vector)
: 인터럽트 서비스 루틴을 식별하기 위한 정보
- 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있다.
예외의 종류
※ 인터럽트(Interrupt)
▶ 동기 인터럽트(synchronous interrupt) = 예외(exception)
- 폴트(fault): 예외를 처리한 직후 예외가 발생한 명령어부터 실행을 재개하는 예외
- 트랩(trap): 예외를 처리한 직후 예외가 발생한 명령어의 다음 명령어부터 실행을 재개하는 예외
- 중단(abort): CPU가 실행 중인 프로그램을 강제로 중단시킬 수밖에 없는 심각한 오류를 발견했을 때 발생하는 예외
- 소프트웨어 인터럽트(software interrupt)
▶ 비동기 인터럽트(asynchronous interrupt)
- 막을 수 있는 인터럽트(maskable interrupt)
- 막을 수 없는 인터럽트(not maskable interrupt)
'컴퓨터구조' 카테고리의 다른 글
[혼자 공부하는 컴퓨터구조] 06. 메모리와 캐시 메모리 (0) | 2023.07.29 |
---|---|
[혼자 공부하는 컴퓨터구조] 05. CPU 성능 향상 기법 (0) | 2023.07.29 |
[혼자 공부하는 컴퓨터구조] 04-2. 레지스터 (0) | 2023.07.27 |
[혼자 공부하는 컴퓨터구조] 04-1. ALU와 제어장치 (0) | 2023.07.27 |
[혼자 공부하는 컴퓨터구조] 03-2. 명령어의 구조 (0) | 2023.07.27 |