오늘 끝나면
저장 프로그램이라는 반전
- ✓저장 프로그램 방식이 ENIAC식 배선 방식과 어떻게 다른지 한 줄로 설명한다
- ✓명령도 데이터처럼 메모리에 숫자로 저장된다는 걸 예로 든다
- ✓PC가 fetch와 execute를 반복하는 흐름과, 메모리만 바꾸면 범용이 되는 이유를 말한다
실습 미션
오른쪽 머신에서 명령 셀의 op나 주소를 바꿔 OUT 결과를 의도대로 바꿔보고, 배선이 아니라 메모리만 바꿨다는 걸 확인한다.
성공 조건
- □명령 셀을 고쳐 OUT 값을 바꿔봤다
- □PC가 0부터 칸을 훑으며 fetch와 execute를 하는 흐름을 봤다
- □명령 칸과 데이터 칸이 같은 메모리에 있다는 걸 확인했다
폰 노이만 · 배선 → 메모리 · 명령도 숫자 · 범용 컴퓨터
저장 프로그램이라는 반전
명령을 데이터처럼 같은 메모리에 넣었더니, 배선을 안 바꿔도 다른 일을 하는 기계가 됐다. 컴퓨터 역사상 가장 큰 한 수다.
그 전엔 프로그램이 곧 배선이었다
초기 컴퓨터는 일을 바꾸려면 기계 자체를 바꿔야 했다.
1945년 ENIAC. 전선 18,000개 진공관 덩어리인데, 프로그램이 곧 배선이었다. 다른 계산을 시키려면 사람이 케이블을 다시 꽂고 회전 스위치 수천 개를 다시 맞췄다.
이 재설정에 보통 며칠이 걸렸다. 곱셈기를 더하기로 바꾸는 게 코드 한 줄이 아니라 노동이었다.
즉 하드웨어가 곧 프로그램이었다. 기계 하나가 한 가지 일에 묶여 있었고, 다른 일은 사실상 다른 기계를 만드는 셈이었다.
작업을 바꿔보셈. 케이블 경로가 통째로 다시 그려짐, 코드 한 줄이 아니라 손으로 다시 꽂는 일임.
명령을 데이터처럼 메모리에 넣다
1945년, 폰 노이만이 정리한 EDVAC 보고서에 반전이 담겼다.
명령을 배선으로 박지 말고, 데이터처럼 똑같은 메모리에 숫자로 저장하자는 것이다. 명령과 데이터가 한 저장소를 나눠 쓴다.
메모리는 주소로 값을 담는 칸의 줄이다. 그 칸에 무엇이 들었든 컴퓨터에겐 다 그냥 숫자다. 똑같은 1011이 어떤 칸에선 더하기 명령이고 어떤 칸에선 데이터 11이다.
그래서 명령도 숫자다. 종이가 아니라 같은 전기 메모리에 들어가니, 기계가 자기 명령을 읽고 쓰는 게 가능해진다.
지금 4칸은 명령, 4칸은 데이터로 읽는 중임. 비트는 하나도 안 바뀌었음 — 똑같은 01000101이 명령(LOAD 5)도 되고 데이터(69)도 됨. 무엇으로 볼지는 CPU가 그 칸을 명령으로 가져오느냐, 값으로 가져오느냐에 달림.
PC가 칸을 훑으며 fetch → execute
명령이 메모리에 줄지어 있으니, CPU는 그걸 순서대로 읽어내면 된다.
PC(프로그램 카운터)가 다음 명령의 주소를 가리킨다. CPU는 그 칸을 읽어오고(fetch) 시키는 대로 하고(execute) PC를 +1 한다. 이 두 박자를 끝없이 반복한다.
이게 컴퓨터가 살아 움직이는 유일한 동작이다. 화려한 앱도 결국 이 fetch와 execute 사이클의 반복일 뿐이다.
배선을 다시 꽂는 며칠짜리 노동이, PC가 칸을 훑는 1초에 수십억 번짜리 사이클로 바뀐 것이다.
버튼을 눌러 한 박자씩 진행해보셈. 읽어오고(fetch) → 실행하고(execute), 그리고 PC가 다음 칸으로 넘어감.
그래서 범용 컴퓨터가 된다
명령이 메모리에 있으니, 배선을 안 건드리고 메모리만 바꿔 다른 일을 시킨다.
기계는 그대로인데 무엇이든 한다. 이게 범용이다. 같은 칩 하나로 계산기도, 게임도, 채팅 앱도 돌리고, 바꾸는 건 메모리에 적힌 숫자뿐이다.
게다가 명령도 숫자라, 프로그램이 다른 프로그램을 데이터로 읽고 고치고 새로 만들 수 있다. 컴파일러와 운영체제가 바로 이 자기참조에서 나온다.
지금 모든 PC와 폰과 서버의 칩이 이 폰 노이만 구조 위에 서 있다. 80년 전 보고서 한 편이 깐 토대다.
위 카트리지를 갈아끼우면 CPU는 그대로인데 하는 일이 달라짐, 이게 범용임. 게다가 컴파일러·운영체제처럼 프로그램이 다른 프로그램을 읽고 만드는 일도, 명령이 숫자라서 가능해진 것임.
직접 저장 프로그램 머신 돌려보기
오른쪽 머신에서 메모리 8칸을 직접 만진다. 앞쪽은 명령, 뒤쪽은 데이터인데 둘 다 같은 메모리에 있다.
▶ 실행을 누르면 PC가 0번 칸부터 훑으며 fetch와 execute를 한다. 파란 칸이 지금 실행 중인 명령이다.
명령 셀의 op나 주소를 바꿔본다. 배선은 하나도 안 건드렸는데 OUT 결과가 통째로 바뀐다. 메모리만 바꾼 게 전부다.
이 작은 기계가 곧 노트북과 폰 안에서 벌어지는 일의 축소판이다.
이대로 돌리면 OUT = 25 이 나옴. 명령 셀의 op·주소를 바꾸면 결과가 통째로 바뀜, 배선이 아니라 메모리만 바꾼 것.