관리 메뉴

클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

CPU의 작동 원리 1 - ALU와 제어 장치 본문

알고리즘 및 자료 관리/컴퓨터 구조 & 운영체제

CPU의 작동 원리 1 - ALU와 제어 장치

huenuri 2024. 10. 15. 06:36

이번 시간부터 본격적으로 CPU에 대해서 들어가게 된다. CPU의 구성 요소 중 ALU와 제어 장치에 대해서 알아볼 것이다. ALU와 제어 장치가 어떤 정보를 내보내고 받아들이는지를 중심으로 두 장치의 역할을 학습한다.

 

 

CU는 메모리에 저장된 명령어를 읽어 들이고 해석하고 실행하는 장치이다. 그리고 CU 내부에는 계산을 담당하는 ALU, 명령어를 읽어 들이고 해석하는 제어장치, 작은 임시 저장 장치인 레지스터라는 구성 요소가 있다고 학습했었다.

이번에는 ALU와 제어 장치가 받아들이고 내보내는 정보를 기준으로 각 부품의 역할을 살펴보겠다.


 

 

 

 

ALU

 

계산을 하기 위해 무엇이 필요할까? 1+2를 계산할 때 1과 2라는 피연산자와 더하기라는 수행할 연산이 필요하듯 ALU가 계산하기 위해서는 피연산자와 수행할 연산이 필요하다.

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

 

ALU가 내보내는 정보

연산을 수행한 결과는 특정 숫자, 문자가 될 수 있고, 메모리 주소가 될 수도 있다. 이 결과값은 바로 메모리에 저장되지 않고 일시적으로 레지스터에 저장된다. CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 훨씬 느리다. ALU가 연산할 때마다 결과를 메모리에 저장한다면 CPU는 메모리에 자주 접근하게 되고, 이는 CPU가 프로그램 실행 속도를 늦출 수 있다. 그렇기에 ALU는 결과값을 메모리가 아닌 레지스터에 우선 저장한다.

 

 

 

 

ALU가 내보내는 또 다른 정보는 플래그가 있다. 이전 장에서는 "이진수만 봐서는 음수인지 양수인지 판단하기 어렵기 때문에 음수와 양수를 구분하기 위해 플래그를 사용한다"고 학습했다. 이처럼 ALU는 결과값뿐 아니라 연산 결과에 대한 추가적인 정 보를 내보내야 할 때가 있다.

가령 연산 결과가 음수일 때 ALU는 '방금 계산한 결과는 음수'라는 추가 정보를 내보낸다. 연산 결과가 연산 결과를 담을 레지스터보다 큰 상황을 오버플로우(overflow)라고 한다.

 

 

이러한  플래그는 CPU가 프로그램을 실행하는 도중 반드시 기억해야 하는 일종의 참고 정보이다. 그리고 플래그들은 플래그 레지스터라는 레지스터에 저장된다. 플래그 레지스터는 이름 그대로 플래그 값들을 저장하는 레지스터이다. 이  레지스터를 읽으면 연산 결과에 대한 추가적인 정보, 참고 정보를 얻을 수 있다.

 

예를 들어 플래그 레지스터가 위와 같은 구조를 가지고 있고, ALU가 연산을 수행한 직후 부호 플래그가 되었다면 연산 결과는 음수임을 알 수 있다.


 

 

 

 

제어 장치

제어장치는 제어 신호를 내보내고, 명령어를 해석하는 부품이다. 제어 신호는 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호라고 학습했었다. 제어장치는 CPU의 구성 요소 중 가장 정교하게 설계된 부품이라고 할 수 있다.

그래서 CPU 제조사마다 제어장치의 구현 방식이나 명령어를 해석하는 방식, 받아들이고 내보내는 정보에 조금씩 차이가 있다.

그럼 제어장치가 무엇을 받아들이고, 무엇을 내보내는지 학습해보자.

 

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

 

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

다만 "컴퓨터의 모든 부품이 클럭 신호에 맞춰 작동한다"는 말을 "컴퓨터의 모든 부품이 한 클럭마다 작동한다"라고 이해하면 안 된다. 컴퓨터 부품들은 클럭이라는 박자에 맞춰 작동할 뿐 한 박자마다 작동하는 건 아니다.


 

 

 

2.  '해석해야 할 명령어'를 받아들인다.

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

 

 

3. 플래그 레지스터 속 플래그 값을 받아들인다

플래그는 ALU 연산에 대한 추가적인 상태 정보이다. 제어장치가 제어 신호를 통해 컴퓨터 부품들을 제어할 때 이 중요한 참고 사항을 무시하면 안 될 것이다. 그렇기에 제어장치는 플래그 값을 받아들이고 이를 참고하여 제어 신호를 발생한다.

 

 

4. 시스템 버스, 그중에서 제어 버스로 전달된 제어 신호를 받아들인다.

제어 신호는 CPU뿐만 아니라 입출력장치를 비롯한 CPU 외부 장치도 발생시킬 수 있다. 제어장치는 제어 버스를 통해 외부로부터 전달된 제어 신호를 받아들이기도 한다.

 

 

 

 

이제 제어 장치가 내보내는 정보를 알아보자. 여기에는 크게 CPU 외부에 전달하는 제어 신호와 CPU 내부에 전달하는 제어 신호가 있다. 제어장치가 CPU 외부에 제어 신호를 전달한다는 말은 제어 버스로 제어 신호를 내보낸다는 말과 같다. 이러한 제어 신호에는 크게 메모리에 전달하는 제어 신호와 입출력장치에 전달하는 제어 신호가 있다.

 

제어 장치가 메모리에 저장된 값을 읽거나 메모리에 새로운 값을 쓰고 싶다면 메모리로 제어 신호를 내보낸다. 그리고 제어장치가 입출력장치의 값을 읽거나 입출력장치에 새로운 값을 쓰고 싶을 때는 입출력장치로 제어 신호를 내보낸다.


 

 

 

 

단원 마무리하기

 

 

 

 

 

3번 문제는 조금 어려워서 힌트를 참고해서 풀었다. 1번 문제 역시 많이 어려웠다. 부호 플래그가 음수라고 했으니 결과값이 음수라는 것을 알 수 있다. 101(2)은 011(2)에 2의 보수를 취해서 음수로 표현한 값이다. 왜 2의 보수를 취하는지 한참 생각해 보았는데, 이건 음수는 무조건 2의 보수로 접근한다는 것을 기억해야 한다.

그러면 011(2)의 10진수 값을 구하면 3이고, 여기에 부호를 붙여 -3이 답이 된다.

 

3번 풀이는 다음과 같다. 제어장치는 플래그 레지스터로부터 플래그 값을 받아들이고, 명령어 레지스터로부터 현재 해석할 명령어를 받아들인다. 그리고 제어 버스를 통해 제어 신호를 내보낸다.

 


 

 

 

학습을 마치고

이렇게 해서 오늘 새벽에 3시간 동안 컴퓨터 구조에 대해서 학습해 보았다. 어제도 수학 공부할 시간이 너무 짧아서 2문제밖에 풀지 못했는데 오늘도 풀 시간이 별로 없을 것 같다. 그래도 조금이라도 해볼 생각이다.

레지스터부터는 아침에 공부해 볼 것이다.