안녕하세요! 피피아노입니다 🎵
이번 포스팅에서는 메모리 기술에 대해서 공부한 것을 정리를 해보려고 합니다.
메모리 기술
오늘날 사용되는 메모리 계층구조에서는 DRAM, SRAM, 플래시 메모리, 자기 디스크 이렇게 4가지 주요 기술이 사용됩니다.
메인 메모리는 DRAM(Dynamic Random Access Memory)으로 구현됩니다. 우리가 흔히 말하는 램이 바로 이 DRAM입니다.
프로세서에서 더 가까운 계층인 캐시에서는 SRAM(Static Random Access Memory)이 사용됩니다.
DRAM은 SRAM보다 훨씬 느리지만 비트당 가격이 덜 비싸고, 메모리 비트당 면적이 작기 때문에 가격 차이가 생기게 됩니다. 또한 같은 양의 실리콘으로 더 큰 용량을 만들 수 있습니다. 속도 차이는 몇 가지 기술적인 이유 때문에 생기게 됩니다.
플래시 메모리는 비휘발성 메모리인데 개인 휴대용 기기에서는 2차 메모리로 사용이 됩니다.
자기 디스크는 서버에서 가장 크고 가장 느린 계층을 구현하는데 사용됩니다.
접근 시간과 비트당 가격은 기술에 따라 매우 다양하지만 2020년 기준 전형적인 값들은 아래와 같습니다.
| Memory technology | Typical access time | $ per GiB in 2020 |
| SRAM semiconductor memory | 0.5 - 2.5ns | $500 - $1000 |
| DRAM semiconductor memory | 50 - 70ns | $3 - $6 |
| Flash semiconductor memory | 5,000 - 50,000ns | $0.06 - $0.12 |
| Magnetic disk | 5,000,000 - 20,000,000ns | $0.01 - $0.02 |
SRAM
SRAM은 읽기나 쓰기를 제공할 수 있는 접근 포트가 하나 있는 메모리 배열로 구성된 단순한 집적회로입니다. SRAM의 읽기 접근시간과 쓰기 접근 시간이 다를 수 있지만, 어떤 데이터든지 접근시간은 같습니다.
SRAM은 리프레시가 필요 없으므로 접근시간은 사이클 시간과 거의 같습니다.(사이클 시간은 메모리 접근 사이의 시간 간격)
SRAM은 읽을 때 정보가 바뀌지 않게 하기 위해서 비트당 6개에서 8개의 트랜지스터를 사용합니다. SRAM은 대기모드에서 데이터 값을 유지하기 위해 최소한의 전력만을 사용합니다.
DRAM
SRAM은 전력이 공급되는 한 그 갑이 무한히 유지게 됩니다. DRAM에서는 셀에 기억되는 값이 전하 형태로 커패시터에 저장되게 되는데, 저장된 값을 읽거나 새로운 값을 쓰기 위해서는 저장된 전하를 접근하는 데 트랜지스터가 하나 필요합니다. DRAM은 저장된 비트 하나당 트랜지스터 하나만 있으면 되므로 SRAM에 비해서 훨씬 더 집적도가 높고 값도 쌉니다.
DRAM은 커패시터에 전하를 저장하기 때문에 SRAM처럼 전력이 공급된다고 해서 무한히 유지할 수가 없습니다. 그렇기 때문에 주기적으로 리프레시를 해주어야 합니다. DRAM은 이렇게 기억을 지속하지 못하기 때문에 SRAM 셀의 정적 저장과 반대로 동적(dynamic)이라고 합니다.
셀의 리프레시는 단순히 셀에 저장된 값을 읽어서 다시 쓰면 됩니다. 저하는 수 밀리초 동안만 유지될 수 있는데 모든 비트를 하나씩 DRAM에서 읽어서 다시 쓴다면 계속 DRAM을 리프레시해야 하므로 기억된 값에 접근할 시간이 없게 됩니다.
DRAM은 성능 향상을 위해 행을 버퍼링해서 반복적으로 접근합니다.(버퍼는 SRAM처럼 동작함) 다음 행에 접근하기 전까지는 주소값만 바꾸면 버퍼 내의 아무 비트나 접근할 수 있게 해주는데 이 기능이 같은 행 내의 비트 접근 시간을 훨씬 줄여주기 때문에 접근시간을 크게 개선할 수 있습니다.
칩의 폭을 넓히면 메모리 대역폭 또한 커지게 되는데, 버퍼에 있는 행은 DRAM의 폭이 얼마든지 간에 연속된 주소를 사용해서 전송하거나 버퍼 내 시작 주소와 블록 전송을 이용해서 전송할 수 있습니다.
프로세서와의 인터페이스를 더욱 향상시키기 위해서 DRAM에 클럭을 추가할 수 있는데 이것을 SDRAM(Synchronous DRAM)이라고 부릅니다.
SDRAM의 장점은 클럭을 사용하므로 메모리와 프로레서를 동기화하는 시간이 필요없다는 것입니다. SRAM의 속도가 빠른 것은 주소를 여러 번 지정하지 않아도 한꺼번에 여러 비트를 전송할 수 있기 때문입니다.
주소를 일일이 지정하는 대신에 클럭이 연속적인 비트들을 버스트 모드로 전송합니다. 이 메모리를 DDR SDRAM이라고 부릅니다.
플래시 메모리
플래시 메모리는 전기적으로 지울 수 있고 프로그래밍이 가능한 ROM의 한 종류입니다.
디스크나 DRAM과는 다르게 플래시 메모리는 쓰기 작업을 할 때 비트를 마모시켜서 작업을 하게 됩니다. 이 단점을 극복하기 위해서 대부분의 플래시 제품은 여러 번 쓰기가 수행된 블록을 덜 사용된 블록에 remapping해서 쓰기를 분산하는 컨트롤러를 사용합니다. 이 기법을 마모 균등화(wear leveling)이라고 부릅니다. 일반적으로는 이 마모 균등화를 사용하기 때문에 개인 기기가 플래시의 쓰기 한계를 넘는 경우는 거의 없다고 보셔도 됩니다.
마모 균등화를 쓰면 플래시의 잠재적 성능을 떨어뜨리기는 하지만, 상위 계층 소프트웨어가 각 블록의 마모를 관리하지 않는 한 마모 균등화를 사용할 수 밖에 없습니다. 마모 균등화를 수행하는 플래시 컨트롤러는 제조 과정에서 잘못된 메모리 셀을 사용하지 않게 함으로써 수율을 향상시킬 수 있습니다.
디스크 메모리
하드 디스크는 원판의 집합으로 구성되어 있고 원판은 분당 5400번에서 15,000번의 속도로 회전합니다. 금속 원판의 양측 면은 카세트나 비디오테이프처럼 자성체로 코팅이 되어 있습니다.

하드 디스크상의 정보를 읽고 쓰기 위해서 읽기/쓰기 헤드라고 불리는 작은 전자기 코일을 가지고 있는 움직이는 암(arm)이 각 표면 바로 위에 있습니다. 드라이브 내부가 손상되면 당연히 데이터도 손상되기 때문에 전체 드라이브는 밀봉되어 있고 그 덕분에 디스크 헤드가 드라이브의 표면에 더 가까워질 수 있습니다.
각 디스크 표면은 트랙(Track)이라고 불리는 동심원으로 나누어지는데 일반적으로 표면당 수만 개의 트랙이 존재합니다. 각 트랙은 다시 정보를 저장하는 섹터(sector)로 나누어집니다. 한 트랙은 수 천개의 섹터로 구성되고, 섹터의 크기는 보통 512Byte에서 4096Byte정도 됩니다.
자성 매체에는 섹터 번호, 공백, 에러 정정 코드를 포함하는 섹터 데이터, 공백, 다음번 섹터의 번호와 같은 순서로 기록이 됩니다.
각 면의 디스크 헤드는 서로 연결되어 있고 함께 움직이므로 모든 헤드는 각 면의 같은 트랙에 위치하게 됩니다. 헤드 아래에 있는 모든 면의 트랙을 실린더라고 부릅니다.
데이터에 접근하려면 운영체제가 3단계에 걸친 명령을 디스크에 내려야 합니다.
우선 가장 먼저 적절한 트랙 위에 디스크 암을 가져다 놓아야 합니다. 그리고 나서는 헤드가 원하는 트랙에 도달하면 읽기/쓰기 헤드 밑에 원하는 섹터가 나올 때까지 기다려야 합니다. 이 시간을 회전 지연 시간이라고 부르는데 원하는 정보에 도달하는 평균 회전 지연 시간은 디스크가 1/2 회전하는 데 걸리는 시간과 같습니다. 디스크 접근의 마지막 요소는 블록 하나를 전송하는 시간, 즉 전송시간입니다.
전송시간은 섹터의 크기, 회전 속도 , 트랙의 저장 밀도의 함수입니다. 2020년 기준으로 전송 속도는 150MB/sec에서 250MB/sec 사이이고 대부분의 디스크 컨트롤러는 헤드 아래를 통과하는 섹터들을 저장하는 내장 캐시를 가지고 있습니다. 캐시는 전송 속도가 더 빨라서 2020년 기준으로 1500MB/sec까지 나옵니다.
