본문 바로가기

CS ﹒ Algorithm/Computer architecture

컴퓨터 구조 (6) 메모리의 종류와 오류 검출 (Register, RAM, ROM, HDD, Flash)

 

 

1. ROM (Read only memory)

 

귀엽게 생겼다.

 

이름 그대로 한 번 기록한 정보가 전원 공급과 관계 없이 반영구적으로 기억되며, 삭제 혹은 수정이 불가능한 기억장치를 의미한다.

롬 메모리는 4가지로 분류되며 항목은 다음과 같다.

 

(1) Mask ROM

: 가장 고전적인 방식으로 프로그램을 만들어서 ROM을 생산하는 공장에 의뢰하면 대량으로 생산한다.

공장 생산 특성상 대량 오더만 가능하며, 당연히 생산량이 적어도 반드시 기준치만큼의 금액을 지불해야 한다.

그러나 대량 생산 시에는 단가가 저렴한 편이기 때문에, 절대로 소프트웨어를 지울 이유가 없는 거의 모든 가전제품은 Mask ROM을 탑재하고 있다.

 

(2) PROM

: 공장에서 애초에 물리적으로 만들어서 보내주는 것이 아닌 소비자가 직접 저장할 수 있는 형태로써 단 한 번만 저장할 수 있다.

현재로써는 ROM이라는 물건 자체가 거의 기업에서 사용하는 것이기 때문에 Mask ROM보다 더 비싼 PROM은 수요가 거의 없다.

 

(3) EPROM

: PROM과 달리 자외선을 이용하여 기록된 내용을 지우고 다시 기록할 수 있다.

그러나 마찬가지로 대량 생산이 가능한 Mask ROM과 달리 기업에서 쓸 것도 아니고 일반 소비자가 사용할 것도 아니니 수요는 없다.

 

(4) EEPROM

: 드디어 원시 시대를 벗어나 전기적인 신호로 기억된 내용을 지울 수 있는 롬이다.

속도는 엄청나게 느리지만 자외선으로 지우다가 전기 신호로 지운다니, 엄청난 발전이다.

하지만 이것도 플래시 메모리에 밀려 거의 대체되었다, 그러나 여전히 안정성이 중요한 분야에서는 종종 EEPROM이 사용되기도 한다.

 

 

 

2. RAM (Random Access Memory)

 

흔히 시금치라고 부르는 DRAM

 

램은 임의 접근 메모리를 의미하며, 메모리 위치 중 원하는 곳은 어디든 원하는 순서로 읽고 쓸 수 있기 때문에 이런 이름을 가지게 되었다.

당연히 저장장치는 원하는 곳을 읽고 쓸 수 있지 않냐고 의아해할 수 있는데, 우리가 과거에 사용하던 하드 디스크는 팬이 돌면서 우리가 읽거나 쓰려는 데이터의 위치에 헤드가 닿을 때만 읽고 쓰기가 가능했다. 다만 그게 엄청나게 빨리 돌고 있었을 뿐이다.

 

현대의 램은 SRAM과 DRAM으로 나뉜다.

 

1. Static RAM

SRAM은 이전 포스팅에서 다룬 트랜지스터(플리플롭 구조) 등으로 구성된 논리 회로로 이루어져있으며, 각 비트마다 트랜지스터가 6개씩 차지가고 있으며 엄청나게 빠르다. 그러나 알다시피 트랜지스터는 너무 크고 비싸기 때문에 많은 비트를 저장하기 기억 장치의 부품으로는 적합하지 않다.

SRAM은 DRAM보다 100배 정도 빠르며 주로 CPU의 캐시메모리로 사용된다.

 

2. Dynamic RAM

DRAM은 트랜지스터 하나와 캐패시터 하나로 구성되어 있어서 SRAM에 비해 집적도가 굉장히 높아서 주로 큰 메모리칩으로 사용된다. 당연히 가격도 저렴하기 때문에 현재 CPU의 주 기억 장치로 널리 사용되고 있다.

Dynamic이라는 이름을 가지게 된 것은 데이터를 보전하기 위해 초당 수백번 이상 Refresh되어야 하기 때문이다. 반대로 SRAM은 Refresh가 필요 없기 때문에 "Static" RAM이다.

 

두가지 램에는 공통사항이 있는데, SRAM램과 DRAM 모두 휘발성 메모리라는 것이다.

전원이 차단되면 내용이 지워진다는 것이다.

그러나 "모든 램이" 전원이 차단된다고 내용이 지워지는 것은 아니며, 비휘발성 메모리에 대한 연구 개발은 계속되고 있으나 아직 기존의 휘발성 메모리의 역할을 대체할만한 비휘발성 메모리는 등장하지 않았다.

 

 

 

 

3. HDD (Hard Disk Drive)

 

엄청 시끄러웠던 기억이 난다.

 

휘발성 기억에만 의존해서 데이터를 보관할 수는 없는 법이다.

따라서 다소 느리더라도 비트를 저장할 큰 공간이 필요했고, 그 중 하나가 HDD다.

 

사실 HDD의 원래 이름은 Magnetic Disk Drive였는데, 플로피 디스크가 등장하며 구분을 위해 Hard Disk로 이름이 변경되었다.

초등학생 때 학교 준비물로 플로피 디스크를 들고다닌 세대는 알겠지만(..) 굉장히 쉽게 부러지는 성질을 가지고 있기 때문에 정 반대인 HDD는 Hard라는 타이틀을 갖게된 것이다.

 

RAM에서 언급한대로 하드 디스크는 임의 접근이 가능한 다른 메모리에 비해 느리며, 데이터를 읽기 위해 Disk head가 돌고 있는 판에서 데이터가 저장된 위치가 다가올 때까지 한 바퀴를 기다려야 한다.

오늘날의 하드 디스크는 보통 1분에 7200번 회전하는데, 한 바퀴 돌 때마다 10밀리초 정도의 시간이 소요되는 것이다.

또한 이 판을 회전시켜주는 베어링이 마모되어 시간이 흐르면 오류를 일으키는 경우가 많다.

 

디스크는 바이트 단위로 주소를 기록하는 대신 블록 단위로 주소를 읽는데, 블록 크기는 보통 4~16byte이다.

블록 크기가 작을 수록 한 번에 읽을 수 있는 데이터 양이 줄어들지만 블록 크기가 크면 필요하지 않은 데이터까지 읽어야하기 때문에 낭비되는 메모리 공간이 생길 수 있다.

(예 : 읽으려는 데이터가 1바이트면 블록에 포함된 4바이트를 모두 불러들이고 원하는 바이트만 읽음 )

그리고 이런 블록을 묶어 저장하는 공간을 "섹터"라고 하며 섹터의 크기는 512byte부터 4096byte까지 존재한다.

 

하드디스크의 성능은 헤드와 플래터가 크게 좌우한다.

헤드가 플래터를 읽는 것이기 때문에 당연히 플래터의 분당 회전속도(RPM)이 빠를 수록 하드디스크는 빠르며, 헤드의 저항이 적을 수록 더 빨리 읽을 수 있다.

대용량 하드 디스크의 경우 플래터가 여러개로 구성되는데, 하나하나가 모두 소음을 일으키기 때문에 플래터가 많으면 많을수록 시끄럽다.

 

 

 

 

 

4. 플래시 메모리 + SSD

 

위에서 배웠던 EEPROM의 진화 형태로 비휘발성 반도체 저장 장치이며 지난 시간까지 열심히 언급한 NAND Flash와 NOR Flash가 바로 이 플래시 메모리다.

DRAM과 마찬가지로 전자를 담는 방식이나, 조그마한 캐패시터에 아주 잠시동안 전자를 담을 수 있는 DRAM과 달리 플로팅 게이트(Floating Gate)에 전자를 저장하기 때문에 오랜 기간동안 데이터를 유지할 수 있다.

램처럼 원하는 위치에 임의로 접근할 수 있으며 EEPROM보다는 빠르지만, 전자를 보관하기 위한 절연체 때문에 DRAM보다는 훨씬 느리며 마치 HDD처럼 블록 단위로 데이터를 기록하기 때문에 블록이 비어있지 않다면 매번 지우고 새로 쓰는 과정을 거쳐야한다.

게다가 메모리에 데이터를 저장하고 지우는 과정에서 많은 열이 가해지는데, 열에 취약한 부품 특성상 계속해서 사용하다보면 파손된다. 

 

언제까지 플래시 메모리만 이야기할 것인지 궁금할 수도 있을 텐데, 플래시 메모리 여러개를  만든 것이 SSD이다.

따라서 플래시 메모리와 같이 사용하다보면 부품이 결국 파손되며 블럭 레벨로 탐색한다는 단점을 가지고 있으나 HDD에 비해 물리적 충격이나 자기장으로부터 안전하며, 소음도 없고 전력 소모도 훨씬 적다. 

또한, 가장 중요한 것은 Random Access가 가능하기 때문에 HDD와 비교했을 때 약 10배 빠르다. (제품별 상이)

 

 

 

 

 

5. 오류 검출 정정

 

오류 검출은 노이즈나 다른 장애로 인하여 데이터에 생긴 오류를 감지하고, 원본 데이터를 다시 구축하는 것을 의미한다.

저장 장치에서의 오류 검증 방법은 다음과 같다.

 

(1) 패리티 비트(Parity bit)

 

딱 1비트의 오류를 검출할 수 있는 간단한 오류 검출 방법이다.

데이터 문자열 내 1비트의 모든 숫자가 짝수 혹은 홀수인지를 보증하기 위해 1비트(홀짝 여부)를 더하여 전송한다.

이후 검사 결과 비트가 짝수 혹은 홀수로 변경되었을 경우 오류 여부를 확인할 수 있다.

그러나 패리티 비트는 오류를 수정할 수는 없다.

 

(2) 체크섬(checksum)

 

데이터의 구성 요소에 비트를 추가하여 결과값을 저장한다.

추후 데이터에 같은 작업을 수행함으로써 무결성 검사에 대한 결과를 비교할 수 있다.

 

(3) 순환 중복 검사(Cyclic Redundancy Check, CRC)

 

데이터 전송 전 주어진 데이터에 따라 CRC 값을 계산하여 데이터에 붙여 전송하고, 전송이 끝난 후 받은 데이터의 값으로 다시 CRC값을 계산하게 된다. 그리고 두 값을 비교하여 값이 다르다면 오류를 검출할 수 있다.

CRC는 이진법 기반 하드웨어에서 구현하기 쉬우며 오류 검출 성능이 탁월하다.