D 플립플롭은 클럭이 바뀌는 순간에만 값을 받아들여 1비트를 기억하는 회로입니다. 하지만 컴퓨터가 다루는 숫자는 한 비트보다 훨씬 큽니다. 여러 비트를, 그것도 여러 묶음 저장하려면 어떻게 해야 할까요?
D 플립플롭 하나는 단 하나의 비트(0 또는 1)만 저장할 수 있습니다. 하지만 컴퓨터는 8비트, 16비트, 32비트, 64비트와 같은 여러 비트가 모인 Word(컴퓨터가 한 번에 처리하는 데이터 묶음) 단위로 숫자를 표현하고 처리합니다.
이러한 여러 비트의 정보를 한 번에 저장하기 위해, 여러 개의 D 플립플롭을 병렬로 연결한 것이 바로 레지스터(Register)입니다. 예를 들어, 8비트 레지스터는 8개의 D 플립플롭으로 구성되어 8개의 비트를 동시에 저장할 수 있습니다. 모든 플립플롭이 같은 클럭 신호를 공유하므로, 8비트 데이터가 동시에 저장되고 출력됩니다.
레지스터는 CPU 내부에 위치하며, 연산 장치가 계산할 값이나 제어 장치가 다음 명령어를 가져올 주소 등, CPU가 당장 처리해야 할 핵심적인 정보들을 매우 빠르게 임시 저장하는 역할을 합니다. CPU와 같은 칩 내부에 위치하기 때문에 접근 속도가 매우 빠르지만, 그만큼 비싸고 공간을 많이 차지합니다.
CPU 안에는 레지스터가 여러 개 있습니다. 네 개의 레지스터에 각각 다른 값이 들어 있다고 해봅시다. 이 중 하나를 골라 읽거나, 하나를 골라 새 값을 쓰고 싶습니다.
이렇게 여러 레지스터를 묶어 번호(주소)로 골라 읽고 쓸 수 있게 만든 것을 레지스터 파일(Register File)이라고 합니다. 고르는 일은 멀티플렉서(MUX)와 디코더가 나눠 맡습니다.
D 플립플롭을 묶어 여러 비트를 저장하는 레지스터를 만들고, 디코더와 MUX로 그중 하나를 골라 읽고 쓰는 레지스터 파일까지 만들었습니다. 우리는 이제 덧셈을 수행할 수 있는 회로뿐만 아니라, 그 계산 결과를 ‘기억’할 수 있는 능력을 컴퓨터에게 부여하는 방법을 알게 되었습니다.
이제 계산과 기억이라는 두 가지 능력을 갖추었습니다. 하지만 우리가 매일 쓰는 컴퓨터를 떠올려봅시다. 웹을 검색하고, 음악을 틀고, 게임을 합니다. 지금까지 만든 회로들과는 모습이 아주 다릅니다. 이것만으로 컴퓨터라고 부를 수 있을까요? 다음 글에서는 계산이란 무엇인지부터 다시 살펴봅시다.