6.1-Storage_Technologies

상당 양의 컴퓨터 기술의 발전은 메모리 기술의 진보에 그 뿌리를 두고 있다.
초기의 몇 KB 의 RAM(Random Access Memory) 에서, MB 로 빠르게 발전했다.
그 속도는 매번 빨라져, 매년 2배의 증가폭을 보이기도 한다.

6.1.1 Random Access Memory

RAM 은 크게 2가지의 종류로 나뉜다. .
SRAM(Static RAM) 은 DRAM에 비해 빠르지만, 비싸다.
SRAM은 주로 Cache Memory 로써 CPU의 안팎에서 사용된다.

DRAM(Dynamic RAM)은 Main Memory 혹은 그래픽 시스템의 버퍼로서 사용된다.

보통, SRAM 은 몇십 단위의 MB 단위로 컴퓨터에 존재하지만,
DRAM 은 몇백에서 몇천 단위의 MB 단위로 존재하게 된다.

Static RAM

SRAM 은 각 bit 를 (2가지의 안정된 상태를 가지는) 한 Memory Cell 로 저장한다.

각 Cell 은 6개로 이루어진 트랜지스터 회로로 구성되어 있다.
해당 회로는 2가지의 다른 전압 상태를 무기한 가질 수 있는데, 이 상태를 라고도 표현한다.
2가지 상태를 제외한 상태는 unstable 상태이며, 회로는 안정된 상태로 빠르게 움직인다.

이에 대한 비유로 반전된 펜듈럼이 있다.
articles/chapter6/imgs/inverted_pendulum.png
펜듈럼은 2개의 안정된 상태(Left, Right) 를 가지며, 그 외는 불안정하다.
즉, 어느 한쪽으로 빠르게 기울어져, 안정된 상태로 변한다.
정확히 중앙에 존재해 언뜻 안정된 상태처럼 보이는 경우는 한 상태이다.
아주 작은 자극에도 그 상태가 깨지며, 다시 돌아오지 못한다.

이러한 특성 때문에, SRAM 은 해당 정보를 무기한 저장할 수 있다.
전력이 존재하는 한.
외부 방해가 존재하더라도, 방해가 사라지는 순간 안정된 상태로 돌아갈 수 있다.

Dynamic RAM

DRAM 은 bit 를 Capacitor(축전기) 에 저장한다.
DRAM 은 매우 밀집하게 구성될 수 있는데, 이는 각 Cell 이 하나의 축전기와 단일 접근 트랜지스터(Single Access Transitor) 로 이루어지기 때문이다.

SRAM 과는 다르게, 외부 방해에 매우 취약하다.
방해받은 Cell 은 원래 상태로 되돌릴 수 있는 방법이 없다.
디지털 카메라에 사용되는 센서 또한, 근본적으로 축전기인데,
해당 센서가 빛에 의한 변화를 저장한다는 점을 생각하면 이해하기 쉽다.

다양한 요인에 의해 DRAM 의 Cell 은 10 ~ 100 ms 마다 정보가 사라진다.
다행히 Clock Cycle 이 ns 단위인 컴퓨터의 시각에서는 꽤 긴 시간이기 때문에 복구할 수 있다.
컴퓨터는 해당 정보를 읽고, 다시 작성함으로서 정보를 보존시킨다.
일부 시스템에서는 bit 를 더 사용하여, 에러를 고치는 기능을 추가하기도 한다.
예시로 64 bit word 는 종종 72 bit 을 사용하곤 한다.

아래의 표는 SRAM 과 DRAM 을 비교한 표이다.
articles/chapter6/imgs/DRAM_VS_SRAM.png
전반적으로 SRAM 이 성능적으로 뛰어나지만, 더 많은 Transitor 를 사용하기 때문에,
밀집하게 구성하기 어려우며, 더 비싸고, 전력을 더 많이 사용하게 된다.

Conventional DRAMs

DRAM은 개의 SuperCell 로 나뉘어지며,
각 SuperCell은 개의 Cell로 이루어져있다.
즉, DRAM 은 총 의 bit 를 저장한다.

SuperCell은 개의 행과 개의 열로 이루어져있어, 가 성립한다.
주소 형태 번째 행과 번째 열을 나타낸다.

컴퓨터 분야에서는 Cell 이라는 용어를,
회로 분야에서는 Word 라는 용어를
Cell 과 SuperCell 의 구분없이 사용하기 때문에
여기서는 SuperCell 이라는 임의의 용어를 만들어 사용하고 있다.

정보는 이라는 것을 통해 Memory 의 정보가 입력/출력된다.
하나의 Pin 은 1bit 의 정보를 전달한다.

articles/chapter6/imgs/DRAM_view.png
해당 그림에서 data 는 8개의 Pin을 통해, 8bit 즉 1byte 의 정보를 주고받는 통로이다.
addr 는 2개의 Pin으로 한번에 행 또는 열의 정보를 전달한다.
여기서는 0~3 까지이기 때문에 2bit 로 충분하다.

초기의 DRAM 은 Memory Controller 로 알려진 회로에 연결되어 있다.
이 회로는 한번에 bit 의 정보를 주고받을 수 있다.

의 정보를 읽기 위해, 행 정보 를 그 다음에 열 정보 를 전달한다.
DRAM 은 응답으로서, 의 정보를 보낸다.
행 주소 (Row Access Strobe) Request,
열 주소 (Column Access Strobe) Request 라고 한다.
2개의 요청은 같은 Pin을 통해 전달된다.

예를 들어
의 DRAM 에서 에 접근하기 위해,
articles/chapter6/imgs/DRAM_ex.png
행 주소 2를 전달한다.
이 때, 2행의 모든 정보를 row buffer 에 저장하게 된다.
그 다음, 열 주소 1 을 받으면, buffer 에서 1에 해당하는 값을 전달하게 된다.

선형 배열이 아닌, 2차원의 배열로 되어있는 이유는,
address Pin의 bit 숫자를 줄이기 위해서이다.

2차원으로 전달함으로써, 필요한 bit 숫자는 절반이 되지만,
2번에 걸처서 전달하기 때문에 접근 속도가 느려진다는 단점이 존재한다.

Memory Modules

메인보드에는 확장 슬롯이 존재하는데, 이 곳에는 Momory Module 을 끼게 된다.
Memory Module 에는 DRAM Chip 이 패캐징 되어 있다.
I7 시스템은 240 Pin 의 Dual Inline Memory Module(DIMM) 으로 구성되어있다.
이 시스템에서는 64bit 단위로 데이터가 전달된다.

articles/chapter6/imgs/memory_module.png
해당 예시는 8MB 의 DRAM 8개로 구성된 총 64MB의 Memory Module 을 나타낸다.
각 SuperCell은 Main Memory 의 1Byte 를 담당하게 된다.
Main Memory 의 의 정보는
각 0번 DRAM 의 , 1번 DRAM의 , ... 순으로 8개의 정보를 합친 것을 의미한다.

예를 들어 메모리 주소 에 대해 접근하면,
로 변환한 다음, 에 대한 broadcast 를 DRAM 에 전달한다.
각 DRAM 의 출력값을 64-bit word로 모아 Memory Controller 가 외부로 전달하게 된다.

Main Memory 는 여러개의 Module 을 Memory Controller 에 연결함으로서 확장될 수 있다.
이 때의 접근은 주소 에 대해 가 담긴 module 에 접근하는 과정이 추가된다.

Enhanced DRAMs

프로세서의 속도를 높이기 위해, 다양한 DRAM 이 발전하게 되었다.
기본적으로 DRAM의 Cell 개념은 남아있지만, 그 접근 속도에 따른 최적화를 진행하였다.

아래에 이름만 언급하고 자세한 내용은 나중에 추가한다.

FPM DRAM(Fast Page Mode DRAM)

Extended Data Out DRAM(EDO DRAM)

Synchronous DRAM(SDRAM)

Double Data-Rate Synchronous DRAM(DDR SDRAM)

Video RAM(VRAM)

Nonvolatile Memory

DRAM 과 SRAM 은 volatile 로서, 전력을 잃게 되면 그 정보가 소실된다.
반면에 Nonvolatile Memory 는 전력을 잃어도 남으며, 그 종류가 다양하다.
역사적인 이유로 그것들은 ROM(Read Only Memory) 로 칭해진다.
사실일부 ROM 은 Write 도 가능하다.
ROM 은 가능한 Write 의 횟수, Write 를 하는 방법에 따라 분류된다.

PROM(Programmable ROM), EPROM(Erasable Programmable ROM),
EEPROM(Electrically Erasable PROM), Flash Memory, SSD(Solid State Disk) 등이 있다.

Accessing Main Memory

프로세서와 메인 메모리간 데이터 이동통로를 라고 한다.
데이터의 이동은 Bus Transition 이라는 여러 개의 단계에 걸처서 이루어진다.
Read Transition 은 Main Memory 에서 CPU로,
Write Transition 은 CPU에서 Main Memory 로의 데이터 이동을 뜻한다.

Bus 는 여러개의 평행한 선들로 주소, 데이터, 제어신호 등을 보낸다.
디자인에 따라, 데이터와 주소가 같은 선을 혹은 다른 선을 사용할 수 있다.
2개 이상의 장치가 같은 Bus 를 공유하기도 하며,
통제선(Control Wire)는 전달 동기화를 위한 또는 어떤 전달이 이루어지는지 알려주는 신호를 전달하기도 한다.

articles/chapter6/imgs/bus_structure.png

위의 그림과 함께 movq A, %rax 가 실행되는 과정을 살펴본다.
위의 명령어는 A 주소에 존재하는 내용을 레지스터 rax 에 옮기는 과정이다.

CPU Chip의 bus interface 에서, Read Transition 을 시작한다.
Read Transition은 3개의 단계로 이루어진다.

  1. CPU 는 A 주소를 System Bus 에 옮긴다.
    I/O Bridge 는 Memory Bus 를 통해 신호를 전달한다.
  2. Main Memory 는 Memory Bus 의 주소 신호를 감지하고,
    Memory Bus 로부터 주소를 읽는다. DRAM으로부터 그 데이터를 읽고,
    정보를 Memory Bus 에 Write 한다.
    I/O Bridge 는 Memory Bus 의 신호를 System Bus 신호로 번역하여,
    System Bus 로 전달한다.
  3. CPU 는 System Bus의 신호를 감지하고, 읽은 다음,
    해당 데이터를 rax 에 복사한다.

반대로 Write Transition의 경우, 즉 movq %rax, A 일 때,
CPU는 Write Transition 을 시작한다.
역시 3개의 단계로 이루어진다.

  1. CPU는 A의 주소를 System Bus 에 옮긴다.
    Memory 는 Memory Bus로부터 해당 주소를 읽고, 데이터가 오기를 기다린다.

  2. CPU는 rax 의 데이터를 System Bus 로 옮긴다.

  3. Main Memory 는 해당 정보를 읽고, DRAM에 정보를 저장한다.

6.1.2 Disk Storage

Disk 는 아주 많은 양의 데이터를 저장할 수 있지만,
DRAM, SRAM 보다 훨씬 느리다.

요즘에는 SSD를 위주로 사용한다는 점에서 생략한다.

Connecting I/O Devices

I/O 장치, 그래픽카드, 모니터, 마우스, 키보드 등의 장치는 CPU와 Main Memory에
I/O Bus 를 통해 연결된다.

System Bus 나 Memory Bus는 CPU-specific 이지만,
I/O Bus 는 CPU 와 무관하다.

비록, I/O Bus 는 느리지만, 포괄적으로 third-party 장치에 접근할 수 있다.
예를 들어, USB(Universal Serial Bus) Controller, Graphics Card(or Adapter),
Host Bus Adapter 등이 있다.
네트워크 장치 같은 추가 장치는 motherBoard 의 빈 확장슬롯을 이욤함으로서,
I/O Bus에 접근할 수 있다.

Accessing Disks

여기서는 포괄적인 아이디어를 보여준다.

CPU는 memory-mapped I/O 라는 기술을 통해, I/O 장치에 명령어를 전달한다.
이 기술에서 각 장치는 I/O Port 라는 곳을 통해 CPU와 소통하게 된다.
장치는 경우에 따라 1개 이상의 Port 를 가질 수도 있다.

CPU는 각 포트로 명령어를 전달한다. 여기서는 0xa0 라고 가정한다.

첫번째로, 매개변수와 함께 읽기를 시작하라는 명령어를 전달한다.
매개변수에는 Read 가 끝나고 언제 CPU에 interupt 할지에 대한 정보도 있다.

두번째로, 어느 구역의 정보를 읽어야할지 전달해준다.

세번째로, 어느 Main Memory의 주소에 저장해야하는지 전달해준다.

전달한 후, CPU는 다른 일을 진행한다.
Disk의 Read 속도는 CPU의 Cycle 속도보다 훨씬 느리다는 점에서,
효율적으로 운영하기 위함이다.

Disk Controller 가 CPU로부터 Read 명령어를 받으면,
Logical Block Number 를 구역 주소로 바꾸고, 해당 구역의 정보를 읽어서,
CPU의 명령 없이 바로 Main Memory 에 전달한다.
이 CPU없이 전달하는 과정을 DMA(Direct Memory Access) 라고 한다.
이 데이터의 전달을 DMA Transfer 라고 한다.

정보 전달이 완료되고, 정보가 Main Memory 에 저장되었을 때,
Disk Controller 는 CPU에 interupt 신호를 보낸다.
이 신호는 외부 Pin을 통해 CPU에 전달되어, CPU가 현재 하던 작업을 멈추게 한다.
그 후 OS의 Routine으로 Jump하게 되고, 그 Routine 에서 I/O 작업이 끝났음을 기록하고, 다시 CPU하던 작업에게 통제권을 넘겨준다.

6.1.3 Solid State Disk

생략

생략