CPU가 하는 일
3 GHz 프로세서는 1초에 30억 번 박자를 맞춥니다. 한 박자가 3분의 1나노초입니다.
정보 수업 시간을 하나 떠올려 보세요. (지어낸 장면입니다.) 칠판에 번호가 붙은 칸 16개가 그려져 있고, 칸마다 비트 여덟 개가 적혀 있습니다. 학생 세 명이 CPU 역할을 나눠 맡습니다. 한 명은 PC 카드, 한 명은 IR 카드, 한 명은 ACC 카드를 들고 있습니다. PC 카드에는 0이 적혀 있습니다. IR을 맡은 학생이 0번 칸에 가서 거기 적힌 0001 1110을 자기 카드에 옮겨 적고, PC를 맡은 학생은 카드의 숫자를 1로 고칩니다. 반 친구들이 벽에 붙은 표에서 앞 네 비트 0001을 찾아보니 LOAD입니다. 뒤 네 비트 1110은 14입니다. 그래서 ACC를 맡은 학생이 14번 칸에 가서 7을 받아 적습니다. PC를 맡은 학생은 숫자 하나만, IR을 맡은 학생은 명령 하나만, ACC를 맡은 학생은 수 하나만 기억하면 됩니다. 그다음에는 1번 칸부터 같은 일을 처음부터 되풀이합니다.
1번 칸은 ADD 15라서 ACC가 7 + 5 = 12가 됩니다. 2번 칸은 STORE 13이고, ACC를 맡은 학생이 13번 칸에 12를 써 넣습니다. 3번 칸은 HALT이고, 세 명 모두 자리에 앉습니다. 모두 열두 번 움직였습니다. 세 학생 가운데 누구도 이 프로그램이 「7과 5를 더한다」는 것을 알 필요가 없었습니다. 저마다 작은 규칙 하나만 지켰을 뿐입니다. 칠판의 칸은 메모리, 세 학생의 카드는 레지스터, 벽에 붙은 표는 해독 회로에 해당합니다. 진짜 CPU도 똑같이 일합니다. 1초에 수십억 번씩 되풀이할 뿐이고, 그 안에서 프로그램 전체를 이해하는 부품은 없습니다.
1초에 수십억 번 도는 짧은 순환
게이트는 더하고, 비교하고, 고를 수 있습니다. 하지만 어떤 수로 어떤 순서에 따라 무엇을 할지는 누군가 알려 줘야 합니다. 그 일을 맡은 것이 중앙 처리 장치(central processing unit), 줄여서 CPU입니다. CPU는 짧은 순환 하나를 되풀이합니다. 프로그램 카운터(PC)라는 레지스터에는 다음 명령의 주소가 들어 있습니다. 인출(fetch) 단계에서 CPU는 PC가 가리키는 칸을 명령 레지스터(IR)로 읽어 오고 PC를 하나 옮깁니다. 해독(decode) 단계에서는 제어 회로가 연산 코드 비트를 보고 알맞은 길을 엽니다. ADD라면 덧셈기로 가는 길을, STORE라면 메모리에 쓰는 길을 이어 주는 식입니다. 실행(execute) 단계에서 실제 일을 합니다. 수를 불러오거나 더하거나 저장하고, 때로는 PC 값을 바꿔 프로그램의 다른 곳으로 건너뜁니다. 그러고 나면 순환이 처음으로 돌아갑니다. 칠판 앞의 학생 셋이 한 일이 바로 이 세 단계입니다. 명령 가운데 JZ는 누산기가 0일 때만 건너뜁니다. 이런 조건 건너뛰기가 있어서 프로그램이 판단도 하고 같은 일을 되풀이할 수도 있습니다.
끌어서 돌리고, 휠이나 두 손가락으로 확대하세요.
장면은 수업 시간에 학생들이 몸으로 해 본 프로그램을 그대로 돌립니다. 「한 단계」를 누를 때마다 PC, IR, ACC가 카드와 똑같이 바뀝니다. LOAD 14, ADD 15, STORE 13, HALT의 명령 넷이 저마다 세 단계씩, 모두 열두 단계입니다. 곱셈 프로그램도 같은 명령 몇 가지만 쓰지만, 15번지의 셈이 0이 되기 전까지 JZ와 JUMP가 PC를 두 번 0으로 되돌립니다. 그래서 명령 24개를 72단계에 걸쳐 실행합니다. 덧셈 프로그램보다 명령이 여섯 배 많습니다.
프로그램은 수와 같은 메모리에 들어 있습니다
칠판에서 명령과 수 7, 5는 같은 줄의 칸에 함께 들어 있었습니다. 우연이 아닙니다. 1945년 6월 존 폰 노이만은 「EDVAC에 관한 보고서 초안」에서 명령을 데이터와 같은 메모리에 두는 컴퓨터를 설명했고, 그 뒤 컴퓨터는 거의 모두 이 방식을 따릅니다. 덕분에 할 일을 바꾸고 싶으면 회로를 고치지 않고 칸에 든 수만 바꿔 적으면 됩니다. 명령도 결국 비트를 몇 칸으로 나눠 읽는 수입니다. 이 장난감 컴퓨터에서는 칸마다 8비트가 들어갑니다. 앞 네 비트는 무엇을 할지 알려 주는 연산 코드(opcode)이고, 뒤 네 비트는 어느 칸을 쓸지 알려 주는 주소(address)입니다. 0001이 LOAD이므로 0001 1110은 「LOAD 14」, 14번지의 수를 CPU의 작업용 레지스터인 누산기(accumulator)로 가져오라는 뜻입니다.
순환은 얼마나 빨리 돌까
이 단계들은 클록 신호에 맞춰 움직입니다. 클록 신호는 일정한 빠르기로 켜졌다 꺼졌다를 되풀이하는 전압입니다. 3 GHz 클록은 1초에 3,000,000,000번 박자를 맞추므로 한 박자는 1 ÷ 3,000,000,000초, 약 0.333나노초입니다. 그동안 빛은 약 10센티미터밖에 못 갑니다. 한 박자에 한 단계씩이라고 치면, 장난감 컴퓨터의 7 + 5 프로그램을 1초에 2억 5천만 번 돌릴 수 있는 박자입니다. 실제 프로세서는 장난감 컴퓨터처럼 한 박자에 명령 하나를 통째로 끝내지 않습니다. 공장의 조립 라인처럼 여러 명령의 단계를 겹쳐서 진행하는데 이것을 파이프라인이라고 하고, 요즘 칩에는 코어(core)라고 부르는 완전한 프로세서가 여러 개 나란히 들어 있습니다. 장난감 컴퓨터에는 그런 장치가 하나도 없습니다. 그래서 손으로 한 단계씩 따라갈 수 있습니다.
| 연산 코드 | 이름 | 하는 일 |
|---|---|---|
| 0000 | HALT | 멈춤 |
| 0001 | LOAD a | ACC = a번지 |
| 0010 | ADD a | ACC = ACC + a번지 |
| 0011 | SUB a | ACC = ACC − a번지 |
| 0100 | STORE a | a번지 = ACC |
| 0101 | JUMP a | PC = a |
| 0110 | JZ a | ACC가 0이면 PC = a |
- 「PC는 지금까지 실행한 명령의 개수를 센다.」 PC에는 다음에 실행할 명령의 주소가 들어 있습니다. 4 × 3 프로그램에서 PC는 두 번이나 0으로 돌아가지만, 끝난 명령 수는 계속 늘어 24가 됩니다. 그래서 PC 값만 보고는 프로그램이 얼마나 진행됐는지 알 수 없고, 장면에서도 「끝난 명령」 숫자를 따로 보여 줍니다.
- 「CPU는 사람이 읽듯이 프로그램을 이해한다.」 CPU는 8비트를 읽어 연산 코드와 주소로 나누고, 그 연산 코드에 맞게 이어진 회로를 따를 뿐입니다. 카드를 든 학생들처럼 이 프로그램이 7과 5를 더한다는 것은 끝까지 모릅니다. CPU에게 프로그램은 처음부터 끝까지 8비트짜리 수가 늘어선 줄일 뿐입니다.
- 「GHz 숫자가 높으면 언제나 더 빠른 컴퓨터다.」 클록은 단계가 얼마나 자주 일어날 수 있는지를 정할 뿐, 한 박자에 얼마나 많은 일을 하는지는 정하지 않습니다. 실제 칩은 명령의 단계를 겹쳐 진행하고 코어도 여러 개라서, 똑같이 3 GHz인 노트북 두 대가 해내는 일의 양은 크게 다를 수 있습니다. 노트북을 고를 때 GHz 숫자 하나만으로 비교하기 어려운 까닭입니다.
- 명령 순환의 단계를 순서대로 놓으세요.
- CPU가 3번지의 명령을 인출했습니다. 인출 직후 PC는 얼마입니까?
- 장난감 컴퓨터에서 0010 1111은 무슨 뜻입니까?
- ADD 15
- LOAD 15
- STORE 2
- ADD 7
- LOAD 14를 8비트로 쓰세요.
- 클록이 3 GHz로 돕니다. 한 박자는 몇 나노초입니까? (소수 셋째 자리까지)
- 7 + 5 프로그램은 HALT를 포함해 명령을 몇 개 실행합니까?
- 명령 하나에 세 단계가 듭니다. 7 + 5 프로그램은 몇 단계가 걸립니까?
- STORE 13은 무엇을 합니까?
- 누산기 값을 13번지로 복사한다
- 13번지 값을 누산기로 복사한다
- 13번지로 건너뛴다
- 누산기에 13을 더한다
- 셈이 0이 될 때까지 고리를 되풀이하게 해 주는 명령은 무엇입니까?
- JZ(0이면 건너뛰기)
- STORE
- HALT
- LOAD
- 폰 노이만이 「EDVAC에 관한 보고서 초안」을 쓴 해는 언제입니까?
- 프로그램은 데이터와 같은 메모리에 숫자로 저장됩니다(폰 노이만, 1945).
- CPU는 인출, 해독, 실행을 되풀이하고, PC가 다음 명령을 가리킵니다.
- 명령의 비트는 연산 코드와 주소로 나뉩니다.
- 클록이 빠르기를 정합니다. 3 GHz는 0.333 ns마다 한 박자입니다.
이 과정의 출처 (9)
- (checked 2026-10-17; reordered 2026-10-19: standards first, then official documentation, then the teaching model and calculations, history sources last)
- Standards: NIST, "Prefixes for binary multiples" (physics.nist.gov/cuu/Units/binary.html: IEC approved kibi, mebi, gibi in December 1998; 1 B = 8 bit; 1 MiB = 1 048 576 B; 1 MB = 1 000 000 B; 1 GiB = 1 073 741 824 B; historical note: memory makers usually mean 2²⁰ bytes by megabyte, storage makers 1 000 000, and the "1.44 MB" diskette uses a megabyte of 1 024 000 bytes)
- IETF RFC 20 "ASCII format for Network Interchange" (1969, 7-bit codes, A = 65, a = 97, 0 = 48)
- IETF RFC 3629 "UTF-8, a transformation format of ISO 10646" (2003: 1 to 4 octets per character, ASCII unchanged, code points up to U+10FFFF, U+0800 to U+FFFF take three octets, "the first octet of a multi-octet sequence indicates the number of octets", example U+D55C U+AD6D U+C5B4 = ED 95 9C EA B5 AD EC 96 B4)
- Official documentation: MDN Web Docs, "<color>" (hexadecimal colour notation #RRGGBB)
- Intel, "Intel Chips" timeline poster (2012: Intel 4004 of 1971 with 2,300 transistors; 2nd generation Core 2010 with 1.16 billion)
- Claude E. Shannon, "A Symbolic Analysis of Relay and Switching Circuits", Transactions of the AIEE vol. 57 (1938)
- abstract of his MIT master's thesis. Computer History Museum, The Silicon Engine, "1947: Invention of the Point-Contact Transistor" (Bardeen and Brattain, December 1947, germanium)
- John von Neumann, "First Draft of a Report on the EDVAC" (30 June 1945, Moore School, reprinted in IEEE Annals of the History of Computing 15:4, 1993).
확인한 날: 2026-10-17