본문 바로가기
CS

[컴퓨터구조] CPU는 어떻게 작동할까? - ALU

by 벨롭 2023. 10. 31.

 

CPU가 무엇인지 알지 못한다면 이전 포스팅을 먼저 보고 오시길 바란다.

2023.10.30 - [CS] - [컴퓨터구조] CPU와 메모리의 역할 개괄

 

[컴퓨터구조] CPU와 메모리의 역할 개괄

들어가며 컴퓨터 구조에 대한 자세한 내용을 살펴보기에 앞서서 머리 속에 컴퓨터에 대한 큰 그림이 필요하다는 생각이 들었다. 컴퓨터가 전체적으로 어떻게 구성되어 있고, 어떻게 연결되어

kyeong8139.tistory.com

 

 

 

 

 

 

 

 

 

트랜지스터와 논리회로

 

 

출처: https://www.101computing.net/creating-logic-gates-using-transistors/

 

CPU는 트랜지스터라고 하는 세 개의 발을 가진 반도체 소자를 이용해서 만든다. 회로도에서는 간단하게 나타내기 위해 왼 그림과 같이 간략하게 표현을 한다.

 

 

 

출처: https://www.101computing.net/creating-logic-gates-using-transistors

 

트랜지스터는 스위치와 비슷한 역할을 하는데, 트랜지스터의 Base부분에 특정 전압 이상의 전압을 가해주면 전류가 흐르게 된다.  (전류가 흐르지 않는 경우를 0, 전류가 흐르는 경우를 1이라고 보통 이야기한다)

 

 

 

이 트랜지스터를 어떻게 연결하느냐에 따라 여러 가지 논리 회로를 구성할 수 있다.

 

 

 

 

 

1. AND gate

 

원본 이미지 출처 : https://linuxhint.com/logic-and-gate-truth-table-tutorial/

 

 

 

위 회로도와 같이 트랜지스터 두 개를 연결해보자. A와 B 모두에 전압이 걸렸을 때만 Q 방향으로 전류가 흐르게 된다. A와 B중 하나라도 전압이 걸리지 않으면 전류가 흐르지 않는다.  

 

 

 

 

이러한 논리 회로를 AND Gate라고 하며, 오른쪽과 같이 간단하게 기호로 나타낼 수 있다.

 

 

 

 

 

 

 

 

 

 

2. OR 게이트

 

원본 이미지 출처   https://www.nature.com/articles/ncomms12068 

 

 

이렇게 트랜지스터를 연결하면 어떻게 될까? V1과 V2 중 어느 한 쪽에만 전압이 걸려도 Vout으로 전류가 흐르게 된다. 물론 V1과 V2 모두에 전압이 걸려도 전류가 흐른다.

 

 

이러한 논리 회로를 OR gate라고 하며, 오른쪽과 같이 기호로 간단하게 나타낸다.

 

 

 

 

 

 

 

 

 

3. Not 게이트

 

 

이번에는 회로의 OUT부분의 위치를 바꿔보자. 그러면 A에 전압이 걸리면 Q 부분으로는 전류가 흐르지 않고, A에 전압이 걸리지 않으면 Q부분으로 전류가 흐르게 된다.

 

 

위와 같은 회로를 NOT gate라고 하며, 기호로는 오른쪽과 같이 나타낸다. 

 

 

 

 

 

 

 

 

 

 

4. XOR 게이트

 

 

1) A = 0, B = 0

 

A와 B가 모두 0이므로 NOT 게이트를 지난 부분에는 전류가 흐르지만, AND게이트에서는 전류가 흐르지 않으므로 OUT인 Y 부분에는 전류가 흐르지 않는다.

 

 

 

 

 

 

2) A = 1, B = 0

 

A만 1일때는 전류가 흐른다.

 

 

 

 

 

 

3) A = 0, B = 1

 

B만 1일때도 전류가 흐른다.

 

 

 

 

 

 

4) A = 1, B = 1

 

A와 B 모두 전압이 걸리면 전류가 흐르지 않는다. 

 

 

 

표로 정리하면 왼쪽과 같으며, 이와 같은 게이트를 XOR 게이트라고 한다.

 

 

 

 

 

 

 

 

 

 

 

 

반가산기 (HALF ADDER)

 

 

CPU의 작동 원리를 알아보려 했는데 왜 갑자기 회로 이야기가 나온 것일까? 바로 이러한 회로를 이용하면 ALU의 연산 기능을 구현할  수 있기 때문이다. 

 

 

우선 두 비트를 더했을 때 계산 결과를 표로 정리하면 아래와 같다.

 

A B 올림수
0 0   0
0 1   1
1 0   1
1 1 1 0

 

 

 

 

만 떼어내서 표로 정리하면 아래와 같다.

 

A B
0 0 0
0 1 1
1 0 1
1 1 0

 

이 표를 보고 어느 게이트로 구현하면 되는지 생각해보자. 바로 XOR 게이트를 이용하면 두 수의 합을 구할 수 있다.

 

 

 

 

 

 

올림수만 떼어내서 표로 정리하면 아래와 같다.

 

A B 올림수
0 0 0
0 1 0
1 0 0
1 1 1

 

AND 게이트를 사용하면 올림수 또한 구할 수 있다.

 

 

 

 

즉, 두 비트의 덧셈을 하기 위해서는 아래와 같이 구현해주면 되는 것이다. (S = SUM, 합  /  C = CARRY, 올림수) 이와 같이 두 bit를 덧셈하는 가산기를 반가산기라고 한다.

 

 

 

 

 

 

 

 

 

 

전가산기

 

 

사실 제대로 된 가산을 하기 위해서는, 이전에 올림수가 있었는지까지 고려해주어야 한다.

 

 

위 회로도와 같이 반가산기(HALF ADDER)를 두 개  연결하는 방식으로 이전의 올림수인 C in 을 받아서 전가산기를 만들 수 있다.

 

 

1) C in이 0일때

 

C in  A B C out S
0 0 0 0 0
0 1 0 0 1
0 0 1 0 1
0 1 1 1 0

 

 

 

2) C in이 1일때

 

C in  A B C out S
1 0 0 0 1
1 1 0 1 0
1 0 1 1 1
1 1 1 1 1

 

 

 

 

 

 

 

 

 

 

여러 자리의 덧셈

 

 

피연산자가 1비트보다 크다면 어떻게 하면 좋을까? 바로 전가산기를 여러 개 연결하면 된다. C out은 다음 비트의 C in으로 전달된다. 전가산기를 8개 연결하면 피연산자가 8비트까지 가능하기 때문에, 피연산자의 범위가 1에서 256으로 커지게 되는 것이다.

 

 

 

 

 

 

 

 

 

 

 

ALU

 

 

CPU에는 트랜지스터가 수십억개가 들어있으며, 이러한 트랜지스터의 연결을 통해 ALU에서는 제어장치를 통한 제어신호와 레지스터를 통한 피연산자를 받아서 연산을 수행하고 결과값을 레지스터에 저장하는 기능이 가능해진다. 위에서는 가산기의 경우만을 설명하였지만, 뺄셈을 위한 보수기나 시프트 연산을 수행하는 시프터, 오버플로우를 검출하는 오버플로우 검출기 등의 다양한 회로들이 ALU 내부에 포함되어 있다.

 

 

 

ALU에서 실행하는 연산은 크게 산술연산과 논리연산 두 가지로 나눌 수 있다.

 

1. 산술연산

 

 

 

 

2. 논리연산

 

 

 

 

 

또한, 계산 결과와 더불어 여러가지 플래그를 내보내 플래그 레지스터에 저장시킨다. ALU가 내보내는 대표적인 플래그는 아래와 같다.

 

플래그 종류 의미
부호 플래그 연산한 결과의 부호를 나타낸다 (음수일 경우 1, 양수일 경우 0)
제로 플래그 연산 결과가 0인지 여부를 나타낸다. (0일 경우 제로 플래그는 1)
캐리 플래그 연산 결과 올림수(덧셈의 경우)나 빌림수(뺄셈의 경우)가 발생했는지 나타낸다.
오버플로우 플래그 오버플로우가 발생했는지를 나타낸다.
인터럽트 플래그 인터럽트가 가능한지를 나타낸다.
슈퍼바이저 플래그 커널 모드로 사용중인지, 사용자 모드로 사용중인지를 나타낸다.

 

 

 

 

 

 

 

 

 

 

* 참고 자료 : 이미지 하단 출처 링크 및 bRd 3D님 영상(https://www.youtube.com/watch?v=Fg00LN30Ezg), 혼자서 공부하는 컴퓨터 구조 + 운영체제