트랜지스터와 논리 게이트
CPU는 수십억 개의 아주 작은 스위치로 만들어진다. 스위치 하나는 켜짐과 꺼짐밖에 모르지만, 몇 개를 엮으면 “둘 다 켜졌나?”를 판단하고, 수십 개를 엮으면 덧셈을 하고, 서로 꼬리를 물게 하면 기억까지 한다. 이 장에서는 스위치에서 계산기의 심장까지 한 계단씩 올라간다.
- 트랜지스터가 “전기로 조작하는 스위치”라는 것을 이해한다.
- AND, OR, NOT, XOR 게이트의 동작을 진리표로 설명한다.
- 게이트를 조합해 2진수 덧셈기를 만드는 원리를 따라간다.
- 출력이 다시 입력으로 돌아오는 구조(래치)로 1비트를 기억하는 방법을 안다.
- 클럭이 회로 전체의 박자를 맞추는 이유와 GHz의 의미를 안다.
트랜지스터: 전기로 누르는 스위치
방의 전등 스위치는 손가락으로 누른다. 트랜지스터(transistor)는 손가락 대신 전기 신호로 누르는 스위치다. 다리가 세 개 있는데, 그중 하나인 게이트에 전압을 걸면 나머지 두 다리(소스와 드레인) 사이로 전류가 흐르고, 전압을 빼면 막힌다.
수도관 중간에 꼭지가 있다고 생각하자. 꼭지를 열면 물(전류)이 흐르고 닫으면 멈춘다. 트랜지스터에서는 꼭지를 돌리는 손잡이가 또 다른 전기 신호다. 그래서 한 트랜지스터의 출력으로 다른 트랜지스터의 꼭지를 돌릴 수 있다. 이 연쇄가 컴퓨터를 가능하게 한다.
트랜지스터 스위치
요즘 CPU의 트랜지스터는 크기가 수십 나노미터 수준이다. 머리카락 굵기(약 80,000 nm)에 수천 개가 나란히 들어간다. 그리고 1초에 수십억 번 켜졌다 꺼질 수 있다. 사람이 누르는 스위치와 원리는 같지만 크기와 속도가 상상을 초월한다.
논리 게이트: 스위치로 판단하기
스위치 두 개를 일렬로(직렬) 이으면 둘 다 켜져야 전기가 통한다. “A 그리고 B”다. 이것을 AND 게이트라 한다. 스위치 두 개를 나란히(병렬) 이으면 하나만 켜져도 통한다. “A 또는 B”, OR 게이트다. 입력을 뒤집는 NOT 게이트도 트랜지스터 두 개로 만든다.
이런 기본 판단 회로를 논리 게이트(logic gate)라 하고, 입력의 모든 경우에 대한 출력을 정리한 표를 진리표라 한다. 아래에서 게이트를 바꿔 가며 입력 스위치를 눌러 보자.
논리 게이트 놀이터
| 게이트 | 한 줄 설명 | 일상 속 예 |
|---|---|---|
| AND | 모두 1일 때만 1 | 안전 장치: 문이 닫혔고 그리고 시작 버튼이 눌렸을 때만 전자레인지 작동 |
| OR | 하나라도 1이면 1 | 현관 벨: 앞문 버튼 또는 뒷문 버튼 |
| NOT | 뒤집기 | “문이 열려 있지 않으면 출발 가능” |
| XOR | 서로 다를 때만 1 | 계단 위아래 두 스위치로 한 전등 켜고 끄기 |
| NAND | AND의 반대 | 이것 하나만으로 다른 모든 게이트를 만들 수 있다 |
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이 올라간다). 잘 보면 규칙이 보인다.
- 이 자리의 값(합)은 두 입력이 서로 다를 때 1이다. → XOR
- 올림수는 두 입력이 모두 1일 때 1이다. → AND
게이트 두 개로 한 자리 덧셈기(반가산기)가 완성된다. 아랫자리에서 올라온 올림수까지 받아서 셋을 더하는 전가산기(full adder)는 게이트 다섯 개면 된다. 전가산기를 여러 개 이어 붙여 올림수를 옆으로 넘기면 몇 자리 덧셈이든 할 수 있다. 종이에 덧셈할 때 받아올림하는 것과 똑같다.
4비트 덧셈기: 올림수가 번져 가는 모습
이것이 CPU 안의 계산 장치인 ALU(Arithmetic Logic Unit, 산술 논리 장치)의 출발점이다. 뺄셈은 2장에서 본 “2의 보수”로 덧셈으로 바꾸고, 곱셈은 덧셈과 자리 옮기기의 반복으로 만든다. 결국 컴퓨터의 모든 계산은 이 단순한 게이트들의 조합이다.
기억하기: 꼬리를 무는 회로
지금까지의 회로는 입력이 바뀌면 출력도 바로 바뀐다. 입력을 치우면 결과도 사라진다. 계산 결과를 기억하려면 어떻게 해야 할까?
비결은 출력을 다시 입력으로 되돌리는 것이다. NOR 게이트 두 개가 서로의 출력을 입력으로 받게 연결하면, 한번 정해진 상태가 스스로를 계속 유지한다. 이 회로를 래치(latch)라 한다. S(Set)를 잠깐 누르면 1을 기억하고, R(Reset)을 잠깐 누르면 0을 기억한다. 둘 다 떼어도 값은 그대로 남는다.
SR 래치: 1비트 기억 장치
두 사람이 서로 “네가 앉아 있으면 나는 서 있을게”라고 약속했다고 하자. 한 명이 서 있으면 다른 한 명은 앉아 있고, 그 모습을 보고 처음 사람은 계속 서 있는다. 누군가 바깥에서 밀어 주기(S나 R) 전까지 이 상태는 영원히 유지된다.
래치를 8개 나란히 놓으면 1바이트를 기억하는 레지스터가 된다. CPU 안에서 지금 계산 중인 값을 쥐고 있는 “요리사의 손”이 바로 이것이다. 수십억 개의 기억 소자를 촘촘히 모으면 메모리가 된다(6장).
클럭: 모두가 같은 박자로
수십억 개의 게이트가 제각각 움직이면 혼란이 생긴다. 덧셈기에서 봤듯이 신호가 회로를 지나가는 데는 시간이 걸리고, 어떤 부분은 먼저, 어떤 부분은 나중에 답이 나온다. 그래서 컴퓨터에는 일정한 간격으로 똑딱이는 클럭(clock) 신호가 있다. 레지스터는 클럭이 0에서 1로 올라가는 순간에만 새 값을 받아들인다. 그 사이에 회로는 차분히 다음 답을 계산한다.
클럭과 카운터
클럭 속도는 1초에 몇 번 똑딱이는지를 나타내며 단위는 헤르츠(Hz)다. 3 GHz CPU는 1초에 30억 번 박자를 맞춘다. 한 박자에 0.33 ns. 박자를 무작정 빠르게 할 수 없는 이유, 즉 가장 느린 회로가 답을 내기 전에 다음 박자가 오면 안 된다는 것과 열 문제는 5장에서 다룬다.
수십억 개의 스위치: 무어의 법칙
1971년 인텔의 첫 마이크로프로세서 4004에는 트랜지스터가 2,300개 있었다. 그 뒤로 약 2년마다 칩 하나에 들어가는 트랜지스터 수가 두 배로 늘었고, 이 경향을 인텔 공동 창업자의 이름을 따 무어의 법칙이라 부른다. 아래 그래프의 세로축은 한 칸에 10배씩 커지는 로그 눈금이다. 직선처럼 보인다는 것은 일정한 비율로 곱절씩 늘었다는 뜻이다.
칩 하나의 트랜지스터 수 (대표 제품)
핵심 정리
- 트랜지스터는 전기 신호로 켜고 끄는 스위치다. 한 트랜지스터의 출력이 다른 트랜지스터를 조작할 수 있다.
- 스위치를 직렬로 이으면 AND, 병렬로 이으면 OR가 된다. 논리 게이트의 동작은 진리표로 정리한다.
- 덧셈은 XOR(이 자리 값)과 AND(올림수)로 만들고, 전가산기를 이어 붙이면 여러 자리 덧셈기가 된다. 이것이 ALU의 기초다.
- 출력을 입력으로 되돌리는 래치는 값을 스스로 유지해 1비트를 기억한다. 래치를 모으면 레지스터와 메모리가 된다.
- 클럭은 회로 전체의 박자를 맞춘다. 3 GHz는 1초에 30억 박자다.
- 무어의 법칙에 따라 트랜지스터 수는 약 2년마다 두 배씩 늘어 오늘날 칩 하나에 수백억 개가 들어간다.
확인 퀴즈
스위치 두 개를 직렬(일렬)로 연결하면 어떤 게이트처럼 동작하는가?
XOR 게이트에 A=1, B=1을 넣으면 출력은?
한 자리 2진수 덧셈에서 올림수를 계산하는 게이트는?
래치가 입력을 치운 뒤에도 값을 기억할 수 있는 이유는?
4 GHz CPU의 한 박자는 몇 나노초인가?