논회랑 컴구는 한 세트로 움직이는 것이 좋은듯. 지금은 둘이 별개로 진행하고있긴하지만...
이번에는 메모리에 대해 알아보고자한다. 컴퓨터의 핵심부품 중 하나였던 CPU를 지나서, 메모리를 알아보고자한다. 앞으로 'RAM'이라는 용어를 사용할 것인데, 이는 메모리와 같은 의미라고 볼 수 있다.
RAM
특징
여태까지 CPU에 대해서 다루면서 "메모리에서 연산할 데이터를 가져온다" "메모리에서 저장된 명령어를 가져온다"라고 표현했듯이, 실행할 프로그램의 명령어와 데이터가 저장된다.
중요한 점은 전원을 끄면 RAM에 저장된 명령어와 데이터가 모조리 날아간다. 그래서 RAM을 휘발성 저장 장치(volatile memory)라고도한다. 이와 대척점에 있는 것이 비휘발성 저장 장치(non-volatile memory). SSD, CD-ROM, USB메모리와 같은 보조기억장치들이 해당한다.
보조기억장치를 십분 활용하면 CPU가 데이터를 비휘발성으로 사용할 수 있다는 점이 있다...만 CPU는 보조기억장치에 직접적으로 접근할 수 없다.

이전에 논리회로와 가산기에 대해서 배울 때, 리플 캐리 가산기를 저성능 CPU에서 돌리면 약 5333 클럭, 그리고 최대 약 1.6㎲가 소요된다고했다. 이는 오직 '계산'에만 소요되는 시간으로, 추가로 값을 가져오는 시간이 필요하다.
이 때 RAM에 값을 저장하면 10ns~100ns가 소요되지만, 보조기억장치에 값을 저장하면 수십㎲~수십ms가 소요된다. 그러니까 저 가산기에 데이터를 태워서 값을 계산하는 것만큼 또는 그보다 더 많은 시간이 필요하다는 뜻.

같은 글에서 곱셈을 할 때 리플 캐리 가산기 두 개를 사용하면 속도가 두 배로 느려지므로 그렇게 CPU를 만든 회사를 고소하겠다고했는데, 보조기억장치를 주기억장치로 사용하면 1+1연산에도 훨씬 더 시간이 오래 걸릴 것이다.
막말로 1+1 연산에 명령어 가져오고, 보조기억장치에서 데이터 가져오고, 가산기에 데이터들 넣고, 그리고 이 값을 다시 보조기억장치에 넣는 과정을 사용하면 1+1 연산이 1초가 넘을 수 있다.
따라서 CPU가 보조기억장치에 직접적으로 접근하지 못하는 이유는 느려서다. RAM 정도는 그럭저럭 느린 편이기 때문에 RAM에는 CPU가 접근할 수 있다. 그래서 보통은 비휘발성 저장 장치에 보관할 데이터들을 보관하고, 휘발성 저장 장치에는 현재 CPU가 실행할 대상들을 저장한다.
그리고 CPU가 실행하고 싶은 프로그램이 보조기억장치에 있다면 이를 RAM으로 복사해와서 실행한다. 프로그램 구동에 몇 초 이상의 다소 오래 시간이 걸리는 이유가 보조기억장치에 접근해서 RAM으로 값을 가져와야하기 때문이다.
용량과 성능
RAM 용량과 성능에는 어떤 관계가 있을까?
우선 RAM 용량이 너무 적으면 성능에 좋지 않다.
https://www.quora.com/How-does-the-amount-of-RAM-affect-the-performance-of-a-computer-or-laptop
How does the amount of RAM affect the performance of a computer or laptop?
Answer (1 of 4): Well it’s your computer’s short term memory, so I’d say quite a bit. It’s a kind of storage, so there are space limitations. Anyone who collects as a hobby understands this. At one time, my whole comic book collection fit into a su
www.quora.com
이 글의 댓글을 참고해보면 좋은데, 과거 PC는 현재 RAM보다 많은 양의 데이터를 보조기억장치에서 불러올 수 없었다. 그리고 그걸 시도하면 오류를 발생시켰다.
현재는 개발자가 한 번에 로드하는 데이터의 양을 줄일 수 있으며, 때로는 여러 프로그램이 RAM을 사용 중이고, RAM의 용량이 부족하다면 실행 중이지 않은 프로그램이 RAM을 차지하는 공간의 절반을 보조기억장치로 보내고 RAM을 확보한다. (스왑)
문제는 어떤 방식이든 너무 느리다. 그리고 이 성능저하는 사용자가 직접적으로 겪게되므로, RAM 용량을 너무 적게 설계해서는 안된다.
다만 RAM 용량이 큰 것과 성능이 비례하지는 않는데, 어차피 보조기억장치에 접근하는 시간은 RAM의 크기에 상관없이 비슷하므로 RAM 용량을 무지크게 잡는다고 드라마틱한 성능개선은 일어나지는 않는다.
종류
DRAM
Dynamic RAM
Dynamic이라는 용어에서 알 수 있듯이, 데이터가 동적이다. 즉, DRAM은 시간이 지나면 데이터가 점차 사라진다. 따라서 DRAM은 데이터의 소멸을 막기 위해 데이터를 재저장해야한다.
이런 불편한 점이 있지만, DRAM은 소비전력이 낮고, 저렴하다. 대용량으로 설계하기가 용이해서 DRAM을 주로 사용한다.

DRAM 구조. (출처: 위키백과)
복잡해보이지만 C라고 하는 부분(커패시터, Capacitor)에 1이나 0을 저장한다. 여기서 이제 데이터가 저장되고, 주기적으로 추가해주어야한다. FET는 스위치. 정보를 저장하면 안될 때 정보를 저장하는 불상사를 막기 위해 존재한다. 그래서 정보를 저장할 때 Word line에 전류를 흘러넣어서 스위치를 열고, Bit line에 저장할 정보를 넣거나 가져온다.
이러한 구조는 아주 단순한 편이지만, (뒤에 나오겠지만, SRAM은 트랜지스터 6개가 필요하다) 커패시터에 값을 넣어도 전하가 증발하고 (위에서 말한 DRAM의 단점) 또 값을 읽으려고 스위치를 여는 순간 값이 빠져나가기 때문에 읽고 나서 값도 추가해주저야한다.
그래도 그냥 커패시터에 데이터를 넣어두고 스위치로 막아놓은 후 주기적으로 채워주어야하는 구조이기 때문에 저렴하다. 소비전력도 적고. 그래서 일반적으로 사용하는 RAM은 DRAM이다.
SRAM
Static RAM
정적의 RAM으로, DRAM과 달리 RAM에 저장된 데이터가 변하지 않는다. 즉, DRAM과 달리 SRAM에 데이터가 저장되어도 시간이 지남에 따라 소멸되지 않는다. 따라서 주기적으로 데이터를 채워넣을 필요도 없고, 속도도 SRAM이 DRAM보다 빠르다.

SRAM의 구조. M이 트랜지스터이고, BL이 위에서의 Bit line, WL이 Word line에 해당한다.

생긴게 꽤 복잡한데, 6개의 트랜지스터에 값을 보관한다. 가운데 4개는 데이터유지, 양 옆 끝단의 2개는 입출력 스위치에 해당하는 트랜지스터다.
우선 하나씩 살펴보자면, 우선 값 1이 저장되어있을 때와 0이 저장만 할 때에는 BL에 아무런 신호도 통하지 않는다. 따라서 전류신호가 4개의 트랜지스터를 계속해서 돌게된다. 1이 저장되어있다면 M4가 켜져서 VDD -> M4 -> Q 을 따라서 M1을 켠다. M1이 켜져있다면 전류는 접지되어 ~Q에는 전류가 통하지 않는다. 따라서 Q에는 1, ~Q에는 0이 저장되는 상태가 완성. 그리고 회로에 흐르는 전기는 VDD라고하는 전원에서 계속 공급받는다. 전원이라고해서 건전지 같은 소모품이 아니라 어디선가 계속해서 전원을 공급받는 친구다. 시스템 전원이나 충전기라던가..
값 0이 저장되어있는 경우에는 M2가 켜진다. 그러면 VDD -> M2 -> ~Q를 따라서 M3를 켠다. 역시 M3는 접지되어있기에 Q로는 전류가 흐르지 않아 ~Q가 1, Q가 0인 상황이다. 따라서 Q에 접근해보면 이 메모리에 1이 저장되어있는지, 0이 저장되어있는지 알 수 있다.
회로에 조금 더 알아보면.. 각 M들은 FET이라고한다. FET는 입력부(M4의 경우 VDD와 연결된 부분이다.), 드레인(출력부, M4의 경우 Q와 연결된 부분), 게이트(전기를 통하게할지말지 정하는 부분, M4의 경우 ~Q와 연결된 부분). FET에 동글뱅이가 있다면 게이트에 들어오는 값이 0일 때 열리고, 없다면 1일 때 열린다.)
따라서 1을 저장하는 경우 M4는 ~Q가 0이므로 게이트가 열려서 Q로 전류가 흐른다. 0을 저장하는 경우 M4가 ~Q가 1이라 게이트가 닫힌다.

이게 값을 저장하는 방식. 값을 저장하려면 먼저 WL에 전류를 흘려넣어 M5와 M6을 열고, BL에 전류를 흘러넣는다. 1을 쓸 때 BL에 1, ~BL에 0을 넣는다. BL -> Q -> M1 / M2로 값이 전송된다.
다만 메모리에 0이 저장되어있을 때, M2에 흐르는 전류는 0이고, (그래서 M2가 열린다.) 셀에 1을 저장하려면 1로 바꿔야한다. 그러면 BL에서 들어오는 신호를 M2로 보내야하는데, 문제는 Q에서 M3와 그와 연결된 접지 때문에 대부분의 전류가 BL -> Q -> M3 -> 접지로 흐른다는 단점이 있다. 이럴 때는 그냥 BL에 큰 전압을 주면 약간의 전류가 M1, M2로 흐른다.
0을 쓸 때에는 BL에 0, ~BL에 1을 가한다.

읽는 방법
앞서 저장한 정보에 따라서 Q에 일정한 전류가 흐르거나 흐르지 않는다고 한 것처럼, 읽을 때에는 Q값만을 확인한다. 역시 WL에 1을 주고, BL와 ~BL에 1을 준다. 양쪽 스위치가 닫히면서 회로를 순환하던 1 신호가 Q에 닿아서, M6 스위치로 전류가 이동, (M3는 닫힌상태) BL선과 연결되고, 그리고 ~Q에는 전류가 흐르지 않고 M1에 의해서 접지, ~BL에는 회로가 연결되지 않는다.
그리고 난 후에 앞서 미리 BL과 ~BL에 인가한 전압을 비교할 수 있다. 만약 데이터가 저장된 값이 1이라면, Q와 BL 간 전위차는 미미한 편이므로 전압의 손실이 적을테지만, 전위차 때문에 ~BL에는 ~Q 쪽으로 전류가 흐를 것이기 때문제 ~BL은 전압이 떨어진다. 따라서 ~BL이 더 전압이 작다면 1, BL이 전압이 더 작다면 0이 저장된 것으로 인식한다.
따라서 4개의 트랜지스터가 서로 회로에 전류를 흘러가게하며 값을 유지하는 형태다. VDD에 의해서 전류도 지속적으로 전력을 공급받기 때문에 전류가 사라질 염려도 없고 일반적으로 속도도 더 빠르다. DRAM은 커패시터에서 전류가 나오기를 기다려야하기도하고, (전류가 거의 다 사라졌는데 값을 확인하면 그 미약한 전류가 커패시터에서 나올 때까지 기다려야한다.) 전기를 다시 채우는 중일 때 읽기작업을 수행하면 채우는 것이 다 끝날 때까지 대기해야한다. 그래서 DRAM이 더 느리다는 거.
하지만 위에서 볼 수 있듯이 회로가 복잡한 편이기 때문에 SRAM은 비싸다. 소비전력도 더 많고. 따라서 SRAM은 양이 적어도 되지만 성능이 빨라야하는, 캐시메모리에서 주로 사용하고, DRAM은 성능은 다소 느려도 되지만 양이 중요한 RAM에서 주로 사용하는 편이다.
SDRAM
SDRAM이란, Synchronous Dynamic RAM이다. DRAM의 일종으로, 클럭 타이밍에 맞춰서 CPU와 정보를 주고받는다. 즉, 매 클럭마다 CPU와 정보를 주고받는다.
DDR SDRAM
DDR SDRAM은 Double Data Rate SDRAM으로 SDRAM의 일종이다. 최근 가장 흔히 사용되며, DDR SDRAM은 대역폭을 넓힌 SDRAM이다. 대역폭(Data Rate)란 '데이터를 주고받는 길의 너비'를 뜻한다. 즉, 2배대역폭SDRAM정도...?
DDR SDRAM은 SDRAM의 특성을 그대로 가진다. 따라서 클럭마다 CPU와 정보를 주고받을 수 있으며, SDRAM에 비해 대역폭이 두 배이기 때문에 정보도 두 배로 보낼 수 있다. 즉, 한 클럭 당 정보를 두 번 교환할 수 있다. 그래서 DDR SDRAM이 두 배 정도 빠르다. 가장 처음의 DDR SDRAM은 1998년에 만들어졌고, 최근 흔히 사용하는 DDR SRAM은 DDR4 SDRAM으로 SDR SDRAM(일반적인 SDRAM. DDR과 구분하기 위해 SDR이라고 사용한다.) 보다 16배 빠르다. DDR4 SDRAM이 2014년에 출시되었고, 2020년에 DDR5 SDRAM이 출시되었다. 이거는 SDR SDRAM보다 32배 빠르고, 22년 전 출시된 DDR SDRAM보다 16배 빠르다.
암튼 이렇게 메모리의 형태와 성능에 대해서 알아보았다. 사실 반도체나 회로지식이 적기 때문에 내용도 부정확할 수 있고 좀 어렵기도했다.. 빨리 논회를 배워야겠음. 추가로 전전 쪽도 한 번 기웃거려보고싶기도하다. 우선 간만 계속 봐보기로.
'CS > 컴퓨터구조' 카테고리의 다른 글
| [컴퓨터구조] 혼공컴구 독서 #9 - 메모리와 주소의 종류, MMU, 캐시메모리와 CPU 경향성 (1) | 2026.02.03 |
|---|---|
| [컴퓨터구조] 혼공컴구 독서 #7 - ISA와 CISC, RISC (0) | 2026.01.30 |
| [컴퓨터구조] OOO, OoOE, 토마슬로 알고리즘을 통한 비순차적 명령어 처리 + 혼공컴구 독서 #6 - CPU 성능향상 (1) | 2026.01.25 |
| [컴퓨터구조] 혼공컴구 독서 #5 - 명령어 사이클과 인터럽트 (0) | 2026.01.23 |
| [컴퓨터구조] 혼공컴구 독서 #4 - CPU 레지스터 (0) | 2026.01.20 |
