Chapter04 CPU의 작동 원리

1 ALU와 제어장치


2 레지스터


3 명령어 사이클과 인터럽트


명령어 사이클 (Instruction Cycle)

프로그램은 수많은 명령어로 이루어져 있고, CPU는 이 명령어들을 하나씩 실행한다.
이때 프로그램 속 각각의 명령어들은 일정한 주기가 반복되며 실행되는데
이 주기를 명령어 사이클 이라고 한다.
CPU가 메모리에 있는 명령어를 가져와서 실행하는 일련의 과정이다. Fetch(가져오기) -> Decode(해독) -> Execute(실행) -> Store(저장)


인출 사이클 : 메모리에 있는 명령어를 CPU로 가져오는 단계
인출사이클
인출 사이클 과정


실행 사이클 : CPU로 가져오는 명령어를 실행하는 단계
실행사이클


일반적으로 인출과 실행 사이클을 반복하며 실행된다. 즉, CPU는 프로그램 속 명령어를 가져오고 실행하고를 반복한다.
인증_실행


간접 사이클 : 일부 명령어들은 명령어를 실행하기 위해서는 메모리에 접근을 한 번 더 하는 단계
명령어에 주어진 주소가 실제 데이터의 주소가 아니라, 그 주소를 저장한 메모리 위치를 의미할 때 실행된다.
간접사이클


인터럽트 (Interrupt)

인터럽트 : CPU가 수행중인 작업이 방해를 받아 잠시 중단될 때 발생하는 신호
CPU가 실행 중인 작업을 잠시 멈추고, 우선 처리해야 할 일이 생겼을 때 다른 작업을 먼저 수행하는 매커니즘이다.
인터럽트


동기 인터럽트 : CPU에 의해 발생하는 인터럽트이다.
CPU가 명령어들을 수행하다가 예상치 못한 상황에 마주쳤을 때 CPU가 실행하는 프로그래밍상의 오류와 같은 예외적인 상황에 마주쳤을 때 예외라고도 부른다.
동기인터럽트


비동기 인터럽트 : 주로 입출력장치에 의해 발생하는 인터럽트이다.
하드웨어 인터럽트라고도 부른다. ex) 키보드 입력, 마우스 클릭, 각종 타이머 완료 알림 등
비동기인터럽트
비동기인터럽트

인터럽트


하드웨어 인터럽트 처리 순서

  1. 입출력장치는 CPU에 인터럽트 요청 신호를 보낸다.
  2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인한다.
  3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인한다.
  4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업한다.
  5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행한다.
  6. 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행을 재개한다.

인터럽트 요청 신호 : 인터럽트를 하기전 입출력장치에서 인터럽트를 하기 전 보내는 요청 신호
인터럽트요청신호

인터럽트 플래그 : CPU가 인터럽트 요청을 수용하기 위해서 활성화되어 있어야 한다. 말그대로 인터럽트를 받아들일지, 무시할지를 결정하는 플래그 레지스터의 플래그이다.
플래그레지스터

인터럽트 서비스 루틴 : 인터럽트를 처리하기 위한 프로그램(인터럽트 핸들러)
CPU가 인터럽트 요청을 받아들이기로 했다면 CPU는 이 프로그램을 실행시킨다.
인터럽트가 발생하면 어떻게 행동해야 할지를 알려주는 프로그램이다.
인터럽트서비스루틴

인터럽트 벡터 : CPU가 수많은 인터럽트 서비스 루틴을 구분하기 위해 사용한다.
인터럽트 서비스 루틴을 식별하기 위한 정보이다.
인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있기 때문에 CPU는 인터럽트 벡터를 통해 특정 인터럽트 서비스 루틴을 처음부터 실행할 수 있다.
인터럽트벡터


인터럽트는 사용자의 입력을 실시간으로 처리할 수 있게 하고
입출력 장치와 CPU 간의 효율적 협력을 가능하게 해주기 떄문에 중요하다.


결국 CPU는 이와 같은 과정을 반복해 나가며 프로그램을 실행한다고 볼 수 있다. 사이클

Leave a comment