모던지 / 컴퓨터과학 / 컴퓨터의 원리 2강. 스위치 몇 개로 덧셈을 하다

컴퓨터의 원리 2강. 스위치 몇 개로 덧셈을 하다

컴퓨터 안에는 계산하는 기계가 없습니다. 켜지고 꺼지는 스위치가 있고, 그 배열이 우연히 덧셈처럼 보일 뿐입니다.

풀고 시작

문제 1. 두 비트를 더하는 회로에서 자리올림을 만들어 내는 게이트는 무엇일까요?
1과 1을 더해야 비로소 윗자리로 넘길 것이 생기므로 자리올림은 AND의 정의와 정확히 겹칩니다. XOR은 같은 회로에서 합 자리를 담당하는데, 1과 1을 더한 자리에 0이 남는 상황과 맞아떨어지죠. OR은 1과 1일 때도 1을 내지만 하나만 1이어도 1을 내므로 자리올림이 될 수 없습니다.

불이 남긴 대수, 섀넌이 찾은 용도

조지 불(George Boole)이 1854년에 『사고의 법칙 연구』를 냈을 때, 그의 목표는 기계가 아니라 인간의 사유였습니다. 그는 참과 거짓이라는 두 값만 갖는 대수를 만들어 논리 추론을 계산처럼 다뤘습니다. 이 작업은 80년 넘게 순수 논리학의 영역에 머물렀죠. 그러다 1937년, 스물한 살의 대학원생 클로드 섀넌이 석사 논문에서 폭탄을 던집니다. 전화 교환기의 계전기 스위치가 켜짐과 꺼짐이라는 두 상태를 가지므로, 불 대수의 참·거짓과 완벽히 대응한다는 관찰이었습니다. 이 한 줄로 논리학은 배선도가 되었습니다. 그때부터 회로를 설계한다는 것은 원하는 진리표를 만족하는 논리식을 세우고, 그 식을 게이트로 옮기는 작업이 됩니다. 조건문과 대우, 논리곱과 논리합이라는 도구는 수학 서가 논리와 증명에서 다룬 것과 같은 물건이고, 이 회로들은 그 규칙을 전압으로 구현한 것입니다.

트랜지스터는 그냥 스위치입니다

논리 게이트를 만들려면 "다른 신호가 켜고 끄는 스위치"가 필요합니다. 그 역할을 하는 것이 트랜지스터입니다. 오늘날 칩에 쓰이는 MOS 트랜지스터는 게이트 단자에 전압을 걸면 반도체 내부에 전하가 지나갈 통로가 생기고, 전압을 빼면 그 통로가 사라지는 소자입니다. 손가락 대신 전압이 누르는 스위치인 셈이죠. 비유를 여기서 멈추지 않는 것이 중요합니다. 실제로 일어나는 일은 전기장이 채널의 전하 밀도를 바꿔 소스와 드레인 사이의 전도도를 제어하는 것이고, 그래서 이 스위치는 기계식과 달리 마모 없이 초당 수십억 번을 여닫을 수 있습니다. 순수한 스위치 수준에서 보면 두 개를 직렬로 이었을 때 둘 다 켜져야 전류가 흐르니 AND가 되고, 병렬로 이으면 하나만 켜져도 흐르니 OR이 됩니다. 다만 실제 CMOS 회로는 출력이 반드시 뒤집혀 나오는 구조라서, 직렬 배치에서 자연스럽게 얻어지는 것은 AND가 아니라 NAND이고 병렬 배치에서 얻어지는 것은 NOR입니다. AND를 쓰려면 NAND 뒤에 인버터를 한 단 더 붙여야 하죠. 그래서 실제 공정은 NAND와 NOR를 기본 블록으로 삼습니다. 여기에 한 가지 성질이 겹칩니다. NAND만 반복해 조합하면 AND와 OR과 NOT을 전부 만들 수 있습니다. 이것을 기능적 완전성이라고 부릅니다.

반가산기에서 전가산기로

이제 덧셈을 조립해 봅시다. 한 자리 이진 덧셈의 진리표는 네 줄뿐입니다. 0+0은 합 0에 자리올림 0, 0+1과 1+0은 합 1에 자리올림 0, 1+1은 합 0에 자리올림 1입니다. 합 자리만 떼어 보면 두 입력이 다를 때만 1이니 XOR이고, 자리올림만 떼어 보면 둘 다 1일 때만 1이니 AND입니다. XOR 하나와 AND 하나, 이것이 반가산기(half adder)의 전부입니다. 덧셈이라는 산술이 논리 게이트 두 개로 무너지는 순간이죠. 다만 반가산기는 아랫자리에서 올라온 자리올림을 받지 못합니다. 그래서 반가산기 두 개와 OR 게이트 하나를 엮어 입력 세 개를 처리하는 전가산기(full adder)를 만듭니다. 전가산기를 자릿수만큼 옆으로 늘어놓고 자리올림 선을 다음 칸에 물리면 64비트 덧셈기가 완성됩니다. 곱셈은 덧셈과 자리 이동의 반복이고, 뺄셈은 보수를 취한 덧셈입니다. 결국 산술 연산 전체가 이 조립의 확장입니다.

기억하는 회로: 되먹임과 플립플롭

지금까지의 회로는 입력이 사라지면 출력도 사라집니다. 이런 회로를 조합 회로라고 부르는데, 이것만으로는 컴퓨터를 만들 수 없습니다. 어제 계산한 값을 오늘 쓰려면 기억이 필요하니까요. 해법은 뜻밖에 단순합니다. 게이트의 출력을 자기 입력 쪽으로 되돌려 묶는 것입니다. NOR 게이트 두 개를 서로의 입력에 교차로 연결하면, 한번 정해진 상태가 스스로를 계속 확인하며 유지됩니다. 이것이 SR 래치이고, 여기에 언제 값을 받아들일지 통제하는 회로를 붙인 것이 플립플롭(flip-flop)입니다. 플립플롭 하나가 1비트를 붙잡고, 이것을 여러 개 묶으면 레지스터가 되며, 그 위에 캐시와 주기억장치가 올라갑니다. 회로에 되먹임이 들어오는 순간 시간이 개입하고, 이런 회로를 순차 회로라고 부릅니다.

클록: 모두가 같은 박자에 움직이는 이유

되먹임이 생기면 새로운 문제가 따라옵니다. 신호가 게이트를 통과하는 데는 시간이 걸립니다. 이것을 전파 지연이라고 하는데, 경로마다 지연이 달라서 덧셈기 출력은 계산이 끝나기 전 잠시 엉뚱한 값으로 요동칩니다. 그 요동치는 값을 플립플롭이 덜컥 저장하면 계산은 망가집니다. 그래서 회로 전체에 일정한 박자를 뿌리는 신호를 넣습니다. 이것이 클록(clock)입니다. 플립플롭은 클록의 가장자리가 올 때만 입력을 붙잡고, 그 사이 시간 동안 조합 회로가 마음껏 요동치도록 내버려 둡니다. 여기서 컴퓨터 성능의 근본 제약이 나옵니다. 클록 주기는 회로에서 가장 느린 경로가 안정되는 시간보다 길어야 합니다. 이 가장 느린 경로를 임계 경로라고 부르고, 설계자들이 파이프라인으로 단계를 잘게 쪼개는 이유가 바로 이 경로를 짧게 만들기 위해서입니다. 클록을 무한정 올리지 못하는 이유와 그 결과는 3강과 이어집니다.

인출 문제

문제 1. 섀넌이 1937년 석사 논문에서 연결한 두 영역은 무엇일까요?
스위치가 켜짐과 꺼짐 두 상태만 갖는다는 점이 불 대수의 두 진리값과 정확히 대응한다는 관찰이 핵심이었습니다. 그 덕분에 회로 설계가 논리식 조작이 되었죠. 확률과 통신 잡음은 같은 사람이 11년 뒤 정보 이론에서 다룬 다른 주제입니다.
문제 2. NAND 게이트가 특별한 지위를 갖는 이유는 무엇일까요?
NAND는 기능적 완전성을 갖습니다. 즉 NAND만으로 모든 불 함수를 구성할 수 있죠. CMOS 회로에서 출력이 뒤집혀 나온다는 성질과 맞물려 NAND가 기본 블록 자리를 차지했습니다. 지연 시간은 공정과 배치에 따라 달라지는 문제이고, 기억은 NAND 하나가 아니라 게이트를 교차 연결한 되먹임 구조에서 생깁니다.
문제 3. 반가산기가 실제 여러 자리 덧셈에 그대로 쓰이지 못하는 이유는 무엇일까요?
반가산기는 입력이 두 개뿐이라 아랫자리의 자리올림을 받을 자리가 없습니다. 그래서 입력 세 개를 처리하는 전가산기를 만들고 이를 자릿수만큼 이어 붙이죠. 뺄셈은 보수를 취해 덧셈기로 처리하므로 별도의 결함이 아닙니다.
문제 4. 클록 주기를 마음대로 짧게 줄일 수 없는 근본 이유는 무엇일까요?
조합 회로는 신호가 통과하는 동안 잠시 엉뚱한 값으로 요동치고, 가장 느린 경로가 끝나야 출력이 확정됩니다. 임계 경로보다 짧은 주기로 값을 붙잡으면 계산 중간의 쓰레기 값을 저장하게 되죠. 그래서 설계자들은 파이프라인으로 단계를 잘게 나눠 임계 경로 자체를 줄입니다.

생각해볼 질문 (정답 없음)

  • 덧셈 회로는 덧셈의 의미를 전혀 모른 채 진리표만 만족시킵니다. 그렇다면 계산이 "옳다"는 판단은 회로 안에 있는 것일까요, 아니면 그 출력을 수로 읽기로 한 우리의 약속 안에 있는 것일까요.

이전: 컴퓨터의 원리 1강 · 다음: 컴퓨터의 원리 3강

모던지 · 궁금하면 모던지 GitHub · 2026-09-10