Chapter 03

트랜지스터와 논리 게이트

CPU는 수십억 개의 아주 작은 스위치로 만들어진다. 스위치 하나는 켜짐과 꺼짐밖에 모르지만, 몇 개를 엮으면 “둘 다 켜졌나?”를 판단하고, 수십 개를 엮으면 덧셈을 하고, 서로 꼬리를 물게 하면 기억까지 한다. 이 장에서는 스위치에서 계산기의 심장까지 한 계단씩 올라간다.

트랜지스터: 전기로 누르는 스위치

방의 전등 스위치는 손가락으로 누른다. 트랜지스터(transistor)는 손가락 대신 전기 신호로 누르는 스위치다. 다리가 세 개 있는데, 그중 하나인 게이트에 전압을 걸면 나머지 두 다리(소스와 드레인) 사이로 전류가 흐르고, 전압을 빼면 막힌다.

수도꼭지

수도관 중간에 꼭지가 있다고 생각하자. 꼭지를 열면 물(전류)이 흐르고 닫으면 멈춘다. 트랜지스터에서는 꼭지를 돌리는 손잡이가 또 다른 전기 신호다. 그래서 한 트랜지스터의 출력으로 다른 트랜지스터의 꼭지를 돌릴 수 있다. 이 연쇄가 컴퓨터를 가능하게 한다.

SIMULATOR

트랜지스터 스위치

게이트 전압
게이트에 전압을 주면 위쪽 전원(+)에서 아래쪽 땅(0 V)으로 전류가 흐르고 전구가 켜진다. 실제 칩에서는 전구 대신 다음 트랜지스터의 게이트가 연결된다.

요즘 CPU의 트랜지스터는 크기가 수십 나노미터 수준이다. 머리카락 굵기(약 80,000 nm)에 수천 개가 나란히 들어간다. 그리고 1초에 수십억 번 켜졌다 꺼질 수 있다. 사람이 누르는 스위치와 원리는 같지만 크기와 속도가 상상을 초월한다.

논리 게이트: 스위치로 판단하기

스위치 두 개를 일렬로(직렬) 이으면 둘 다 켜져야 전기가 통한다. “A 그리고 B”다. 이것을 AND 게이트라 한다. 스위치 두 개를 나란히(병렬) 이으면 하나만 켜져도 통한다. “A 또는 B”, OR 게이트다. 입력을 뒤집는 NOT 게이트도 트랜지스터 두 개로 만든다.

이런 기본 판단 회로를 논리 게이트(logic gate)라 하고, 입력의 모든 경우에 대한 출력을 정리한 표를 진리표라 한다. 아래에서 게이트를 바꿔 가며 입력 스위치를 눌러 보자.

SIMULATOR

논리 게이트 놀이터

게이트 종류
입력 (눌러서 켜고 끄기)
게이트한 줄 설명일상 속 예
AND모두 1일 때만 1안전 장치: 문이 닫혔고 그리고 시작 버튼이 눌렸을 때만 전자레인지 작동
OR하나라도 1이면 1현관 벨: 앞문 버튼 또는 뒷문 버튼
NOT뒤집기“문이 열려 있지 않으면 출발 가능”
XOR서로 다를 때만 1계단 위아래 두 스위치로 한 전등 켜고 끄기
NANDAND의 반대이것 하나만으로 다른 모든 게이트를 만들 수 있다
NAND 하나면 충분하다

NAND 게이트만 충분히 있으면 NOT(입력 두 개를 묶어서), AND(NAND 뒤에 NOT), OR까지 모두 만들 수 있다. 실제로 반도체 회로는 NAND, NOR처럼 트랜지스터 몇 개로 만들기 쉬운 게이트를 기본 블록으로 쓴다. SSD에 쓰이는 “NAND 플래시”라는 이름도 여기서 왔다.

게이트로 덧셈하기

2진수 한 자리끼리 더하는 경우는 네 가지뿐이다. 0+0=0, 0+1=1, 1+0=1, 1+1=10(2진수로 2, 즉 이 자리는 0이고 1이 올라간다). 잘 보면 규칙이 보인다.

게이트 두 개로 한 자리 덧셈기(반가산기)가 완성된다. 아랫자리에서 올라온 올림수까지 받아서 셋을 더하는 전가산기(full adder)는 게이트 다섯 개면 된다. 전가산기를 여러 개 이어 붙여 올림수를 옆으로 넘기면 몇 자리 덧셈이든 할 수 있다. 종이에 덧셈할 때 받아올림하는 것과 똑같다.

SIMULATOR

4비트 덧셈기: 올림수가 번져 가는 모습

A
B
A (10진수)—
B (10진수)—
합 (10진수)—
해볼 것: A = 0111(7), B = 0001(1)로 두면 올림수가 오른쪽에서 왼쪽으로 차례차례 번져 가는 것이 보인다. 각 칸은 앞 칸의 올림수가 도착해야 답이 확정된다. 그래서 자리 수가 많은 덧셈기일수록 느려지고, 실제 CPU는 올림수를 미리 내다보는 더 영리한 회로를 쓴다.

이것이 CPU 안의 계산 장치인 ALU(Arithmetic Logic Unit, 산술 논리 장치)의 출발점이다. 뺄셈은 2장에서 본 “2의 보수”로 덧셈으로 바꾸고, 곱셈은 덧셈과 자리 옮기기의 반복으로 만든다. 결국 컴퓨터의 모든 계산은 이 단순한 게이트들의 조합이다.

기억하기: 꼬리를 무는 회로

지금까지의 회로는 입력이 바뀌면 출력도 바로 바뀐다. 입력을 치우면 결과도 사라진다. 계산 결과를 기억하려면 어떻게 해야 할까?

비결은 출력을 다시 입력으로 되돌리는 것이다. NOR 게이트 두 개가 서로의 출력을 입력으로 받게 연결하면, 한번 정해진 상태가 스스로를 계속 유지한다. 이 회로를 래치(latch)라 한다. S(Set)를 잠깐 누르면 1을 기억하고, R(Reset)을 잠깐 누르면 0을 기억한다. 둘 다 떼어도 값은 그대로 남는다.

SIMULATOR

SR 래치: 1비트 기억 장치

버튼을 눌렀다 떼 보세요 (누르는 동안만 1)
S0
R0
기억된 값 Q0
밝은 선은 1(전압 있음), 흐린 선은 0이다. S를 눌렀다 떼도 Q가 1로 남는 것을 확인하자. 출력이 되돌아가 자기 자신을 붙잡고 있기 때문이다. 전원을 끄면 이 순환이 끊기므로 기억도 사라진다. RAM이 휘발성인 이유다.
서로 등을 받쳐 주는 두 사람

두 사람이 서로 “네가 앉아 있으면 나는 서 있을게”라고 약속했다고 하자. 한 명이 서 있으면 다른 한 명은 앉아 있고, 그 모습을 보고 처음 사람은 계속 서 있는다. 누군가 바깥에서 밀어 주기(S나 R) 전까지 이 상태는 영원히 유지된다.

래치를 8개 나란히 놓으면 1바이트를 기억하는 레지스터가 된다. CPU 안에서 지금 계산 중인 값을 쥐고 있는 “요리사의 손”이 바로 이것이다. 수십억 개의 기억 소자를 촘촘히 모으면 메모리가 된다(6장).

클럭: 모두가 같은 박자로

수십억 개의 게이트가 제각각 움직이면 혼란이 생긴다. 덧셈기에서 봤듯이 신호가 회로를 지나가는 데는 시간이 걸리고, 어떤 부분은 먼저, 어떤 부분은 나중에 답이 나온다. 그래서 컴퓨터에는 일정한 간격으로 똑딱이는 클럭(clock) 신호가 있다. 레지스터는 클럭이 0에서 1로 올라가는 순간에만 새 값을 받아들인다. 그 사이에 회로는 차분히 다음 답을 계산한다.

SIMULATOR

클럭과 카운터

 
4비트 레지스터가 클럭이 올라가는 순간(▲)마다 1씩 커진다. 1111(15) 다음에는 오버플로로 0000이 된다. 실제 CPU의 클럭은 이보다 약 10억 배 빠르다.

클럭 속도는 1초에 몇 번 똑딱이는지를 나타내며 단위는 헤르츠(Hz)다. 3 GHz CPU는 1초에 30억 번 박자를 맞춘다. 한 박자에 0.33 ns. 박자를 무작정 빠르게 할 수 없는 이유, 즉 가장 느린 회로가 답을 내기 전에 다음 박자가 오면 안 된다는 것과 열 문제는 5장에서 다룬다.

수십억 개의 스위치: 무어의 법칙

1971년 인텔의 첫 마이크로프로세서 4004에는 트랜지스터가 2,300개 있었다. 그 뒤로 약 2년마다 칩 하나에 들어가는 트랜지스터 수가 두 배로 늘었고, 이 경향을 인텔 공동 창업자의 이름을 따 무어의 법칙이라 부른다. 아래 그래프의 세로축은 한 칸에 10배씩 커지는 로그 눈금이다. 직선처럼 보인다는 것은 일정한 비율로 곱절씩 늘었다는 뜻이다.

CHART

칩 하나의 트랜지스터 수 (대표 제품)

값은 공개된 대표 제품의 대략적인 수치다. 50년 동안 약 1억 배 늘었다. 같은 기간 자동차가 이만큼 빨라졌다면 지금 차는 빛보다 빨리 달릴 것이다.

핵심 정리

  1. 트랜지스터는 전기 신호로 켜고 끄는 스위치다. 한 트랜지스터의 출력이 다른 트랜지스터를 조작할 수 있다.
  2. 스위치를 직렬로 이으면 AND, 병렬로 이으면 OR가 된다. 논리 게이트의 동작은 진리표로 정리한다.
  3. 덧셈은 XOR(이 자리 값)과 AND(올림수)로 만들고, 전가산기를 이어 붙이면 여러 자리 덧셈기가 된다. 이것이 ALU의 기초다.
  4. 출력을 입력으로 되돌리는 래치는 값을 스스로 유지해 1비트를 기억한다. 래치를 모으면 레지스터와 메모리가 된다.
  5. 클럭은 회로 전체의 박자를 맞춘다. 3 GHz는 1초에 30억 박자다.
  6. 무어의 법칙에 따라 트랜지스터 수는 약 2년마다 두 배씩 늘어 오늘날 칩 하나에 수백억 개가 들어간다.

확인 퀴즈

스위치 두 개를 직렬(일렬)로 연결하면 어떤 게이트처럼 동작하는가?

일렬로 놓인 두 스위치가 모두 닫혀야 전류가 흐른다. “A 그리고 B”다.

XOR 게이트에 A=1, B=1을 넣으면 출력은?

XOR는 두 입력이 서로 다를 때만 1이다. 그래서 1+1의 “이 자리 값”(0)을 계산하는 데 쓰인다.

한 자리 2진수 덧셈에서 올림수를 계산하는 게이트는?

두 입력이 모두 1일 때(1+1)만 올림수가 생긴다. 바로 AND다.

래치가 입력을 치운 뒤에도 값을 기억할 수 있는 이유는?

두 게이트가 서로의 출력을 붙잡는 피드백 구조다. 그래서 전원이 끊기면 순환이 멈추고 기억도 사라진다.

4 GHz CPU의 한 박자는 몇 나노초인가?

1초 ÷ 40억 = 0.25 × 10⁻⁹초 = 0.25 ns.