Chapter04 CPU의 작동 원리
1 ALU와 제어장치
2 레지스터
3 명령어 사이클과 인터럽트
명령어 사이클 (Instruction Cycle)
프로그램은 수많은 명령어로 이루어져 있고, CPU는 이 명령어들을 하나씩 실행한다.
이때 프로그램 속 각각의 명령어들은 일정한 주기가 반복되며 실행되는데
이 주기를 명령어 사이클 이라고 한다.
CPU가 메모리에 있는 명령어를 가져와서 실행하는 일련의 과정이다. Fetch(가져오기) -> Decode(해독) -> Execute(실행) -> Store(저장)
인출 사이클 : 메모리에 있는 명령어를 CPU로 가져오는 단계
![]()
인출 사이클 과정
실행 사이클 : CPU로 가져오는 명령어를 실행하는 단계
일반적으로 인출과 실행 사이클을 반복하며 실행된다. 즉, CPU는 프로그램 속 명령어를 가져오고 실행하고를 반복한다.
간접 사이클 : 일부 명령어들은 명령어를 실행하기 위해서는 메모리에 접근을 한 번 더 하는 단계
명령어에 주어진 주소가 실제 데이터의 주소가 아니라, 그 주소를 저장한 메모리 위치를 의미할 때 실행된다.
인터럽트 (Interrupt)
인터럽트 : CPU가 수행중인 작업이 방해를 받아 잠시 중단될 때 발생하는 신호
CPU가 실행 중인 작업을 잠시 멈추고, 우선 처리해야 할 일이 생겼을 때 다른 작업을 먼저 수행하는 매커니즘이다.
동기 인터럽트 : CPU에 의해 발생하는 인터럽트이다.
CPU가 명령어들을 수행하다가 예상치 못한 상황에 마주쳤을 때 CPU가 실행하는 프로그래밍상의 오류와 같은 예외적인 상황에 마주쳤을 때 예외라고도 부른다.
비동기 인터럽트 : 주로 입출력장치에 의해 발생하는 인터럽트이다.
하드웨어 인터럽트라고도 부른다. ex) 키보드 입력, 마우스 클릭, 각종 타이머 완료 알림 등
![]()
하드웨어 인터럽트 처리 순서
- 입출력장치는 CPU에
인터럽트 요청 신호
를 보낸다.- CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인한다.
- CPU는 인터럽트 요청을 확인하고
인터럽트 플래그
를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인한다.- 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업한다.
- CPU는
인터럽트 벡터
를 참조하여인터럽트 서비스 루틴
을 실행한다.- 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행을 재개한다.
인터럽트 요청 신호 : 인터럽트를 하기전 입출력장치에서 인터럽트를 하기 전 보내는 요청 신호
인터럽트 플래그 : CPU가 인터럽트 요청을 수용하기 위해서 활성화되어 있어야 한다. 말그대로 인터럽트를 받아들일지, 무시할지를 결정하는 플래그 레지스터의 플래그이다.
인터럽트 서비스 루틴 : 인터럽트를 처리하기 위한 프로그램(인터럽트 핸들러)
CPU가 인터럽트 요청을 받아들이기로 했다면 CPU는 이 프로그램을 실행시킨다.
인터럽트가 발생하면 어떻게 행동해야 할지를 알려주는 프로그램이다.
인터럽트 벡터 : CPU가 수많은 인터럽트 서비스 루틴을 구분하기 위해 사용한다.
인터럽트 서비스 루틴을 식별하기 위한 정보이다.
인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있기 때문에 CPU는 인터럽트 벡터를 통해 특정 인터럽트 서비스 루틴을 처음부터 실행할 수 있다.
인터럽트는 사용자의 입력을 실시간으로 처리할 수 있게 하고
입출력 장치와 CPU 간의 효율적 협력을 가능하게 해주기 떄문에 중요하다.
결국 CPU는 이와 같은 과정을 반복해 나가며 프로그램을 실행한다고 볼 수 있다.
Leave a comment