본문 바로가기
컴퓨터공학/기초

레지스터와 RAM

by 하이방가루 2022. 7. 30.
728x90
반응형

이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다.

컴퓨터가 계산한 결과가 버려진다면 계산을 해도 아무 소용이 없다. 계산 결과가 어떻게든 저장되어야지 유용하게 쓰일 수 있고, 여러 연산이 연속해서 수행될 수도 있다. 그래서 컴퓨터 메모리가 필요하다.

 

우리가 작업을 하다가 갑자기 컴퓨터가 꺼지면 작업하던 것이 사라지는데 이것은 컴퓨터가 Random Access Memory(RAM)을 사용하기 때문이다. RAM은 전원이 켜져 있을 때만 작업 상태 같은 것을 저장할 수 있다.(지속성 메모리(Persistent Memory)라고 불리는 다른 유형의 메모리는 전력 공급 없이도 살아남을 수 있다.)

 

한 비트 정보를 저장할 수 있는 회로를 구성해 보자. 우리는 다음과 같은 스스로 되돌아오는 회로(Loop back)도 만들 수 있다. 

위의 회로에서 처음 A와 B의 상태가 모두 0이라 가정하자. 이제 A의 상태를 1로 바꾸면 OR Gate는 1과 0을 입력받으므로 1을 출력하게 된다. 그리고 이 출력은 B의 상태를 1로 바꾸게 되고, 이제 A의 상태를 다시 0으로 바꾸어도 B의 상태가 1이기 때문에 OR Gate는 계속 1을 출력하게 된다. 따라서 "1"을 기록하는 회로를 얻게 되었다. 다만, 문제가 있다. 이 회로의 출력이 1로 고정되어 바뀌지 않는다는 점이다.

이번에는 위의 회로에서 처음 A와 B의 상태가 모두 1이라 가정하자. A와 B가 모두 1이므로 AND Gate는 1을 출력할 것이다. 이제 A의 상태가 0으로 바뀌면 AND Gate는 0을 출력할 것이고, 이것은 B의 상태를 0으로 바꾼다. 이제 A가 다시 0이 되어도 AND Gate는 0을 출력할 것이다. 따라서 "0"을 기록하는 회로를 얻게 되었다. 다만, 이전 회로와 마찬가지로 출력이 0으로 고정되어 바뀌지 않는다.

 

이제 쓸만한 메모리 조각을 얻기 위해 두 회로를 합쳐보자.

AND-OR LATCH

위와 같은 회로를 AND-OR 래치(자물쇠 또는 걸쇠를 뜻한다.)라고 한다. 이 회로는 2개의 입력을 갖고 있다. 출력을 "1"로 만드는 SET입력과 출력을 "0"으로 만드는 RESET입력이다. 이제 한 비트의 정보를 기억하는 메모리가 만들어졌다.

 

이것을 래치라고 하는데, 특정한 값을 붙잡아서 유지하는 성질 때문이다. 메모리에 데이터를 넣는 동작을 쓰기(writing)라고 하고, 반대로 데이터를 받아오는 동작을 읽기(reading)이라고 한다.

 

논리 게이트 몇 개를 추가하여 하나의 선으로는 데이터를 입력하고 다른 선으로 메모리 쓰기를 가능하게 하거나 그럴 수 없게 잠가버리게 하자.

Gated Latch

이것을 Gated Latch라고 하는데 문(Gate)를 열거나 닫을 수 있다는 뜻이다.

DATA INPUT WRITE ENABLE OUTPUT
0 0 이전 OUTPUT
1 0 이전 OUTPUT
0 1 0
1 1 1

 

이런 래치 8개를 옆으로 나란히 두면, 1바이트(8비트)의 정보를 저장할 수 있게 된다. 이렇게 작동하는 래치 그룹을 레지스터(register)라고 부른다. 이런 레지스터는 숫자 한 개를 저장할 수 있다. 그리고 레지스터의 비트 수는 너비(width)라고 부른다. 초기의 컴퓨터는 8비트 레지스터를 가지고 있었고 16,32 순으로 커져, 요즘 대부분의 컴퓨터는 레지스터가 64비트의 너비를 가진다.

8비트 레지스터

레지스터에 쓰기 위해서는 먼저 모든 래치를 켜야 한다. 선 하나를 모든 래치의 enable 입력에 연결하고 1로 세팅하자. 그런 뒤에 8개의 데이터 선을 이용하여 데이터를 보내고 enable을 다시 0으로 되돌린다. 그러면 8비트 값은 메모리에 저장된다. 래치를 나란히 놓아서 적은 수의 비트를 처리하는 것은 문제가 없다. 하지만 64 비트 레지스터는 64개의 데이터 입력을 위한 선들과 64개의 출력을 위한 선이 필요해진다. 다행히 모든 래치의 enable 선은 1개만 있어도 되지만 그래도 129개의 선( 1(E)+64(D)+64(Q) )이 필요하다. 레지스터가 커질수록 더 많은 선이 필요할 것이다.

이런 문제를 해결하기 위해 행렬(Matrix)를 사용한다.

16 X 16 (256) LATCH MATRIX

256비트 레지스터를 위해서는 16개의 행과 16개의 열로 된 16x16개 격자로 구성한다. 그리고 래치 하나를 활성화하려면 해당하는 행과 열을 같이 켜주면 된다.

1개의 Matrix Latch

AND 게이트를 사용하여 행과 열이 모두 1이 되어야 1을 출력해서 단 하나의 래치만 선택할 수 있는 신호로 사용할 수가 있다. 이렇게 행/열을 설치하기 때문에 모든 래치에 write enable을 선 하나로 연결할 수 있다. 하나의 래치가 쓰기 가능해지려면 행, 열, write enable 선이 모두 1이 되어야만 한다. 그렇기 때문에 주어진 시간에 오직 하나의 래치만 작동한다. 또한 이것은 오직 한 개의 래치만 쓰기가 가능해지고, 데이터를 저장할 수 있기 때문에 데이터 입출력에 하나의 공유 회선을 사용할 수 있다는 것을 의미한다. 같은 방법으로 하나의 read enable 선을 사용해서 하나의 래치를 콕 찍어서 데이터를 읽어올 수 있다.

정리하면 256비트 메모리를 위해서 총 35개의 선( 16(row)+16(col)+1(write)+1(read)+1(data) )만 사용하면 된다.

 

이때, 각 교차점을 정확하게 지정하기 위해서 메모리 주소(Memory Address)가 필요하다. 최대 16개의 행이 있기 때문에, 행 주소를 4비트로 표현한다. 열 주소도 마찬가지다.

 

특정한 행이나 열을 선택한 주소로 변환하기 위해서는 멀티플렉서(Multiplexer)라고 하는 특별한 부품이 필요하다.

MULTIPLEXER

행과 열을 모두 변환하기 위해서는 2개의 멀티플렉서가 필요하다.

256비트 메모리라고 할지라도 뭔가를 하기에는 충분하지 않다. 따라서 이것을 확장해보자.

256비트 메모리

256비트 메모리를 다음과 같이 추상화하고, 레지스터와 같이 8개의 메모리를 한 열로 붙여보자.

8개를 일렬로 세웠으니, 8비트(1바이트)의 숫자를 저장할 수가 있다. 이렇게 하려면, 8개 모든 256비트 메모리에 정확히 똑같은 주소를 동시에 입력해야 한다. 그리고, 각 메모리에는 숫자의 한 비트씩 저장한다. 따라서 이 부품은 256개의 주소에 256 바이트를 저장할 수 있게 되었다. 이것을 한 번 더 추상화하면 다음과 같이 표현할 수 있다.

요즘 컴퓨터에서 메모리를 메가바이트와 기가바이트로 확장하는 방법도 위의 과정과 동일하다. 작은 메모리 묶음을 크고 더 큰 배열로 묶은 것이다.

메모리 위치의 수가 증가하면, 주소도 증가해야 된다. 8비트의 주소는 256바이트의 메모리를 나타내기에 충분하지만 그게 최대이다. 기가바이트(십억 바이트) 메모리의 주소를 나타내려면 32비트 주소가 필요하다.

 

이러한 구조 덕에 메모리는 언제, 어느 위치든 무작위 순서로 접근이 가능하다. 그래서 임의 접근 메모리(Random Access Memory), RAM이라고 부른다. 컴퓨터에 얼마나 큰 RAM을 달았는지 얘기하는 것은 결국 컴퓨터 메모리를 말하는 것이다. 

실제 RAM을 보면 보드에 8개의 메모리가 납땜되어있다.

 

우리가 래치를 이용해서 만든 것을 SRAM(Static Random Access Memory;정적 무작위 접근 기억장치)라고 한다. RAM은 이 밖에도 DRAM, Flash 메모리, NVRAM과 같이 여러 종류가 있다. 이것들도 SRAM과 기능은 거의 유사하다. 단지 각각의 비트를 저장하는 회로에 차이가 있을 뿐이다. 예를 들면, 다른 논리 회로, 축전기(캐패시터), 차지 트랩, 멤리스터가 있다. 하지만 근본적으로, 이 모든 기술은 메모리 셀이 대량으로 포개진 행과 열 안에서 정보 비트를 저장하는 기술이다.

728x90
반응형

'컴퓨터공학 > 기초' 카테고리의 다른 글

명령어와 프로그램  (0) 2022.07.31
중앙 처리 장치 (CPU)  (0) 2022.07.30
컴퓨터는 어떻게 계산할까?-ALU편  (0) 2022.07.28
이진수로 숫자와 문자 나타내기  (0) 2022.07.28
부울 연산과 논리 게이트  (0) 2022.07.26

댓글