<메모리 시스템(Memory System)>은 저장 장치들의 계층구조이다. 위로 갈수록 용량이 작고, 비싸고, 대신 빠르게 접근 할 수 있다.
좋은 지역성(Locality)를 갖는 프로그램들은 나쁜 지역성을 가진 프로그램보다 좀 더 상위 메모리 계층에서, 더 많은 데이터에 접근하려는 경향이 있으며, 따라서 더 빨리 돌게 된다. 이 로컬리티에 따라 응용 성능이 크게 달라지기 때문에 메모리 시스템을 잘 이해하는 것이 중요하다.
1. RAM (Random Access Memory)
- 램은 SRAM과 DRAM이 있다.
- Volitile 성격(휘발성): Lose information if the supply voltage is turned off.
전원 공급이 되지 않으면 메모리에 들어있던 정보들이 사라진다.
RAM에는 SRAM(Static RAM)과 DRAM(Dynamic RAM)이 있다.
<SRAM>
- 캐시 메모리로 사용되며, 따라서 비싸고 더 빠르고 전력 소비도 크다.
- Persistent, 전원 공급만 되면 절대로 메모리 사라지지 않는다.
(DRAM은 전원 공급되어 있어도 천천히 주기적으로 사라져서 refresh가 필요하다.)
- 자외선, 전파, 전기에도 강하다.
- 1bit 저장하는데 트랜지스터 1개가 필요한 DRAM과 달리 SRAM은 트랜지스터가 6개 필요하다.
따라서 Lower density (DRAM 용량이 6배정도 클 수 있다)
<DRAM>
- DRAM은 메인메모리와 그래픽 시스템의 프레임 버퍼로 사용된다.
DRAM 칩 내 셀들은 d 슈퍼셀들로 나누어지고, 각각은 w DRAM 셀들로 이루어진다.
따라서 d x w DRAM 은 총 dw 비트를 저장한다.
(예를들어 16 x 8 DRAM칩은 16 슈퍼셀, 슈퍼셀당 8비트를 가진다.)
<그렇다면 CPU가 메인메모리 내 데이터를 어떻게 읽어오는지 살펴보자>
(데이터는 '버스 Bus'라고 하는 공유된 전기회로를 통해 CPU와 DRAM 메인메모리 앞뒤로 교환된다.)
- 데이터를 메인메모리 -> CPU로 이동시키는 것을 read transaction
- 데이터를 CPU -> 메인메모리로 이동시키는 것을 write transaction 이라고 한다.
(read transaction)
예시: movq A, %rax
1> 먼저 CPU는 주소 A를 시스템 버스에 보내고, I/O bridge는 이 신호를 메모리 버스로 보낸다. 메인메모리는 메모리버스로부터 주소 신호를 받고, 읽은 후 DRAM에서 데이터를 가져온다.
그렇다면 DRAM 메모리 내부에서 데이터를 가져오는 과정을 살펴보자.
A의 주소가 슈퍼셀 (2, 1)라고 했을 때,
1) CPU는 메모리 컨트롤러를 통해 DRAM으로 행row 정보를 보낸다.
이 과정을 RAS(row access strobe)요청이라고 한다.
2) 그 다음 DRAM은 행 2의 전체 내용을 Internal row buffer에 저장한다.
3) 메모리 컨트롤러는 다시 열 주소 1을 보낸다.
이 과정을 CAS(column access strobe)요청이라고 한다.
4) DRAM은 internal row buffer에서 해당 column을 찾아 8비트 데이터를 복사해서 메모리 컨트롤러로 보낸다.
2> 메인메모리에서 A주소에 있는 데이터 x 값을 읽어온 후 다시 버스를 통해 레지스터 %rax에 이 값을 복사한다.
(write transaction)
예시: movq %rax, A
1> CPU가 주소 > 시스템버스 > 메모리버스 > 메인메모리 주소 읽고 데이터 도착 때까지 기다림
2> CPU %rax에 있는 데이터 시스템 버스에 복사
3> 메인 메모리 데이터 메모리 버스에서 읽고 비트들을 DRAM에 저장
지금까지 휘발성 메모리인 SRAM과 DRAM 그리고 CPU와 메인메모리 간 데이터 이동 과정에 대해 살펴보았다.
모든 데이터를 RAM에 저장한는 것은 비용과 전력사용면에서 매우 비효율적이다.
지금부터는 비휘발성 메모리에 대해 살펴보겠다.
Nonvolatile Memory: ROMs, Flash Memory, NVRAM
2. ROM (Read-only memory)
read only라고 썼지만 일부 쓰기도 가능하다.
1) PROM (Programmable ROM): 딱 한 번 프로그램 될 수 있는 메모리. 그 다음엔 Read-only
2) EPROM (Erasable PROM): ultraviolet light를 이용해 지우고 재프로그램할 수 있다. 다만 칩을 뽑아 특정 장비에서만 가능
3) EEPROM (Electrically Erasable PROM): 전기신호로도 지울 수 있는 PROM
3. Flash memories
EEPROM에 기반을 둔 비휘발성 메모리로 디카, 핸드폰, 노트북 등 다양한 전자기기에서 빠르고 안정적인 비휘발성 저장장치의 역할을 한다.
(특징)
- No in-place writes ; 이미 데이터 있는 곳에 덮어쓰지 못한다.
- Asymmetric read-write spped; read가 write 보다 훨씬 빠르다. (write할 때, 이미 데이터 있는 곳이라면 다른곳에 데이터 쓰던지, 지우고 덮던지 해야하기 때문에)
- 10만번 정도 지운 후엔 사용할 수 없음(버리는 영역됨)
- NAND flash / NOR flash ; 보통 NAND FLASH를 더 많이 쓴다.
- SSD (Solid State Disk); 하드디스크보다 비싸고 가볍고 충격에 강하다. 하드디스크와 다르게 디스크들을 움직이는 부분이 없다. 그래서 solid state
<하드디스크 HDD>
디스크는 원판 Platters로 구성되며, Spindle 회전축을 통해 회전한다.
Actuator을 통해 Arm이 좌우로 움직이면서 데이터를 읽는다.
플래터는 윗면, 아랫면 2개의 surfaces로 데이터를 저장하고
각 surface에는 track이라고 불리는 concentric ring들로 구성되어있다. (약 만 개 내외)
track은 sector와 gap으로 구성되어있고, 아무 데이터도 기록되지 않은 상태인 gap은 sector들을 분리한다. (ISG; Inter Sector Gap이라고도 함)
- 하나의 디스크에 기록될 수 있는 최대 비트 수는 다음 요소들에 의해 결정된다.
1) Recording density (bits / in) : 1인치 트랙에 집어넣을 수 있는 비트의 수
2) Track density (tracks / in) : 원판 중심에서 반지름의 1인치 길이에 넣을 수 있는 트랙의 수
3) Areal density (bits / in^2) : 기록밀도와 트랙밀도의 곱
- 디스크 동작
- Disk는 SRAM보다 40,000배, DRAM보다 2,500배 정도 느리다..
<I/O Bus>
I/O 디바이스들이 동작하는 방법을 간단하게 살펴보자.
(디스크 접근하기)
1) CPU는 command, logical block number, destination memory address 세 개의 저장 인스트럭션을 실행해서 디스크 읽기를 개시한다. (Memory mapped I/O)
2) 디스크 컨트롤러는 cpu개입 없이 섹터의 내용을 읽어서 메인메모리에 직접 전송한다. (DMA; Direct Memory Access)
3) DMA 전송이 끝났을 때, 디스크 컨트롤러가 cpu에 인터럽트 신호를 보내 cpu가 현재 하고 있던 일을 멈추게하고, 운영체제 루틴으로 이동하게 한다.
(호스트 버스 어댑터)
- 하나 이상의 디스크를 I/O 버스의 호스트 버스 인터페이스를 통해 연결한다.
두 개의 가장 인기 있는 인터페이스는
SCSI 스커지
SATA 사타 가 있다.
스커지는 여러 디스크 드라이브를 지원하고 일반적으로 사타보다 훨씬 빠르고 비싸다.
사타는 단 하나의 드라이브만 지원한다.
<SSDs: Solid State Disks>
- 한개 이상의 플래시 메모리 칩과 디스크 컨트롤러 역할을 하는 FTL(Flash TranslationLayer)로 구성되어 있다.
- SSD의 데이터 읽고 쓰는 단위는 Page이며, 지우는 건 무조건 Block 단위로만 가능하다.
따라서, 한 블락에 있는 하나의 페이지를 지우려면, 나머지 페이지를 다른 빈 블락으로 옮기던가 해야한다.
- SSD는 HDD와 달리 mechanical한 움직임이 없어 빠르고, 전력 소모도 적고, 견고하다.
- 하지만 보통 한 블락이 10만번 이상 쓰기를 반복하면 wear out된다는 점과 비싸다는 것이 단점이다.
댓글