Priv's Blog

6. 보조기억장치 본문

Dev. Study Note/Computer Architecture

6. 보조기억장치

Priv 2023. 3. 28. 22:25


 

 

1. 보조기억장치

보조기억장치의 종류는 실로 다양하다.

CD, SD카드, 플로피 디스크, HDD, SSD 등이 그것이다.

 

1.1) HDD

HDD는 하드 디스크 드라이브의 약자이다.

자기적인 방식으로 데이터를 저장하기 때문에 자기 디스크라고도 부른다.

  • 플래터: 자기적인 방식으로 데이터가 기록되는 둥근 원판.
  • 스핀들: 플래터를 회전시키는 구성 요소. RPM으로 속도를 나타낸다.
  • 헤드: 플래터에 데이터를 읽고 쓰는 구성 요소. 일종의 바늘처럼 동작한다.
  • 디스크 암: 헤드를 원하는 위치로 배치해 주는 구성 요소.

HDD는 CD, LP에 비해 상당히 많은 양의 데이터를 기록하고 읽어야 하기 때문에 여러 겹의 플래터로 구성되어 있다.

또한 플래터는 양면으로 구성된다.

플래터와 헤드는 겹겹이 쌓여 있는 구조로 이루어져 있는데, 단면을 살펴보면 다음과 같다.

플래터는 트랙과 섹터라는 단위로 데이터를 저장한다.

여기서 섹터는 HDD의 가장 작은 전송 단위이다.

일반적으로 512바이트 정도의 크기를 가지며, HDD의 종류에 따라 조금씩 달라진다.

여러 겹의 플래터 상에서 같은 트랙에 위치한 곳을 세로로 묶어 연결한 논리적 단위를 실린더라고 부른다.

즉, 여러 개의 트랙들을 묶은 단위이다.

HDD에 저장된 데이터에 접근하기 위해서는 헤드를 움직여 원하는 데이터가 있는 곳에 배치해야 한다.

이때 데이터에 접근하는 시간은 탐색 시간, 회전 지연 시간, 전송 시간으로 나눠서 계산된다.

  • 탐색 시간: 접근하려는 데이터가 저장된 트랙까지 이동하기까지 걸리는 시간.
  • 회전 지연 시간: 헤드가 있는 곳까지 플래터가 회전하는 데 걸리는 시간.
  • 전송 시간: HDD에서 읽은 데이터를 전송하는 데 걸리는 시간.

다중 헤드를 사용하는 다중 헤드 디스크 방식의 HDD를 사용한다면 트랙마다 헤드가 달려있기 때문에 탐색 시간이 항상 0이다.

 

1.2) 플래시 메모리

플래시 메모리는 HDD와 달리 물리적으로 데이터를 기록해 저장하지 않는다.

그 대신 전기적 데이터를 읽고 쓸 수 있는 반도체를 기반으로 동작한다.

NAND, NOR 플래시 메모리로 종류가 구분된다.

그중, NAND 플래시 메모리가 대부분을 차지한다.

  • NAND 플래시 메모리: NAND 연산을 수행하는 회로를 기반으로 제작된 플래시 메모리.
  • NOR 플래시 메모리: NOR 연산을 수행하는 회로를 기반으로 제작된 플래시 메모리.

플래시 메모리는 셀이라는 단위를 사용한다.

한 셀에 몇 비트 데이터를 저장할 수 있는가에 따라서 플래시 메모리의 종류가 달라진다.

  • SLC: 1셀에 1비트 저장 가능한 플래시 메모리.
  • MLC: 1셀에 2비트 저장 가능한 플래시 메모리.
  • TLC: 1셀에 3비트 저장 가능한 플래시 메모리.

이 종류에 따라서 플래시 메모리의 성능, 수명, 가격이 달라진다.

 

- SLC

1셀이 1비트를 저장할 수 있는 타입의 플래시 메모리이다.

즉, 0과 1로 이루어진 2가지 종류의 값을 최대 1가지 저장할 수 있다.

수명이 상대적으로 길고, 다른 타입에 비해 입출력 속도가 빠르다.

다만 용량 대비 가격이 높아서 부담이 크다.

 

- MLC

1셀이 2비트를 저장할 수 있는 타입의 플래시 메모리이다.

SLC 타입보다 더 많은 값을 표현할 수 있다.

다만 SLC 타입보다 수명과 속도가 떨어진다.

더 많은 데이터를 표현할 수 있기 때문에 대용화가 더 유리하고 가격이 저렴하다.

 

- TLC

1셀이 3비트를 저장할 수 있는 타입의 플래시 메모리이다.

MLC와 마찬가지로 수명과 속도는 떨어지지만 대용화가 유리하고 가격이 저렴하다.

 

셀보다 더 큰 단위로는 페이지, 블록, 플레인, 다이가 있다.

플래시 메모리에서 읽기, 쓰이는 페이지 단위로 이루어지고, 삭제는 블록 단위로 이루어진다.

페이지는 Free, Valid, Invalid 상태를 가질 수 있다.

  • Free 상태: 어떠한 데이터도 가지고 있지 않아서 새로운 데이터를 저장할 수 있는 상태.
  • Valid 상태: 이미 유효한 데이터를 가지고 있는 상태.
  • Invalid 상태: 쓰레기 값을 가지고 있어서 유효하지 않은 상태.

플래시 메모리는 HDD와 달리 덮어쓰기가 불가능하기 때문에 Valid 상태일 경우에는 데이터를 새로 쓸 수 없다.

그렇다면 플래시 메모리는 어떤 방식을 데이터를 저장, 수정, 삭제할까?

플래시 메모리는 Free 상태로 시작한다.

여기에 A, B 데이터를 저장한다면 다음과 같이 데이터가 채워진다.

여기서 C 데이터를 추가한다면 다음과 같이 데이터가 채워진다.

이 상태에서 A 데이터를 지우고, A' 데이터를 추가하려고 한다면 어떻게 될까?

일단 A 데이터만 따로 삭제하는 방법은 없다.

플래시 메모리는 블록 단위로 삭제하기 때문에 A, B, C 데이터를 한꺼번에 지우는 방법만 가능하다.

이 때문에 아래와 같이 A 데이터가 저장된 곳에 쓰레기 값을 저장해 Invalid 상태로 만들고, 빈 공간에 A' 데이터를 저장해야 한다.

현재 상태를 보면 필요도 없는 쓰레기 값 때문에 용량이 낭비되고 있다.

이 문제를 해결할 수 있는 방법이 하나 있다.

바로 가비지 컬렉션, GC이다.

GC는 Valid 상태의 데이터만 뽑아내서 새로운 블록으로 복사한 뒤, 기존의 블록은 삭제하는 기능이다.

 

 


 

2. RAID

RAID는 NAS를 구축해 본 사람들이라면 아마 친숙할 단어일 것이다.

HDD와 같이 보조기억장치를 사용할 때, 데이터를 어떻게 관리하고 저장할 것인가는 매우 중요한 사항이다.

보조기억장치의 수명이 아무리 길더라도 무한하지 않으며, 충격에 약한 특성 때문에 언제 어디서든 데이터가 손상될 가능성은 존재한다.

RAID는 여러 개의 보조기억장치를 함께 사용할 때, 데이터를 저장하는 방식을 설정하여 보다 효과적으로 데이터를 관리할 수 있도록 해준다.

 

2.1) RAID 레벨

RAID를 구성하는 방법을 RAID 레벨이라고 표현하며, RAID 0, RAID 1, RAID 2 등과 같은 방식으로 표현한다.

 

- RAID 0

RAID 0은 여러 개의 보조기억장치에 데이터를 나눠서 저장하는 방식이다.

위와 같이 분산 저장된 데이터들은 스트라입이라고 부르며, 데이터를 분산 저장하는 것을 스트라이핑이라고 부른다.

이처럼 데이터가 분산 저장되면 데이터를 읽는 속도가 훨씬 빨라진다.

CPU가 A1, A2, A3, A4 데이터를 요구하면 각각의 HDD에서 하나씩 데이터를 전달하면 끝나기 때문이다.

다만 이렇게 저장하면 데이터를 안전하게 관리하기가 어려워진다.

4개의 HDD 중에 1개만 고장이 나면 모든 데이터를 쓸 수 없게 되기 때문이다.

 

- RAID 1

RAID 0의 안정성 문제를 해결하기 위해 나온 레벨이다.

RAID 1은 미러링 방식으로 HDD의 데이터를 복제하여 백업 데이터를 생성한다.

속도는 RAID 0보다 느리지만 데이터가 손상되어도 복구가 가능하다는 장점이 있다.

물론, 사용할 수 있는 용량도 반토막 난다.

 

- RAID 4

RAID 1처럼 완전한 복사본을 만드는 것 대신, 오류 검출 및 복구에 사용되는 정보(패리티 비트)를 저장한 장치를 별도로 구성해 두는 방식이다.

새로운 데이터가 쓰일 때마다 패리티를 저장하는 데이터도 갱신되어야 하기 때문에 병목 현상이 발생한다는 문제점이 있다.

 

- RAID 5

RAID 4에서 발생하는 병목 현상을 개선하기 위해 패리티 비트를 각각의 저장소에 분산하는 방식이다.

 

- RAID 6

RAID 5와 기본적인 구성은 동일하지만, 패리티 비트를 2개씩 저장한다.

즉, 오류를 검출하고 복구할 수 있는 수단을 2개씩 가져가는 것이다.

좀 더 안전한 방법이기는 하지만 갱신해야 할 패리티 비트의 양도 늘어났으므로 속도는 더 떨어진다.

 


 


수고하셨습니다!


 

'Dev. Study Note > Computer Architecture' 카테고리의 다른 글

7. 입출력장치  (0) 2023.03.29
5. RAM  (0) 2023.03.26
4. CPU  (0) 2023.03.19
3. 명령어  (0) 2023.03.12
2. 데이터  (0) 2023.03.12
Comments