[컴퓨터구조] 메모리
메모리는 데이터와 명령을 일시적으로 저장할 수 있고, 저장된 데이터를 읽을 수도 있다.
컴퓨터에는 현재 실행되고 있는 프로그램과 데이터를 저장하기 위한 주기억 장치(Main memory) 대용량 보조 기억 장치(Mass memory)가 있다.
보조 기억 장치로 사용되는 테이프, 하드디스크, SSD는 동작 속도가 느리다.
메모리와 연산기는 짝꿍이다. 메모리는 땔감과 같은 존재이다. 연산기는 땔감을 통해 동작한다.
메모리는 기억을 하며 기억한 정보를 연산기에 전달하며 연산기는 수준 높은 동작을 하게 된다.
CPU와 관련된 소자들을 정리해보자.
CPU - 레지스터 - 레지스터 파일 - 캐쉬 - 메인메모리 - SSD, HDD - CD/ROM, DVD, Tape
메모리의 구조
메모리는 2진 데이터를 워드라는 비트의 집합으로 저장한다. 즉, 워드는 메모리에서 입출력 시 한 번에 전송되는 비트들을 의미한다.
바이트는 1byte=8bit 즉, 8비트는 1바이트이다. 대부분 컴퓨터는 8비트의 배수의 길이를 워드 길이로 사용한다. 따라서 16비트 워드는 2바이트, 32비트 워드는 4바이트이다.
메모리는 제어 신호 2개와 레지스터 2개를 통해 이루어지며, 제어 신호는 데이터 전송 방향을 결정하고 레지스터는 MARD와 MBR이 있다.
- 읽기 제어 신호 read control signal: 메모리로부터 데이터를 읽으라는 신호다.
- 쓰기 제어 신호 write control signal: 데이터를 메모리에 저장하라는 신호다.
- 메모리 주소 레지스터 MAR, memory address register: 메모리에 있는 특정한 워드와 데이터 전송을 수행하는 경우, 해당 워드의 주소가 MAR에 전송된다.
- 메모리 버퍼 레지스터 MBR, memory buffer register: 레지스터와 외부 장치 사이에서 전송되는 데이터의 통로이다. 즉, 메모리 쓰기 신호가 오면 내부 제어는 MBR의 내용을 지정된 주소의 메모리에 저장하며 읽기 제어 신호가 오면 내부 제어는 지정된 주소의 메모리의 내용을 MBR로 전송한다.

메모리는 읽기 제어 신호를 통해 메모리 특정 주소에 저장된 데이터를 가지고 올 수 있고 쓰기 제어 신호를 통해 데이터를 메모리 해당 주소에 저장할 수 있다.
메모리는 2^n 워드 * m비트이다. 전반적으로 관련 서적들은 대부분 이 수식을 통해 메모리를 설명한다.
n비트는 메모리 주소 크기라고 볼 수 있다. 2진수로 이루어진 수이다. n비트는 MAR은 최대 2^n개의 메모리 주소를 표시할 수 있다. 컴퓨터 메모리 1,024(2^10) 워드 일 때 10비트 MAR이 필요하고 1,048,576(2^20) 워드일 때 20비트 MAR이 필요하다.
m비트는 쓰고자 하는 입력 데이터라고 보면 된다. 즉, n비트의 주소에 m비트 데이터를 저장한다.
결론적으로 메모리 2^n 워드 * m 비트는, n=메모리 주소의 크기이고 m=주소마다 저장할 수 있는 데이터의 크기라고 볼 수 있다.
MAR은 2진수 메모리 접근 주소의 내용을 지니고 있다. MAR의 값을 통해 메모리에 접근한다.
MBR은 메모리에 저장하고자 하는 데이터이다. 2진수로 구성되어 있다. 저장 말고 메모리에 값을 읽는 과정에서 MAR 값 -> 메모리 접근 -> 데이터 꺼내기 -> MBR 데이터 값 쓰기 -> 전송 간략하게 이런 식이다.
메모리 용량이 1024*8이라고 할 때 MAR과 MBR은 각 각 몇 비트일까?
2^10*8에서 10승은 MAR이고 *8은 MBR이다.
따라서 MAR = 10비트 MBR = 8비트이다.
여기서 MAR = address line = address bus, MBR = data line = data bus = word의 길이다.
메모리의 동작
메모리는 동작이 사실 읽기/쓰기 2가지 동작으로 구동된다.
읽는 동작 -> 1) 주소 전송 2) 읽기 제어신호
메모리 읽기 동작
- 선택된 워드의 주소를 MAR로 전송한다.
- 읽기 제어 신호를 동작시킨다.

대충 이런 식으로 메모리의 값을 읽는다. 0000101110 = 10진수 46이다. MAR의 값은 메모리의 주소 46번지를 참조한다. 메모리에 읽기 제어 신호가 입력되었을 때 수행 결과, 46번지에 저장되어 있던 2진 데이터를 MBR로 전송한다.
메모리 쓰기 동작
MAR이 지정하는 주소의 메모리에 새 데이터를 저장하는 동작 순서이다.
- 지정된 메모리의 주소를 MAR로 전송한다.
- 저장하려는 데이터 비트를 MBR로 전송한다.
- 쓰기 제어 신호를 동작시킨다.

메모리에 쓰기 제어 신호가 입력되었을 때 MBR에 저장되어 있던 데이터 비트를 46번지에 저장한다.
메모리 분류

메모리를 분류하는 관점은 다양하나 대표적으로 접근 방법, 기록 기능, 기억 방식, 휘발성 여부 등에 따라 분류된다.
접근 방법에 의한 분류는 메모리의 주소에 해당하는 위치에 데이터를 읽거나 쓰는 것을 엑세스라고 한다. 액세스 하는 방법은 2가지인데 랜덤 엑세스 메모리 (RAM, Random Access Memory)와 순차 엑세스 메모리 (SAM, Sequential Access Memory)이다.
기록 기능에 의한 분류는 사용자가 기록과 판독을 모두 수행할 수 있는 메모리 RWM(Read and Write Memory)라고 하고, 판독만 가능한 메모리는 ROM(Read Only Memory)라 한다. 일반적으로 RAM은 RWM 메모리를 가리키는 것이다.
ROM이 존재하는 이유는 읽기만 가능한데 메모리를 함부로 쓰면 문제가 생길까 봐 ROM이 탄생했다.
기억 방식에 의한 분류는 SRAM과 DRAM으로 구분한다. SRAM은 2진 정보를 저장하는 내부 플립플롭으로 구성되며, 저장된 정보는 전원이 공급되는 동안 보존된다. DRAM은 2진 정보를 커패시터에 공급되는 전하 형태로 보관한다. 그런데 커패시터에 사용되는 전하는 시간이 경과하면 방전되므로 DRAM은 일정한 시간 안에 재충전해야 한다.
DRAM은 전력 소비가 적고, 단일 메모리 칩에 더 많은 정보를 저장할 수 있고 SRAM은 사용하기 쉽고 읽기와 쓰기 사이클이 짧다는 특징이 있다.
휘발성/비휘발성 메모리는 전원이 꺼지면 저장된 내용이 지워지는 메모리 형태를 휘발성이라고 한다. RAM 외부에서 공급되는 전원을 통해 정보를 저장한다. 반면 자기 코어나 자기 디스크 ROM 같은 비휘발성 메모리는 전원이 차단되어도 기록된 정보가 계속 유지된다.
컴퓨터에서 CPU와 주기억 장치 및 입출력 장치 사이에 데이터를 송수신하기 위해 버스 선들의 병렬연결을 통해 데이터를 송수신한다.
버스는 크게 주소 버스, 데이터 버스, 제어 버스가 있다.
주소 버스: 1개의 메모리 위치를 선택하기 위해 CPU에서 메모리 IC까지 2진 주소를 전달하는 단방향 버스
데이터 버스: CPU와 메모리 IC 사이에서 데이터를 옮기는 양방향 버스
제어 버스: CPU에서 메모리 IC까지 제어 신호를 전달하는 단방향 버스