2.2 지시서를 따라 움직이는 컴퓨터

앞 절에서 컴퓨터가 기억 공간에 있는 데이터를 프로그램에 따라 처리한다는 큰 그림을 살펴보았다. 이번에는 그 일을 실제로 어떤 부품들이 나누어 맡는지 알아보고, 간단한 덧셈 하나가 이루어지는 과정을 따라가 보자. 기술적인 용어가 조금 등장하지만, 너무 걱정할 필요는 없다. 앞에서 살펴본 원리를 구체적인 예를 통해 하나씩 확인하는 과정이다.

앞 절에서 본 입력, 연산, 기억, 출력 네 가지를, 이번에는 그 일을 맡는 장치와 함께 살펴본다. 바깥과 맞닿은 입력·출력부터 보고, 안쪽의 기억과 연산으로 들어가자. 여기에 컴퓨터가 할 일을 정해주는 프로그램이 필요하다. 각각을 하나씩 들여다보자.

입력과 출력은 컴퓨터가 바깥세상과 정보를 주고받는 동작이다. 입력은 바깥의 정보를 안으로 받아들이는 일로, 일반적인 컴퓨터에서 키보드와 마우스가 대표적이지만 스마트폰이나 태블릿의 터치스크린, 조이스틱, 각종 센서도 입력 장치다. 키보드의 키를 누르면 어떤 키를 눌렀는지를 나타내는 전기적 신호가 컴퓨터 내부로 전달된다. 출력은 반대로 처리한 결과를 바깥으로 내보내는 일이다. 모니터나 스마트폰의 화면처럼 글자와 그림을 보여주는 장치뿐 아니라, 로봇 팔이나 모터처럼 움직임을 만들어내는 장치, LED 신호등처럼 상태를 표시하는 장치도 출력 장치에 해당한다. 컴퓨터에서 전달된 신호에 따라 화면을 바꾸거나 실제 장치를 움직여, 우리가 그 결과를 알 수 있게 해준다.

입력과 출력이 컴퓨터의 바깥과 맞닿은 창구라면, 컴퓨터 안에서 실제로 일이 벌어지는 곳은 나머지 둘, 연산과 기억이다.

기억은 일을 처리하는 동안 필요한 데이터를 담아두는 동작이다. 계산에 쓸 숫자, 작성 중인 문서의 내용, 게임 속 인물의 위치 같은 것들이 그 예다. 이런 데이터를 담아두고 필요할 때 읽거나 새 값으로 바꿀 수 있게 하는 장치가 메모리다. 앞 장에서 기억하는 칩(메모리 반도체)이라고 부른 디램(DRAM, Dynamic Random Access Memory) 칩이 컴퓨터 안에서 이 역할을 맡는다. 〈그림 2-2〉에서 메모리의 실물을 볼 수 있다.

메모리(DRAM) 모듈 실물 사진
〈그림 2-2〉 기억하는 칩인 메모리(DRAM)의 실물

마지막은 연산이다. 기억해둔 데이터를 실제로 처리하는 동작으로, 값을 계산하고 비교하는 일이다. 게임에서 새로 얻은 점수를 기존 점수에 더하는 것, 그 점수가 목표에 도달했는지 비교하는 것이 연산의 예다. 이 일을 맡는 칩이 CPU이며, 앞 장에서 연산하는 칩(시스템 반도체)이라고 부른 것이 바로 이런 칩이다. 〈그림 2-3〉에서 CPU의 실물을 볼 수 있다.

CPU 실물 사진
〈그림 2-3〉 연산하는 칩인 CPU의 실물

앞 장에서 역할에 따라 둘로 나누었던 칩이, 여기서 각자의 자리를 찾은 셈이다. 이 장치들은 메모리를 중심으로 데이터를 주고받으며 함께 일한다. 한 가지 덧붙이면, 이들이 정보를 주고받는 방식은 모두 전기적 신호를 바탕으로 한다. 메모리에 데이터를 기록하거나 읽는 일도 전기적으로 이루어진다. 지금은 그 구체적인 모습이 잘 떠오르지 않아도 괜찮다. 이 책을 읽다 보면 그 의미를 차차 이해하게 될 것이다. 〈그림 2-4〉는 이러한 관계를 실제 부품과 연결해 보여준다.

입력 장치, CPU, 메모리 속 프로그램, 출력 장치의 연결 구조
〈그림 2-4〉 CPU, 메모리, 프로그램(명령어와 데이터)의 연결 구조

이제 앞에서 이야기한 프로그램을 조금 더 자세히 살펴보자.

프로그램은 컴퓨터에게 할 일을 적어 건네는 문서와 같다. 공장의 작업 지시서를 떠올려보면 이해하기 쉽다. 거기에는 무엇을 어떤 순서로 만들라는 지시만 적혀 있는 것이 아니라, 그 일에 쓸 자재도 함께 딸려 온다. 컴퓨터가 받는 프로그램도 마찬가지다.

프로그램에 담기는 것은 두 가지다. 하나는 컴퓨터가 수행할 일을 나타내는 명령어(Instruction)이고, 다른 하나는 그 일에 쓰일 데이터(Data)다. 두 숫자를 더하려면 ‘두 값을 더하라’는 지시뿐 아니라 더할 두 숫자도 있어야 한다. 여기서 더하라는 지시가 명령어이고, 더할 숫자들이 데이터다.

컴퓨터가 이 프로그램을 수행할 때, 명령어와 데이터는 실제로는 메모리에 미리 저장되어 있다. 연산을 담당하는 CPU는 메모리에서 명령어를 하나씩 가져와 어떤 일을 해야 하는지 해석한다. 그리고 그 지시에 따라 필요한 데이터를 가져오거나 연산하고, 결과를 다시 메모리에 저장한다. 컴퓨터는 이러한 동작을 이어가며 프로그램에 적힌 일을 수행한다.

예를 들어, 3+5를 계산하기 위한 프로그램이 있다고 해보자. 여기서는 기본 원리를 이해할 수 있도록 실행 과정을 단순화해서 살펴본다. 메모리에는 이 계산을 위한 명령어들과 계산할 두 값인 3과 5가 저장되어 있다. CPU가 이 계산을 수행하려면 어떤 지시가 필요할까? 3+5 하나를 계산하는 데에도 명령어를 어떻게 나눌지는 여러 가지일 수 있다. 여기서는 가장 단순한 형태로 생각해보자.

먼저 메모리에서 CPU로 데이터를 가져오는 명령어(LOAD)가 필요하다. 그다음에는 CPU 안에서 두 값을 더하는 명령어(ADD), 마지막으로 계산한 결과를 메모리에 저장하는 명령어(STORE)가 필요하다. 명령어의 종류는 셋이지만, 3과 5를 각각 가져오기 위해 LOAD를 두 번 수행해야 하므로 실제로 실행할 명령어는 모두 네 개다.

메모리에 놓인 명령어와 데이터 3, 5를 CPU가 LOAD로 가져오는 그림
〈그림 2-5〉 3+5 계산에 필요한 데이터와 첫 번째 LOAD 명령어의 수행

좀더 자세히 살펴보자. CPU는 먼저 자신이 무슨 일을 해야 하는지 알기 위해 메모리에서 첫 번째 명령어를 가져온다. 이 명령어를 해석하면, 메모리에 있는 데이터 3을 CPU로 가져오라는 LOAD 명령어임을 알게 된다. LOAD 명령어에는 데이터를 어디에서 가져와 CPU 안의 어디에 놓을지가 지정되어 있다. CPU는 이 지시에 따라 메모리에서 3을 읽어 자신의 내부에 담아둔다. CPU 안에도 연산에 사용할 값이나 결과를 잠시 담아두는 작은 기억 공간이 있다.

여기서 명령어를 가져오는 일과 데이터를 가져오는 일은 구분된다. 먼저 명령어를 가져오는 것은 ‘무엇을 해야 하는지’를 확인하는 과정이다. 그다음 데이터 3을 가져오는 것은 그 명령어가 시킨 일을 실제로 수행하는 과정이다. 둘 다 메모리에서 가져오는 일이지만, 그 목적은 다르다.

첫 번째 명령어를 마친 CPU는 다음 명령어를 메모리에서 가져와 해석한다. 두 번째 명령어 역시 LOAD이며, 이번에는 5를 CPU로 가져오라는 지시다. 이 명령어까지 수행하면 덧셈에 사용할 3과 5가 모두 CPU 내부에 놓인다. 이제 실제 덧셈을 할 준비가 되었다.

CPU는 다시 메모리에서 세 번째 명령어를 가져온다. 이번에는 두 값을 더하는 ADD 명령어다. CPU는 내부에 담아둔 3과 5를 더하고, 그 결과인 8을 CPU 내부에 잠시 기억해둔다. 아직 이 결과를 메모리에 저장한 것은 아니다.

마지막으로 CPU는 네 번째 명령어인 STORE를 가져온다. STORE는 CPU 내부에 있는 값을 메모리로 옮겨 저장하는 명령어다. CPU가 이 명령어를 수행하면, 메모리에 3+5의 결과인 8이 저장된다. 이 결과를 모니터에 보여주려면 화면에 표시하기 위한 추가적인 처리가 필요하지만, 여기서는 계산한 결과를 메모리에 저장하는 과정까지 따라가 보았다.

만약 여기에 추가로 2를 빼야 한다면 프로그램은 어떻게 달라질까? 어떤 데이터를 더 가져와야 하고, 어떤 연산을 수행해야 할지 한번 상상해보길 바란다.

지금까지 3+5를 계산하는 예를 통해 컴퓨터의 핵심 동작을 살펴보았다. 프로그램에는 컴퓨터가 해야 할 일이 명령어로 담겨 있었고, 그 명령어들과 계산할 데이터는 메모리에 놓여 있었다. CPU는 명령어를 차례로 가져와 해석하고, 그 지시에 따라 데이터를 가져오고 연산한 뒤 결과를 메모리에 저장했다. 앞 절에서 이야기한 ‘프로그램에 따라 기억 공간의 데이터를 처리한다’는 일이 실제로는 이러한 과정으로 이루어지는 것이다.

CPU와 메모리 사이에서 이루어지는 이 기본 동작은 앞으로 살펴볼 복잡한 프로그램에서도 반복된다. 명령어와 데이터의 양이 많아지고 처리하는 순서가 복잡해지더라도, 지금 살펴본 과정이 그 바탕에 있다. 문서를 쓰는 일도, 게임 화면을 그리는 일도, AI 모델을 실행하는 일도, 안을 들여다보면 두 종류의 칩이 이렇게 주고받는 걸음의 반복이다.

단, 지금까지는 주로 ‘메모리’라는 하나의 기억 공간을 중심으로 설명했고, CPU 안에도 값을 잠시 담아두는 공간이 있다고만 이야기했다. 실제 컴퓨터에는 이처럼 역할과 특성이 다른 여러 기억 공간이 존재한다. 다음 절에서는 이 공간들이 왜 나뉘어 있고 어떻게 함께 사용되는지 살펴보자.