1비트 메모리: RAM의 원자, 그리고 릴레이로 컴퓨터 만들기의 마지막 이야기
1비트 릴레이 메모리 셀을 만듭니다. Write가 high일 때 저장하고 low일 때 유지합니다. 릴레이에서 RAM까지의 여정과 Zuse의 Z3, Aiken의 Mark I, Grace Hopper의 첫 컴퓨터 버그도 되짚어 봅니다.
이전 글에서는 Data 입력과 Write-enable 선을 받아 Write가 활성화된 순간 Data에서 본 값을 충실하게 저장하는 회로인 D latch를 만들었습니다. 릴레이 세계에서 제어 가능한 메모리 슬롯에 해당하며, 완전하고 재사용 가능한 메모리 셀에 거의 다다른 회로였습니다. 거의 그렇다는 말에는 이유가 있습니다. 포장할 작은 조각 하나가 남아 있었습니다.
이 글은 릴레이로 컴퓨터 만들기 시리즈의 18편이자 마지막 목적지입니다. 메모리 셀을 완성하고 그 정체에 맞는 이름을 붙인 다음, 지난 열일곱 편이 줄곧 향해 온 일을 해 보겠습니다. 함께 올라온 사다리의 모든 단을, 딸깍거리는 스위치 하나에서 저장된 비트에 이르기까지 차례로 되짚어 봅니다.
RAM의 원자에 오신 것을 환영합니다.
1비트 메모리 셀 포장하기
D latch가 어려운 일은 이미 모두 해냅니다. Write-enable 선(흔히 EN 또는 WE라고 부릅니다)과 Data 선(D)을 갖고, Write가 high인 동안 마지막으로 본 D 값을 유지합니다. 하지만 가공하지 않은 latch는 교차 결합 릴레이 feedback과 직접 연결된 출력 pin 같은 내부 topology를 그대로 드러내며, 사용자가 문제를 일으킬 수 있는 방식으로 배선하기 쉽게 만듭니다.
1비트 메모리 셀은 D latch를 다음과 같은 깔끔한 인터페이스 계약 안에 포장한 것입니다.
- Write — 단일 제어선입니다. High(1)로 활성화하면 쓰고, low(0)로 두면 읽거나 값을 그대로 유지합니다.
- Data — 저장하려는 비트로, 0 또는 1입니다.
- Q — 저장된 출력입니다. Write가 1인 동안 Data를 반영하고, Write가 다시 0으로 내려가면 마지막 값을 유지합니다.
교차 결합 feedback과 금지 상태를 막는 inverter를 비롯한 나머지는 모두 내부에 봉인됩니다. 사용자가 그것을 볼 필요는 없습니다. 이 셀의 상태표는 놀랄 만큼 간단합니다.
| Write | Data | Q (다음 상태) |
|---|---|---|
| 0 | — | Q (유지) |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Write가 0인 행에서 Data 열에 표시된 대시가 핵심입니다. Write가 low이면 Data는 아무 상관이 없습니다. 셀은 듣고 있지 않습니다. 마지막으로 들은 값을 유지하며, 전원이 공급되는 동안 계속 유지합니다.
이 상태표로는 말할 수 없는 것이 있습니다. 마지막으로 무엇을 썼는지 모르면 현재 Q가 무엇인지 알 수 없습니다. 메모리에는 상태가 있습니다. 현재 입력만으로 결정되는 순수 함수가 아니라 입력과 이력이 함께 결정하는 함수입니다. 이것이 조합 회로(AND, OR, XOR, adder)와 순차 회로(latch, flip-flop, register, RAM)를 가르는 근본적인 차이입니다. 조합 회로에는 상태가 없습니다. 입력을 넣고 출력을 읽으면 끝입니다. 순차 회로는 과거를 현재로 이어 옵니다. 여러분의 latch는 기억합니다.
확장하기: 비트 하나에서 컴퓨터 하나로
여기에서 추상화가 그 무게만큼의 가치를 발휘합니다.
이 셀 여덟 개에 동시에 쓰면 프로세서가 한 번의 연산으로 불러오고 수정하고 저장할 수 있는 0부터 255까지의 수, 즉 byte 하나가 저장됩니다. 1천 byte는 kilobyte, 100만 byte는 megabyte, 10억 byte는 gigabyte입니다. 현대 컴퓨터는 우표 크기의 칩 하나에 이 셀을 수백억 개 담고 초당 수백만 번씩 Write와 Hold 상태를 오갑니다.
모든 셀은 위의 두 동작으로 이루어진 동일한 상태표를 따릅니다. 릴레이를 트랜지스터 크기로 줄이고 1제곱센티미터 실리콘에 40억 개를 넣어도 그 표는 달라지지 않습니다. 스위치는 작아졌지만 논리는 움직이지 않았습니다.
직접 해 보기
아래에는 D latch를 깔끔한 1비트 메모리 셀로 포장한 memory-bit 셀이 있습니다. 브라우저에서 실제 릴레이 시뮬레이션으로 동작합니다. 애니메이션이 아닙니다. 릴레이 접점이 물리적으로 전환되고 전류가 흐르며 Q가 실제 상태를 유지합니다.
다음 순서를 의식적으로 따라 해 보세요.
-
1을 저장합니다. Data = 1로 설정한 다음 Write = 1로 활성화합니다. 셀이 latch되고 Q가 1이 됩니다. 이제 Write를 다시 0으로 해제합니다. Data는 더 이상 상관없습니다. 값을 흔들거나 0으로 바꾸거나 머릿속으로 연결을 끊어 보세요. Q는 1에 머뭅니다. 방금 비트 하나를 저장했습니다.
-
0으로 덮어씁니다. Data = 0으로 설정한 다음 Write를 다시 잠깐 high로 pulse합니다. Q가 0으로 내려갑니다. Write를 해제해도 Q는 0을 유지합니다. 방금 비트를 덮어썼습니다.
-
입력이 없어도 유지되는지 확인합니다. Write와 Data를 모두 0으로 둡니다. Q는 계속 0입니다. 셀이 입력에 반응하는 것이 아니라 마지막으로 알려 준 내용을 기억하고 있습니다.
방금 손으로 비트 하나를 저장했습니다. 이제 똑같은 셀이 100만 개 있다고 상상해 보세요. 각 셀은 저마다의 0 또는 1을 묵묵히 유지하고, 자신의 Write 선이 활성화될 때까지 외부 세계의 말에 귀를 닫습니다. 바로 이것이 RAM입니다.
여러분이 올라온 사다리
이 시리즈에는 1편에서 릴레이가 처음 딸깍인 순간부터 계획이 있었습니다. 이와 같은 회로로 움직였던 실제 릴레이 컴퓨터를 살펴보기 전에 모든 단을 함께 되짚어 봅시다. 한눈에 놓고 보면 그 궤적은 놀랍습니다.
1편 — 릴레이 자체. 전기가 제어하는 스위치입니다. Coil이 armature를 끌어당기고, armature가 접점을 움직여 한 회로가 다른 회로의 스위치를 던집니다. Normally-open으로 배선하면 buffer이고 normally-closed로 배선하면 inverter입니다. 그 딸깍 소리는 그저 듣기 좋은 소리가 아니었습니다. 모든 것의 씨앗이었습니다.
2~3편 — 직렬과 병렬. 스위치 두 개를 직렬로 연결하면 둘 다 닫혀야 전류가 흐릅니다. 이것이 AND입니다. 두 개를 병렬로 연결하면 어느 하나만 닫혀도 전류가 흐릅니다. 이것이 OR입니다. 아직 게이트 기호는 없고 전선과 관찰 가능한 전류의 동작만 있었습니다. 논리는 이미 구리 안에 쓰여 있었습니다.
4~7편 — 이름 붙은 게이트. 조지 불의 대수와 릴레이 네트워크가 부울 대수와 같은 것임을 증명한 클로드 섀넌의 1937년 연구 덕분에 AND, OR, NOT에는 이름과 기호가 생겼습니다. Buffer, inverter, 세 가지 기본 게이트를 모두 릴레이 하드웨어로 제1원리부터 만들었습니다.
8~9편 — 범용 게이트. NAND와 NOR는 각각 세상에 존재하는 모든 논리 함수를 구현할 수 있습니다. 그 단순함은 당혹스러울 정도입니다. 게이트 한 종류를 창의적으로 배선하면 나머지 모두가 만들어집니다. 이어 아폴로 유도 컴퓨터가 NOR 게이트에 크게 의존했다는 유명한 이야기도 살펴보았습니다. 달 탐사선은 이제 여러분도 직접 만들 수 있는 회로를 타고 날았습니다.
10~11편 — XOR과 XNOR. 차이 검출기입니다. XOR은 두 입력이 다를 때 1을 출력합니다. 오류 검출, 암호화, 그리고 무엇보다 산술에 등장하는 놀랄 만큼 강력한 아이디어입니다.
12~13편 — Adder. XOR은 합 비트를, AND는 carry를 만듭니다. 스위치 두 개와 출력 두 개로 이진 덧셈을 수행합니다. 그런 다음 half adder에 carry-in을 추가해 조합하고 연결할 수 있는 full adder로 발전시켰습니다. 모든 프로세서가 여전히 그 핵심에서 사용하는 ripple-carry 아키텍처입니다. 조지 스티비츠는 1937년 부엌 식탁에서 릴레이와 담뱃갑을 접점으로 사용해 이 방식이 작동함을 증명했습니다.
14~16편 — Feedback과 clock. 이 시리즈에서 처음 등장한 순수한 순차 개념입니다. Inverter의 출력을 자신의 입력에 되먹임하도록 배선하면 회로가 진동합니다. 이 진동을 일정한 square wave로 다듬으면 순차 회로들이 보조를 맞춰 갱신할 시점을 알려 주는 심장박동인 clock이 됩니다. Clock이 없으면 컴퓨터는 한 번 계산하고 멈추는 조합 네트워크입니다. Clock이 있으면 프로그램을 따라 단계별로 반복해서 계산합니다.
17편 — D latch. Feedback이 건설적인 형태로 바뀌었습니다. 바꾸라는 명령을 받을 때까지 상태를 유지하는 교차 결합 릴레이입니다. Write-enable 선은 두 릴레이가 모두 켜지는 금지 상태를 막습니다. 릴레이 회로 안에 제어 가능한 메모리가 만들어졌습니다.
18편 — 1비트 메모리 셀. D latch를 깔끔한 인터페이스 뒤에 포장합니다. Write가 high이면 저장하고 low이면 유지합니다. 여덟 개를 쌓으면 byte, 수백만 개를 쌓으면 megabyte가 됩니다.
그리고 이제 결실을 볼 차례입니다.
컴퓨터의 밑바닥에는 네 가지가 있습니다.
- Clock — 시간을 박자로 나누며 다른 모든 회로에 언제 동작할지를 알리는 규칙적인 oscillator입니다.
- ALU — arithmetic and logic unit, 즉 adder, comparator, 불 연산을 묶은 장치입니다.
- Memory — clock tick 사이, 프로그램이 진행되는 동안, 전원 주기를 가로질러 상태를 보관하는 저장소입니다.
- 제어와 선택 — 적절한 데이터를 적절한 장소와 시점에 전달하는 multiplexer, decoder, 명령 논리입니다.
이제 여러분은 이 모든 조각을 릴레이로, 손으로, 제1원리부터 만들었습니다. Clock은 1416편, ALU는 1214편, memory는 16~18편, 제어와 선택은 7편과 12편에서 다뤘습니다(multiplexer와 decoder). 이제 남은 단계는 규모와 조직화뿐입니다. 수천 개의 구성 요소를 프로그램의 지시에 따라 함께 배선하는 일입니다. 하지만 물리적 원리는 모두 여기에 있습니다. 빠진 근본 아이디어는 없습니다. 더 많은 전선만 필요할 뿐입니다.
정확히 이렇게 작동했던 기계들
1940년대의 실제 릴레이 컴퓨터는 여러분이 해 온 것과 정확히 같은 일을 했습니다. 다만 방을 가득 채우고 수백만 USD가 들 정도의 규모로 만들었을 뿐입니다.
콘라트 추제의 Z3(1941)는 완전히 프로그래밍할 수 있고 자동으로 제어되는 최초의 계산 기계로 널리 인정받습니다. 독일 토목공학자 추제는 베를린에 있는 부모님의 거실에서 첫 컴퓨터를 만들었고, 약 2,000개의 릴레이를 조립해 천공 필름 띠에 저장된 프로그램을 실행할 수 있는 기계를 완성했습니다. Z3는 부동소수점 산술을 사용했으며 배선을 다시 하지 않고도 프로그램을 바꿀 수 있었습니다. 1943년 연합군의 폭격으로 파괴되었습니다. 이 시리즈의 산술 이야기에서 추제를 잠깐 소개했지만 Z3는 여기서 온전히 조명받을 자격이 있습니다. 우리가 만들어 온 아키텍처와 일치한 최초의 기계였기 때문입니다. Clock, ALU, memory, control이 모두 똑같이 딸깍이는 스위치로 조립되었습니다.
미국에서는 하버드의 하워드 에이컨이 IBM과 함께 정식 명칭 IBM Automatic Sequence Controlled Calculator인 Mark I을 만들어 1944년에 공개했습니다. 길이 51피트, 높이 8피트, 무게 약 5톤의 Mark I에는 약 3,300개의 릴레이와 수많은 기계식 counter, clutch, cam shaft가 들어 있었습니다. 두 수를 곱하는 데 3~5초가 걸렸습니다. 천공 종이 테이프로 명령을 입력했고 수년 동안 계속 가동되며 탄도표, 로그표, 그리고 나중에는 맨해튼 계획을 위한 수학 계산을 수행했습니다. 하버드 방문객은 건물 밖에서도 소리를 들을 수 있었습니다. 작동 중인 3,300개 릴레이 컴퓨터의 리드미컬한 덜컹거림은 결코 조용하지 않았습니다.
Mark I의 뒤를 이어 1947년에는 하버드에서 비슷한 전기기계식 기계인 Mark II가 만들어졌습니다. 컴퓨팅 역사에서 가장 오래 살아남은 이야기 중 하나를 남긴 기계가 바로 Mark II입니다.
1947년 9월 9일, 젊은 해군 장교이자 수학자였던 그레이스 호퍼가 속한 운용 팀은 Mark II가 불규칙하게 동작하는 것을 발견했습니다. 결함을 F 패널의 70번 릴레이까지 추적했습니다. 릴레이를 빼내자 실제 생물인 나방 한 마리가 접점 사이에 끼어 제대로 닫히지 못하게 하고 있었습니다. 나방은 핀셋으로 조심스럽게 제거되어 운용 일지에 테이프로 붙었고, 그 옆에는 *“버그가 실제로 발견된 최초의 사례(First actual case of bug being found)”*라는 기록이 남았습니다.
그 일지 페이지는 지금도 남아 있습니다. 스미스소니언 미국사박물관에 전시되어 있으며, 나방도 여전히 테이프 조각 아래에 붙어 있습니다.
기술적 결함을 뜻하는 “bug”라는 말은 그보다 수십 년 전부터 비공식적으로 사용되었습니다. 토머스 에디슨은 1878년에 이미 자신의 장치에 생긴 문제를 설명하며 이 말을 썼습니다. 하지만 모두가 기억하는 사건은 테이프로 붙인 그 나방입니다. 너무나 완벽하게 문자 그대로였기 때문입니다. 진짜 벌레가 진짜 릴레이 안에 들어가 진짜 컴퓨터를 멈추게 했습니다. 비유가 육신을 얻은 셈입니다. 이 일이 릴레이 컴퓨터에서 일어난 것은 릴레이 컴퓨터가 나방이 들어갈 만큼 크고 개방되어 있었기 때문입니다. 트랜지스터는 밀봉되어 있습니다. 나방에게는 기회가 없습니다.
계보: 릴레이 → 진공관 → 트랜지스터 → 칩
릴레이 컴퓨터는 1930년대 후반부터 1950년대 초까지 사용되었습니다. 이후 진공관 컴퓨터가 빠르고 완전하게 그 자리를 대신했습니다. 진공관에는 움직이는 부품이 없었습니다. 기계식 armature 대신 진공 유리관 안의 grid 전극이 전자의 흐름을 제어하여 같은 스위칭 기능을 millisecond가 아니라 microsecond 단위로 수행했습니다. 논리는 같았습니다. 아키텍처도 같았습니다. 스위치만 바뀌었습니다.
진공관은 다시 1947년 벨 연구소에서 시연되고 1950년대에 상용화된 트랜지스터에 자리를 내주었습니다. 트랜지스터는 반도체 스위치입니다. Base 단자에 가한 작은 전압이 collector와 emitter 사이의 훨씬 큰 전류를 제어합니다. 움직이는 부품도, 유리관도, 끊어질 filament도 없습니다. 초당 수백만 번 연산할 수 있습니다. 논리는 같았습니다. 아키텍처도 같았습니다. 스위치만 바뀌었습니다.
그다음 트랜지스터 수십억 개가 실리콘 wafer 위에 집적되었습니다. 1958년에 태어나 오늘날 소유한 모든 컴퓨팅 장치의 기반 기술로 남아 있는 집적 회로입니다. 논리는 같습니다. 아키텍처도 같습니다. 스위치만 미세해졌습니다.
1편에서 만난 릴레이는 spring이 달린 armature 아래에서 귀에 들리게 딸깍였고, 휴대전화 속 트랜지스터는 초당 500조 번 소리 없이 전환됩니다. 하지만 둘은 같은 일을 합니다. 둘 다 전기로 한 회로가 다른 회로를 지배하게 만드는 제어 스위치입니다. 섀넌의 1937년 대수는 같은 기호로 둘을 설명하고 같은 진리표를 이끌어 냅니다.
한 가지 관점에서 컴퓨터 하드웨어의 역사는 릴레이의 역사입니다. 그 뒤에 온 모든 것은 같은 아이디어를 더 빠르고 조용하고 작게 만든 버전입니다.
이제 어디로 갈까요?
이 시리즈의 끝까지 온 독자에게 세 가지를 솔직하게 권합니다.
첫째, 더 큰 것을 만드세요. 이 시리즈의 회로는 블로그 글에 맞는 크기로 만들었습니다. Full adder 여덟 개를 연결하고 결과를 담을 register를 배선하고 clock을 추가해 8비트 산술이 실제로 실행되는 모습을 본다면 어떨까요? DigiSim Relay Lab에는 바로 그 발전 과정이 준비되어 있습니다. Carry가 여덟 단계를 따라 전파되는 모습을 볼 수 있는 8비트 덧셈기, 이진 순서대로 딸깍이며 세는 3비트 ripple counter, 상승 clock edge에서만 데이터를 포착하는 edge-triggered D flip-flop, flip-flop 하나로 clock 신호를 절반으로 나누는 frequency divider가 있습니다. 실제 프로그램이 릴레이 논리 위에서 동작하고 모든 딸깍임이 보이고 들리는, 감탄이 나오는 제작물들입니다. 블로그 글에 담지 않은 이유는 글 하나가 너무 작기 때문입니다. 전체 캔버스를 누릴 자격이 있습니다.
둘째, 찰스 펫졸드의 CODE를 읽으세요. 이 시리즈는 그 책에서 깊은 영감을 받았습니다. 펫졸드의 책은 모스 부호와 손전등에서 시작해 작동하는 CPU에 이르며, 엄밀하면서도 사람다운 방식으로 제1원리부터 한 단계씩 만들어 갑니다. 여기서 다룬 길을 모두 지나고도 계속 나아가 machine language, assembly, operating system까지 설명합니다. DigiSim이 시뮬레이션으로 해낸 일을 독서로 경험하게 하는 책을 원한다면 CODE가 그 책입니다.
셋째, 직접 설계하세요. DigiSim 캔버스를 열고 릴레이 하나를 놓은 뒤 이 시리즈를 읽으며 떠오른 것을 배선해 보세요. “다른 사람의 회로를 따라 하기”에서 “내 회로를 설계하기”로 건너가는 순간이 진정한 졸업입니다. 새로운 지식은 필요하지 않습니다. 필요한 것은 이미 모두 갖추었습니다. 이제 자신의 방식으로 릴레이를 딸깍이게 만드세요.
열일곱 편 전에는 전기가 던지는 스위치를 만났습니다. 오늘은 아무 입력이 없는 동안에도 비트를 유지하는 메모리 셀을 만들었고, 그 딸깍 소리에서 지금까지 만들어진 모든 컴퓨터로 이어지는 선을 따라갔습니다. 그 선은 한 번도 끊어진 적이 없습니다.
릴레이로 만든 컴퓨터가 실제로 작동하는 모습을 확인하세요. DigiSim Relay Lab.



