1. ALU

ALU(Arithmetic Logic Unit)는 계산하는 부품이라고 검퓨터 구조에서 배웠다. 1+2를 계산할 때 1과 2라는 피연산자와 더하기라는 수행할 연산이 필요하듯 ALU가 계산을 하기 위해서는 피연산자와 수행할 연산이 필요하다.

그래서 ALU는 레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아들인다. ALU는 레지스터와 제어장치로부터 받아들인 피연산자와 제어 신호로 산술 연산, 논리 연산 등 다양한 연산을 수행한다.

Untitled

연산을 수행한 결과는 특정 숫자나 문자가 될 수도 있고, 메모리 주소가 될 수도 있다. 그리고 이 결과값은 바로 메모리에 저장되지 않고 일시적으로 레지스터에 저장된다.

CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 훨씬 느리다. ALU가 연산할 때마다 결과를 메모리에 저장한다면 당연하게도 CPU는 메모리에 자주 접근하게 되고, 이는 CPU가 프로그램 실행 속도를 늦출 수 있다. 그래서 ALU의 결과값을 메모리가 아닌 레지스터에 우선 저장하는 것이다.

ALU의 출력값을 보면 플래그도 전달하는 것을 볼 수 있다. 플래그는 연산 결과에 대한 추가적인 상태 정보를 제공한다. ALU가 내보내는 대표적인 플래그는 아래와 같다.

Untitled

이러한 플래그는 CPU가 프로그램을 실행하는 도중 반드시 기억해야 하는 일종의 참고 정보이다. 그리고 플래그들은 플래그 레지스터라는 레지스터에 저장된다.

2. 제어장치

제어장치는 제어 신호를 내보내고, 명령어를 해석하는 부품이고, 제어 신호는 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기신호라고 설명했다. 그렇다면 이제는 제어신호가 무엇을 받아들이고, 무엇을 내보내는지 알아보도록 하자. 참고로 CPU 제조사마다 제어장치의 구현방식이나 명령어 해석 방식, 받아들이고 내보내는 정보에는 조금씩 차이가 있다. 이번 챕터에서는 제어장치가 받아들이고 내보내는 가장 대표적인 정보에만 초점을 맞출 것이다.

Untitled

먼저 제어장치가 받아들이는 정보는 다음과 같다.

1) 제어장치는 클럭 신호를 받아들인다.

클럭(clock)이란 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위이다. 클럭 주기에 맞춰 한 레지스터에서 다른 레지스터로 데이터가 이동되거나, ALU에서 연산이 수행되거나, CPU가 메모리에 저장된 명령어를 읽어들인다.

2) 제어장치는 ‘해석해야 할 명령어를 받아들인다.

CPU가 해석해야 할 명령어는 명령어 레지스터라는 특별한 레지스터에 저장된다. 제어장치는 이 명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤, 제어 신호를 발생시켜 컴퓨터 부품들에 수행해야 할 내용을 알려준다.