이번 문서의 목표: 이 파일을 다 읽으면 RAM과 ROM을 종류별로 구분하고, 기억장치의 용량·주소선·데이터선 사이의 관계를 계산하며, 작은 메모리 칩 여러 개를 조합해 원하는 크기의 메모리를 구성하는 방법을 설계할 수 있다.
왜 논리회로 과목에서 기억장치를 다루는가
06편에서 배운 진법·자리값, 17편에서 배운 ROM의 조합논리적 구조(주소를 입력으로, 저장된 값을 출력으로 하는 거대한 진리표), 18~22편의 플립플롭·레지스터는 모두 “기억장치”라는 하나의 주제로 수렴한다. 독학사 논리회로 출제기준은 CPU 파이프라인이나 캐시 정책 같은 컴퓨터구조 심화 내용까지는 다루지 않지만, 기억장치를 게이트·플립플롭의 집합으로 이해하고 용량·주소를 계산하는 수준은 시험 범위에 포함된다.
쉽게 말하면: 기억장치는 결국 “주소를 넣으면 그 자리에 저장된 데이터가 나오는 회로”이며, 이 편에서는 그 회로의 크기를 숫자로 계산하는 법을 다룬다.
RAM과 ROM: 읽고 쓰는가, 읽기만 하는가
쉽게 말하면: RAM은 전원이 켜져 있는 동안 자유롭게 읽고 쓸 수 있는 기억장치이고, ROM은 원래 정해진 값을 읽기 위주로만 쓰는 기억장치다.
RAM(Random Access Memory, 임의접근기억장치)은 이름과 달리 핵심은 “무작위(random)“가 아니라, 어느 주소든 접근하는 데 걸리는 시간이 똑같다는 뜻이다(순서대로만 읽어야 하는 테이프 같은 순차접근장치와 대비된다). RAM은 전원이 공급되는 동안 자유롭게 값을 읽고 쓸 수 있지만, 전원이 꺼지면 저장된 내용이 사라지는 휘발성(volatile) 메모리다.
| 구분 | SRAM(Static RAM) | DRAM(Dynamic RAM) |
|---|---|---|
| 저장 원리 | 플립플롭(래치) 회로로 값을 유지 | 커패시터(축전기)에 전하를 충전해 값을 유지 |
| 재충전(refresh) 필요 여부 | 불필요(전원만 있으면 계속 유지) | 필요(커패시터 전하가 새어 나가 주기적으로 재충전해야 함) |
| 속도 | 빠름 | 상대적으로 느림 |
| 셀 하나당 필요한 트랜지스터 수 | 많음(보통 6개 내외) | 적음(1개 트랜지스터+1개 커패시터) |
| 집적도·용량 대비 가격 | 낮은 집적도, 비쌈 | 높은 집적도, 저렴 |
| 대표 용도 | 캐시 메모리처럼 속도가 중요한 곳 | 주기억장치(메인 메모리)처럼 용량이 중요한 곳 |
ROM(Read Only Memory, 읽기전용기억장치)은 전원이 꺼져도 내용이 사라지지 않는 비휘발성(non-volatile) 메모리이며, 이름대로 원래는 읽기만 가능하도록 설계되었으나, 기술 발전에 따라 제한적으로 다시 쓸 수 있는 종류들이 등장했다.
| 종류 | 정식 명칭 | 데이터 기록 시점 | 데이터 지우기·재기록 방법 |
|---|---|---|---|
| Mask ROM | Mask Read Only Memory | 제조 공정에서 데이터를 회로에 직접 새겨 넣음 | 불가능(제조 후 변경 불가) |
| PROM | Programmable ROM | 제조 후 사용자가 딱 한 번 프로그래밍 | 불가능(한 번 쓰면 끝) |
| EPROM | Erasable Programmable ROM | 사용자가 프로그래밍 | 자외선(UV)을 쬐어 전체를 지우고 재기록 |
| EEPROM | Electrically Erasable PROM | 사용자가 프로그래밍 | 전기 신호로 바이트 단위 지우고 재기록 |
| Flash memory | 플래시 메모리 | 사용자가 프로그래밍 | 전기 신호로 블록 단위로 빠르게 지우고 재기록 |
시험 함정: “ROM은 절대 다시 쓸 수 없는 메모리다”라는 진술은 EPROM·EEPROM·플래시 메모리를 무시한 틀린 설명이다. ROM의 핵심 성질은 재기록 불가능이 아니라 비휘발성(전원이 꺼져도 내용 유지)이며, 재기록 가능 여부는 ROM의 세부 종류에 따라 다르다.
기억장치의 조직: 셀, 워드, 주소선, 데이터선
쉽게 말하면: 메모리는 여러 개의 방(주소로 구분되는 저장 칸)이 늘어선 아파트와 같아서, “몇 개의 방이 있고 방마다 몇 비트를 담을 수 있는지”만 알면 필요한 배선 수를 계산할 수 있다.
- 셀(cell): 1비트를 저장하는 가장 작은 단위(플립플롭 1개 또는 커패시터 1개에 해당).
- 워드(word): 한 번의 접근으로 함께 읽거나 쓰는 비트 묶음. 워드의 크기(비트 수)를 워드 길이(word length)라 한다.
- 주소선(address line): 몇 번째 워드에 접근할지 지정하는 신호선. 주소선이 개라면 개의 서로 다른 워드를 구분해 가리킬 수 있다.
- 데이터선(data line): 워드 하나를 실제로 실어 나르는 신호선. 데이터선의 개수는 워드 길이(비트 수)와 같다.
기억장치의 용량(capacity)은 “몇 개의 워드가 있고, 워드 하나가 몇 비트인지”로 표현한다.
예를 들어 ” 메모리”라는 표기는 개의 워드가 있고, 워드 하나가 비트라는 뜻이다(전산 분야의 는 정확히 이 아니라 를 뜻한다는 점을 06편에서 배운 진법 감각으로 다시 확인하자).
필요한 주소선 개수 계산
메모리라면 워드 개수가 이므로 주소선은 개가 필요하고, 데이터선은 워드 길이 그대로 개가 필요하다.
용량 계산 예제: 전 과정을 손으로 밟기
문제: 어떤 기억장치의 용량이 이다. 필요한 주소선의 개수와 데이터선의 개수는?
1단계 — 워드 개수를 2의 거듭제곱으로 바꾼다
2단계 — 주소선 개수를 구한다
워드 개수가 개이므로, 이를 모두 구분해 가리키려면 주소선이 개 필요하다.
3단계 — 데이터선 개수를 구한다
워드 길이가 비트이므로, 워드 하나를 통째로 실어 나르는 데이터선은 개가 필요하다.
4단계 — 전체 비트 용량을 확인한다(검산)
결과 해석: 메모리는 주소선 12개, 데이터선 16개로 구현되며, 총 저장 용량은 비트 단위로 비트, 바이트 단위로는 바이트다. “이니까 용량이 바이트”라고 워드 개수만 보고 답하면 워드 길이가 바이트(8비트)가 아니라 바이트(16비트)라는 사실을 놓쳐 절반의 값을 답하게 되므로, 반드시 워드 길이를 바이트로 환산해 곱해야 한다.
작은 칩을 조합해 큰 메모리 만들기
쉽게 말하면: 원하는 크기의 메모리 칩이 없을 때는, 작은 칩을 옆으로 늘어놓아 워드 길이를 늘리거나(워드 확장), 위아래로 쌓아 워드 개수를 늘리는(주소 확장) 두 가지 방법으로 원하는 용량을 만든다.
실제로는 필요한 용량의 메모리 칩이 항상 존재하지 않으므로, 작은 칩 여러 개를 조합해서 원하는 용량을 만든다. 두 가지 확장 방식이 있다.
워드 확장(word expansion): 비트 폭을 넓힌다
칩(워드 개수는 충분한데 워드 길이가 부족)을 2개 나란히 사용해서 메모리를 만들 수 있다. 두 칩에 같은 주소선을 동시에 연결하고, 한 칩은 상위 4비트, 다른 칩은 하위 4비트를 담당하게 하면, 주소 하나에 대해 두 칩이 동시에 응답해 합쳐서 8비트 워드가 된다.
주소 확장(address expansion): 워드 개수를 늘린다
칩(워드 길이는 충분한데 워드 개수가 부족)을 2개 사용해서 메모리를 만들 수 있다. 이번엔 두 칩의 데이터선을 그대로 공유하되, 추가 주소선 1개를 디코더(16편에서 배운 디코더)에 연결해 두 칩 중 어느 쪽을 선택할지(칩 선택, chip select) 결정한다.
이므로 전체 주소선은 개가 필요한데, 칩 하나가 이미 개의 주소선()을 갖고 있으므로, 남는 주소선 개()를 디코더에 연결해 두 칩 중 하나를 켜고 끄는 칩 선택 신호로 사용한다.
시험 함정: 워드 확장과 주소 확장을 헷갈리면 안 된다. 워드 길이(비트 폭)가 부족하면 칩을 나란히(가로로) 이어 붙이고, 워드 개수(용량)가 부족하면 칩을 여러 뱅크로(세로로) 쌓아 올려 추가 주소선으로 선택한다. 두 방식을 반대로 적용하면 실제로는 존재하지 않는 회로 구성이 된다.
단순한 메모리 맵 읽기
쉽게 말하면: 메모리 맵은 전체 주소 공간을 몇 개의 구역으로 나눠 “이 주소 범위는 ROM, 저 주소 범위는 RAM”처럼 미리 정해 놓은 배치도다.
컴퓨터 시스템은 하나의 큰 주소 공간 안에 ROM(부팅 코드 저장), RAM(작업 중 데이터 저장), I/O 장치(입출력 포트)를 함께 배치한다. 이렇게 주소 범위별로 어떤 장치가 응답하는지 정리한 표를 메모리 맵(memory map)이라 한다.
| 주소 범위(16진수) | 크기 | 할당 장치 |
|---|---|---|
0000–3FFF | 16K | ROM(부팅용 프로그램) |
4000–BFFF | 32K | RAM(작업용 메모리) |
C000–FFFF | 16K | I/O 장치(입출력 포트) |
이 표에서 각 구간의 크기는 끝 주소에서 시작 주소를 뺀 값에 1을 더해 계산한다. 예를 들어 0000부터 3FFF까지는 개의 주소이며, 이 범위 전체가 ROM에 할당되어 있다는 뜻이다. 시스템은 CPU가 내보낸 주소가 어느 구간에 속하는지 판단해(디코더로) 해당 장치를 활성화(칩 선택)한다.
핵심 정리
- RAM은 읽고 쓸 수 있지만 전원이 꺼지면 내용이 사라지는 휘발성 메모리이며, SRAM(플립플롭 기반, 빠름)과 DRAM(커패시터 기반, 재충전 필요, 저렴)으로 나뉜다.
- ROM은 비휘발성 메모리이며, Mask ROM·PROM(재기록 불가)부터 EPROM·EEPROM·플래시(재기록 가능)까지 종류가 다양하다.
- 기억장치의 용량은 워드 개수 × 워드 길이로 표현하며, 워드 개수가 개면 주소선이 개, 데이터선은 워드 길이만큼 필요하다.
- 작은 칩으로 큰 메모리를 만들 때, 워드 길이가 부족하면 워드 확장(칩을 나란히 연결), 워드 개수가 부족하면 주소 확장(추가 주소선으로 칩 선택)을 사용한다.
- 메모리 맵은 전체 주소 공간을 ROM·RAM·I/O 등으로 구역을 나눠 배치한 표이며, 각 구역의 크기는 끝 주소와 시작 주소의 차이에 1을 더해 계산한다.