스킬캠퍼스

오늘 끝나면

저장 프로그램이라는 반전

  • 저장 프로그램 방식이 ENIAC식 배선 방식과 어떻게 다른지 한 줄로 설명한다
  • 명령도 데이터처럼 메모리에 숫자로 저장된다는 걸 예로 든다
  • PC가 fetch와 execute를 반복하는 흐름과, 메모리만 바꾸면 범용이 되는 이유를 말한다

실습 미션

오른쪽 머신에서 명령 셀의 op나 주소를 바꿔 OUT 결과를 의도대로 바꿔보고, 배선이 아니라 메모리만 바꿨다는 걸 확인한다.

성공 조건

  • 명령 셀을 고쳐 OUT 값을 바꿔봤다
  • PC가 0부터 칸을 훑으며 fetch와 execute를 하는 흐름을 봤다
  • 명령 칸과 데이터 칸이 같은 메모리에 있다는 걸 확인했다

폰 노이만 · 배선 → 메모리 · 명령도 숫자 · 범용 컴퓨터

저장 프로그램이라는 반전

명령을 데이터처럼 같은 메모리에 넣었더니, 배선을 안 바꿔도 다른 일을 하는 기계가 됐다. 컴퓨터 역사상 가장 큰 한 수다.

IBMIntel
P.0109 · 저장 프로그램이라는 반전

그 전엔 프로그램이 곧 배선이었다

초기 컴퓨터는 일을 바꾸려면 기계 자체를 바꿔야 했다.

1945년 ENIAC. 전선 18,000개 진공관 덩어리인데, 프로그램이 곧 배선이었다. 다른 계산을 시키려면 사람이 케이블을 다시 꽂고 회전 스위치 수천 개를 다시 맞췄다.

이 재설정에 보통 며칠이 걸렸다. 곱셈기를 더하기로 바꾸는 게 코드 한 줄이 아니라 노동이었다.

즉 하드웨어가 곧 프로그램이었다. 기계 하나가 한 가지 일에 묶여 있었고, 다른 일은 사실상 다른 기계를 만드는 셈이었다.

ENIAC식, 일을 바꾸려면 배선판을 다시 꽂는다
ENIAC 패치 패널 · 작업 = 배선
시킬 작업을 고르면 케이블을 다시 꽂음
입력연산0123ABCD
지금 하는 일
탄도 계산
포탄 궤적 적분
이번 재배선 노동
2

작업을 바꿔보셈. 케이블 경로가 통째로 다시 그려짐, 코드 한 줄이 아니라 손으로 다시 꽂는 일임.

P.0209 · 저장 프로그램이라는 반전

명령을 데이터처럼 메모리에 넣다

1945년, 폰 노이만이 정리한 EDVAC 보고서에 반전이 담겼다.

명령을 배선으로 박지 말고, 데이터처럼 똑같은 메모리에 숫자로 저장하자는 것이다. 명령과 데이터가 한 저장소를 나눠 쓴다.

메모리는 주소로 값을 담는 칸의 줄이다. 그 칸에 무엇이 들었든 컴퓨터에겐 다 그냥 숫자다. 똑같은 1011이 어떤 칸에선 더하기 명령이고 어떤 칸에선 데이터 11이다.

그래서 명령도 숫자다. 종이가 아니라 같은 전기 메모리에 들어가니, 기계가 자기 명령을 읽고 쓰는 게 가능해진다.

같은 칸 안의 숫자 하나가 명령으로도 데이터로도 읽힌다
같은 숫자 · 명령으로도 데이터로도
칸을 클릭하면 해석을 바꿈, 명령 ↔ 데이터

지금 4칸은 명령, 4칸은 데이터로 읽는 중임. 비트는 하나도 안 바뀌었음 — 똑같은 01000101이 명령(LOAD 5)도 되고 데이터(69)도 됨. 무엇으로 볼지는 CPU가 그 칸을 명령으로 가져오느냐, 값으로 가져오느냐에 달림.

P.0309 · 저장 프로그램이라는 반전

PC가 칸을 훑으며 fetch → execute

명령이 메모리에 줄지어 있으니, CPU는 그걸 순서대로 읽어내면 된다.

PC(프로그램 카운터)가 다음 명령의 주소를 가리킨다. CPU는 그 칸을 읽어오고(fetch) 시키는 대로 하고(execute) PC를 +1 한다. 이 두 박자를 끝없이 반복한다.

이게 컴퓨터가 살아 움직이는 유일한 동작이다. 화려한 앱도 결국 이 fetch와 execute 사이클의 반복일 뿐이다.

배선을 다시 꽂는 며칠짜리 노동이, PC가 칸을 훑는 1초에 수십억 번짜리 사이클로 바뀐 것이다.

PC가 한 칸씩 가져오고(fetch) 실행한다(execute)
fetch → execute · PC가 한 칸씩
프로그램 메모리
PC ▶
0LOAD 7
1ADD 6
2OUT
3HALT
1박자 · fetch
PC가 가리킨 칸을 읽어옴
2박자 · execute
시키는 대로 함
PC
0
ACC
0
OUT

버튼을 눌러 한 박자씩 진행해보셈. 읽어오고(fetch) → 실행하고(execute), 그리고 PC가 다음 칸으로 넘어감.

P.0409 · 저장 프로그램이라는 반전

그래서 범용 컴퓨터가 된다

명령이 메모리에 있으니, 배선을 안 건드리고 메모리만 바꿔 다른 일을 시킨다.

기계는 그대로인데 무엇이든 한다. 이게 범용이다. 같은 칩 하나로 계산기도, 게임도, 채팅 앱도 돌리고, 바꾸는 건 메모리에 적힌 숫자뿐이다.

게다가 명령도 숫자라, 프로그램이 다른 프로그램을 데이터로 읽고 고치고 새로 만들 수 있다. 컴파일러와 운영체제가 바로 이 자기참조에서 나온다.

지금 모든 PC와 폰과 서버의 칩이 이 폰 노이만 구조 위에 서 있다. 80년 전 보고서 한 편이 깐 토대다.

기계는 그대로 · 메모리 카트리지만 갈아끼우면 다른 일
같은 기계 · 메모리만 갈아끼움
메모리 카트리지 (프로그램)계산기게임채팅CPUfetch → execute↑ 회로는 하나도 안 바뀜결과 (하는 일)42▲ ● ■"안녕"
명령도 숫자라서, 프로그램이 프로그램을 데이터로 다룸
소스 코드컴파일러기계어

위 카트리지를 갈아끼우면 CPU는 그대로인데 하는 일이 달라짐, 이게 범용임. 게다가 컴파일러·운영체제처럼 프로그램이 다른 프로그램을 읽고 만드는 일도, 명령이 숫자라서 가능해진 것임.

P.0509 · 저장 프로그램이라는 반전

직접 저장 프로그램 머신 돌려보기

오른쪽 머신에서 메모리 8칸을 직접 만진다. 앞쪽은 명령, 뒤쪽은 데이터인데 둘 다 같은 메모리에 있다.

▶ 실행을 누르면 PC가 0번 칸부터 훑으며 fetch와 execute를 한다. 파란 칸이 지금 실행 중인 명령이다.

명령 셀의 op나 주소를 바꿔본다. 배선은 하나도 안 건드렸는데 OUT 결과가 통째로 바뀐다. 메모리만 바꾼 게 전부다.

이 작은 기계가 곧 노트북과 폰 안에서 벌어지는 일의 축소판이다.

메모리 셀을 고치고 ▶ 실행하면 fetch와 execute로 OUT이 바뀐다
저장 프로그램 머신 · 명령도 숫자다
메모리, 주소 0~7 · 명령과 데이터가 같은 칸에 산다
0
명령주소
1
명령주소
2
명령주소
3
명령
4
명령
5
데이터
6
데이터
7
데이터
CPU, PC가 메모리를 훑으며 fetch → execute
PC
ACC
0
OUT

이대로 돌리면 OUT = 25 이 나옴. 명령 셀의 op·주소를 바꾸면 결과가 통째로 바뀜, 배선이 아니라 메모리만 바꾼 것.

3줄 요약

  1. 1옛날엔 일을 바꾸려면 배선을 다시 꽂았다. 프로그램이 곧 하드웨어였고 며칠씩 걸렸다.
  2. 2폰 노이만의 반전은 명령을 데이터처럼 같은 메모리에 숫자로 저장하고, PC가 fetch와 execute로 훑는 것이다.
  3. 3그래서 메모리만 바꾸면 무엇이든 하는 범용 컴퓨터가 된다. 명령도 숫자라 프로그램이 프로그램을 다룬다.

완료 전 점검

복습 카드

폰 노이만 구조

명령과 데이터를 같은 메모리에 숫자로 두는 설계

PC(프로그램 카운터)

다음 명령의 주소를 가리키는 값, fetch→execute 한 박자마다 +1

fetch → execute

칸을 읽어와 실행하는 한 박자, 끝없이 반복되는 컴퓨터의 기본 동작