본문 바로가기

[Chapter 3] Memory

(밑바닥부터 만드는 컴퓨팅 시스템 2판,  인사이트(insight), 2023)을 학습하고 개인 학습용으로 정리한 내용입니다.

 

 

 

 

 

지금까지 Chapter 1,2에서 만든 칩들(ALU 포함)은 시간과 무관한 칩이었다. 이런 칩들은 보통 조합 칩(combinational chip)이라 불린다.

Chapter 3에서 만들 칩은 순차 칩(sequential chip)이다. 

순차 칩의 출력은 현재 시점의 입력뿐 아니라 이전에 처리했던 입력 및 출력에도 영향을 받는다. 즉, 시간에 영향을 받는다.

 

  • 데이타 플립-플롭(data flip-flop, DFF)

DFF는 0과 1, 두 상태를 왔다 갔다(flip-flop)할 수 있는 시간 의존적 논리 게이트이다. 즉, 시간이 지나도 무언가를 기억할 수 있는 논리 게이트이다.

메모리 칩은 시간이 지나도 정보를 '기억'하고 저장하도록 설게된 칩이므로, DFF를 메모리 장치의 기본 구성 블록으로 사용해야 한다.

DFF를 이용하여 1-bit register를 만들고, 이것을 n개 결합하면 n-bit register가 된다. 그리고 n-bit register를 여러개 묶으면 RAM이 만들어진다.

 

  • 틱(tick), 톡(tock), 클록(clock), 주기(cycle)

시간을 모델링하기 위해 사용되는 용어(개념)들이다.

틱과 톡 : 2진 신호(0-1)
클록 : 2진 신호를 연속적으로 생성
주기 : '틱'의 시작과 다음번 '톡'의 끝까지 경과된 시간

 

  • 시간문제

지금까지 칩(게이트)들은 입력에 즉시 응답한다고 가정했다. 예를 들어 ALU에 '7, 2, 뺄셈'을 입력하면 5가 출력된다.

하지만 실제로는 다음과 같은 이유롤 항상 지연이 발생한다.

첫째, 칩의 입력 신호는 다른 칩의 출력에서 이동해 온 것이며, 이동에는 시간이 걸린다.
둘째, 칩이 계산을 수행하는 데도 시간이 걸린다.

 

시간 지연 현상은 컴퓨터에서 '동기화'라고 하는 중요한 문제를 야기한다. 따라서 이 문제를 해결하기 위해 컴퓨터에서는 이 시간을 조금 다르게 바라본다.

컴퓨터에서 시간의 개념은 이산적이며, 주기1, 주기2, 주기3 같은 식으로 표현한다. 예를 들어 ALU에 x+y를 계산하라고 명령을 내렸다고 생각해 보자. 그런데 x는 근처 레지스터의 출력 값이고, y는 멀리 위치한 RAM 레지스터의 출력 값이다. 이럴 경우, 거리, 저항, 간섭 같은 물리적 제한 때문에, x 및 y의 전기적 신호가 ALU에 도착하는 시점이 서로 다를 가능성이 높다. 그러므로 ALU가 올바른 x+y 결과를 출력할 때까지는 시간이 좀 걸리며, 그 전의 ALU 출력은 의미 없는 값이 된다.

이 문제를 어떻게 극복할까? 사실, 이산적인 시간 개념을 도입하면 이 문제는 신경 쓸 필요가 없다. 그냥 컴퓨터 아키텍처 내에서 비트 하나가 가장 긴 경로를 따라 전송되는 시간과, 칩 내에서 가장 오래 걸리는 계산 시간을 더한 것보다 클록 주기를 살짝 더 길게 만들기만 하면 된다. 왜냐하면 우리는 주기 사이의 중간 상태(변화)에 대해서는 확인하지 않기 때문이다. 따라서 주기가 끝날 때는 ALU의 출력이 유효함을 보장할 수 있다. 한마디로 이 방법은 서로 다른 하드웨어 부품들을 하나의 시스템으로 동기화되도록 만드는 기술이다.

 

  • 조합 칩(combinational chip), 순차 칩(sequential chip)

가장 기본적인 순차 칩은 DFF로, 이 칩을 포함하는 칩들은 모두 직접적이든 간접적이든 순차 칩으로 불린다.

아래 그림은 조합 논리와 순차 논리 구성을 각각 보여주고 있다.

순차 칩은 피드백 루프를 통해 이전 시간 단위의 입력 및 출력에 응답할 수 있다.

조합 칩은 시간을 인지하지 못하기 때문에, 피드백 루프를 넣으면 '출력 → 입력',  '입력 → 출력'을 따르므로, 결국 출력이 자기 자신을 따라 결정된다는 문제가 생긴다. 하지만 피드백 루프가 DFF를 거친다면, 출력을 다시 입력으로 넣는 데 전혀 문제가 없다. 왜냐하면 DFF 자체에 시간 지연이 있어서 시간 t의 출력이 자기 자신이 아니라 시간 t1의 출력을 따르기 때문이다.