본문 바로가기
AI & CS 지식/컴퓨터구조

[혼공컴운] 7. 보조기억장치

by rahites 2024. 8. 29.

보조기억장치

1. 다양한 보조기억장치

보조기억장치에는 다양한 종류가 있지만, 그 중 대표적으로 사용되는 보조기억장치로는 하드 디스크와 플래시 메모리가 존재한다. 하드 디스크는 우리가 일반적으로 알고 있는 하드 디스크(HDD)가 맞으며 플래시 메모리는 USB 메모리, SD 카드, SSD같은 저장장치를 의미한다.

 

하드 디스크(HDD; Hard Disk Drive)

먼저 하드 디스크에 대해 알아보자. 하드 디스크는 자기적인 방식으로 데이터를 저장한다. 때문에 자기 디스크(Magnetic Disk)라고도 부르며 아래 사진처럼 CD나 LP와 비슷하게 구성되어 있다.

[위키 백과] 하드 디스크

실질적으로 데이터가 저장되는 곳은 사진 속 동그란 원판이며 이를 플래터(Platter)라고 한다. 플래터는 자기 물질로 덮여있어 수많은 N극과 S극을 저장하며 각각의 N극과 S극은 0과 1의 역할을 수행한다.

 

플래터를 회전시키는 구성요소를 스핀들(Spindle)이라고 한다. 위 사진 속 동그란 원판 가운데 구멍이 나있는 부분이 스핀들이다. 스핀들이 플래터를 돌리는 속도는 분당 회전수를 나타내는 RPM(Revolution Per Minute)라는 단위로 표현된다. 예를 들어 RPM이 7,000이라면 하드 디스크는 1분에 7,000바퀴를 회전한다.

 

플래터를 대상으로 데이터를 읽고 쓰는 구성요소는 헤드(Head)이다. 헤드는 디스크 암(Disk Arm)에 부착되어 있으며 마치 바늘처럼 플래터 위를 떠다니며 데이터를 읽고 쓰는데 사용된다. CD나 LP에 비해 하드 디스크는 많은 양의 데이터를 저장해야 하므로 여러 겹의 플래터로 이루어져 있고 플래터 양면을 모두 사용한다. 양면 플래터를 사용하기 때문에 플래터 당 2개의 헤드가 사용된다.

 

그렇다면 데이터는 어떤 방식으로 플래터에 저장될까??

http://www.dytechnology.co.kr/technology/01/

플래터는 트랙(Track)섹터(Sector) 단위로 데이터를 저장한다. 위 그림처럼 플래터를 여러 동심원으로 나누었을 때 그 중 하나의 원을 트랙이라고 부른다. 그리고 트랙을 여러 개로 나눈 공간 중 하나가 바로 섹터이다. 섹터는 하드 디스크의 가장 작은 전송 단위로 일반적으로 512 바이트 정도의 크기를 가진다(하드 디스크에 따라 다름).

 

하나 이상의 섹터를 묶어 블록(Block) 또는 클러스터(Cluster)라고 브르기도 하며 여러 겹의 플래터 상에서 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위를 실린더(Cylinder)라고 한다. 연속된 정보는 보통 하나의 실린더에 기록된다. 이렇게 하는 이유는 디스크 암을 움직이지 않고 바로 데이터에 접근하기 위함이다.

예를 들어 데이터를 4개의 섹터에 저장하고 싶다고 하면 한 플래터에서 옆으로 4개에 섹터에 데이터를 저장하는 것이 아니라 2개의 플래터에서 윗면, 뒷면을 모두 사용하여 데이터를 저장한다.

 

그렇다면 하드 디스크에 저장된 데이터에는 어떻게 접근할 수 있을까?

 

저장된 데이터에 접근하는 시간을 가지고 이를 알아보자. 하드 디스크가 저장된 데이터에 접근하는 시간은 크게 탐색 시간, 회전 지연, 전송 시간으로 나눌 수 있다. 

  • 탐색 시간(Seek Time)은 접근하려는 "데이터가 저장된 트랙"까지 "헤드"를 이동시키는 시간을 의미한다.
  • 회전 지연(Rotational Latency)는 헤드가 있는 곳으로 플래터를 회전시키는 시간을 의미한다.
  • 전송 시간(Transfer Time)은 하드 디스크와 컴퓨터 간에 데이터를 전송하는 시간을 의미한다.

위 시간들은 별거 아닌 것 같아도 성능에 큰 영향을 미치며 HDD의 Latency를 몸소 체감하려면 아래 페이지에서 Latency를 인간 세상으로 치환한 시간을 파악해보도록 하자.

https://gist.github.com/hellerbarde/2843375

 

Latency numbers every programmer should know

Latency numbers every programmer should know. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

탐색 시간과 회전 지연을 단축하기 위해서는 플래터를 빨리 돌리는 것(높은 RPM)도 중요하지만 06-3절에서 배운 참조 지역성처럼 접근하려는 데이터가 플래터나 헤드를 조금만 옮겨도 접근할 수 있도록 위치하게 만드는 것도 중요하다.

 

또한 트랙별로 헤드가 달려있는 하드 디스크도 존재하는데 이러한 하드 디스크를 다중 헤드 디스크(Multiple-Head Disk)라고 한다. 이러한 다중 헤드 디스크는 트랙마다 헤드가 있기 때문에 탐색시간이 0이며 헤드를 움직일 필요가 없기 때문에 고정 헤드 디스크(Fixed-Head Disk)라고도 부른다.

일반적으로 헤드가 하나인 하드 디스크는 단일 헤드 디스크(Single-Head Disk)/이동 헤드 디스크(Movable-Head Disk)

 

실제 하드 디스크의 작동 영상은 유튜브 검색으로 쉽게 확인해볼 수 있다.

https://www.youtube.com/watch?v=ojGvHDjHPb4

 

플래시 메모리(Flash Memory)

플래시 메모리는 전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반의 저장 장치이다. 플래시 메모리는 보조기억장치에만 사용되는 것은 아니고 주기억장치인 ROM, 일상적으로 사용하는 대부분의 전자 제품에 내장되어 있다.

 

플래시 메모리에는 크게 NAND 플래시 메모리NOR 플래시 메모리가 있다. NAND 플래시 메모리는 NAND 연산을 수행하는 회로를 기반으로, NOR 플래시 메모리는 NOR 연산을 수행하는 회로를 기반으로 만들어졌다. NAND 플래시 메모리를 주로 대용량 저장 장치로 많이 사용하기 때문에 이번 절에서는 NAND 플래시 메모리를 주로 설명한다.

 

플래시 메모리에는 셀(Cell)이라는 단위가 있다. 셀이란 플래시 메모리에서 데이터를 저장하는 가장 작은 단위이다. 하나의 셀에 몇 비트를 저장할 수 있느냐에 따라 플래시 메모리의 종류가 나뉘는데 한 셀에 1비트를 저장하는 SLC(Single Level Cell), 한 셀에 2비트를 저장할 수 있는 MLC(Multiple Level Cell), 한 셀에 3비트를 저장할 수 있는 TLC(Triple Level Cell) 타입이 존재한다.

한 셀에 4비트를 저장할 수 있는 QLC(Quad Level Cell)도 존재한다.

 

SLC 타입

SLC 타입은 한 셀에 1비트를 저장할 수 있기에 0과 1 두가지 정보만을 표현할 수 있다. 그만큼 비트의 빠른 입출력이 가능하며 MLC나 TLC에 비해 수명도 길다는 장점을 가진다. 하지만, SLC 타입은 용량 대비 가격이 높아 고성능의 빠른 저장 장치가 필요한 경우에 주로 사용한다.

 

MLC 타입

MLC 타입은 2비트, 즉 4개의 정보를 표현할 수 있다. SLC 타입보다 속도와 수명은 떨어지지만 대용량화하기가 쉽다. SLC 타입보다 용량 대비 가격이 저렴하고 시중에 판매되는 많은 플래시 메모리 저장 장치들이 MLC 타입으로 만들어졌다.

 

TLC 타입

TLC 타입은 한 셀당 3비트(8개의 정보)를 저장할 수 있기 때문에 대용화 하는데에 유리하다. SLC나 MLC 타입보다 수명이나 속도가 떨어지지만 용량 대비 가격이 저렴하다는 장점을 가진다.

 

구분 SLC MLC TLC
셀당 bit 1 bit 2 bit 3 bit
수명 길다 보통 짧다
읽기/쓰기 속도 빠르다 보통 느리다
용량 대비 가격 높다 보통 낮다

당연하게도 QLC의 경우에는 SLC ~ TLC로 이어지는 성능의 고저가 그대로 이어서 진행된다.

 

셀 단위보다 큰 단위로는 셀들이 모여 만들어진 페이지(Page), 페이지가 모여 만들어진 블록(Block), 블록이 모여 만들어진 플레인(Plane), 플레인이 모여 만들어진 다이(Die)가 있다. 이 중 플래시 메모리에서 읽기와 쓰기는 페이지 단위로 이루어지고 삭제는 블록 단위로 이루어진다.

 

페이지는 3개의 상태를 가질 수 있다.

  • Free 상태 : 어떠한 데이터도 저장하고 있지 않아 새로운 데이터를 저장할 수 있는 상태
  • Valid 상태 : 이미 유효한 데이터를 저장하고 있는 상태
  • Invalid 상태 : 유효하지 않은 데이터를 저장하고 있는 상태(Dummy)

플래시 메모리는 하드 디스크와 달리 덮어쓰기가 불가능하기 때문에 Valid 상태인 페이지에는 새로운 데이터를 저장할 수가 없다.

 

그렇다면 플래시 메모리에서는 어떤식으로 이미 저장되어 있는 데이터를 수정할까?

A B
   

예를 들어 위와 같이 4개의 페이지로 이루어진 블록이 하나 존재한다고 가정해보자. 이 블록에는 이미 A와 B라는 데이터가 2개의 페이지에 나누어 저장되어 있다. 

 

이 때 새로운 데이터 C를 저장한다면 블록의 내용물은 아래와 같이 변하게 된다.

A B
C  

플래시 메모리의 읽기 쓰기 단위는 페이지이기 때문이다.

 

자 그럼 이 때 기존에 존재하던 데이터 A를 A'로 바꾸고 싶다면 어떻게 할까? 

 A  B
C A'

플래시 메모리에서 덮어쓰기는 불가능하기 때문에 기존에 저장된 A를 Invalid하게 만들어주고, 다른 블록에 A'를 저장해준다. 하지만 계속해서 이런식으로 데이터를 저장해줄 경우 쓸데 없는 데이터가 남아 저장되게 된다. 그렇기 때문에 플래시 메모리에서는 가비지 컬렉션(Garbage Collection) 기능을 제공한다.

 

가비지 컬렉션을 수행하면 한 블록 안에 있는 Valid한 페이지들만을 새로운 블록으로 복사한 뒤 기존에 존재하던 블록을 삭제한다. 이를 통해 공간을 효율적으로 정리할 수 있다.

 

2. RAID의 정의와 종류

RAID란 Redundant Array of Independent Disks의 준말로 데이터의 안전성 혹은 높은 성능을 위해 여러 개의 물리적 보조기억장치를 하나의 논리적 보조기억장치처럼 사용하는 기술을 의미한다(주로 하드 디스크나 SSD를 활용).

 

RAID를 구성하는 방법은 RAID 레벨이라 표현하며 대표적으로 RAID 0 ~ RAID 6이 존재한다. 또한 여기서 파생된 RAID 10, RAID 50도 있는데 이번에는 RAID 0 ~ RAID 6에 대해 알아보도록 하겠다(RAID 2와 RAID 3은 현재 잘 사용되지 않아서 이 또한 빼고 알아보자).

 

RAID 0

RAID 0은 여러 개의 보조기억장치에 데이터를 단순히 나누어 저장하는 구성 방식이다. 예를 들어 1TB 하드 디스크 4개에 RAID 0을 구성했다고 가정하고 내가 4TB 크기의 데이터를 저장하고 싶다고 하자.

 

A1 A2 A3 A4
B1 B2 B3 B4

하드 디스크 4개(1, 2, 3, 4)에 A, B 데이터를 나누어 저장

 

그러면 데이터를 저장할 때 각 하드 디스크는 순서를 번갈아가며 데이터를 저장한다. 이 때 마치 줄무늬처럼 분산되어 저장된 데이터를 스트라입(Stripe)라고 하고 분산하여 저장하는 것을 스트라이핑(Striping)이라고 한다.

 

이렇게 데이터가 분산 저장되면, 저장된 데이터를 읽고 쓰는 속도가 빨라진다. 그 이유는 하나의 저장 장치를 사용했더라면 해당 장치를 가지고 여러 번에 걸쳐 읽고 썼을텐데 위의 경우에는 4개의 저장 장치를 활용하여 동시에 데이터를 읽고 쓸 수 있기 때문이다(이론상 4배가 빠름).

 

물론 장점만 있는 것은 아니다. RAID 0은 저장된 정보가 안전하지 않다는 단점을 가지는데, RAID 0으로 구성된 하드 디스크 중 하나에 문제가 생긴다면 다른 모든 하드 디스크의 정보를 읽는 데에 문제가 생길 수 있다(하나의 정보를 나누어 저장했기 때문에).

예를 들어 위 케이스에서 하드 디스크 3번이 고장났을 경우, A3과 B3에 문제가 발생해 A, B 데이터 모두 온전치 않은 문제가 발생한다.

 

RAID 1

이러한 RAID 0의 문제를 해결하기 위해 등장한 것이 RAID 1이다. RAID 1은 거울처럼 완전한 복사본을 만드는 구성이기에 미러링(Mirroring)이라고도 부른다. 

 

위의 케이스처럼 4개의 하드 디스크를 사용한다면 2개는 원본 데이터를, 2개는 복사본 데이터를 저장하는데에 사용한다. 즉, 데이터를 쓸 때 한번에 두 군데에 저장한다고 생각하면 된다(당연히 속도는 RAID 0보다 느리다).

 

A1 A2 A1 A2
B1 B2 B1 B2

하드디스크 1, 2에 원본을 3, 4의 1, 2의 복사본을 저장

 

따라서 RAID 1 방식은 복구가 간단하다는 장점을 가진다. 하지만 하드 디스크 개수가 한정적일 때 사용 가능한 용량이 적어진다는 단점이 있다. 따라서 많은 양의 하드 디스크가 필요하게 되고 이는 곧 비용이 증가한다는 문제점으로 이어진다.

 

RAID 4

RAID 4는 RAID 1처럼 완전한 복사본을 만드는 대신 오류를 검출하고 복구하기 위한 정보를 저장한 장치를 두는 구성방식이다. 이 때 이 오류를 검출하고 복구하기 위한 정보를 패리티 비트(Parity Bit)라고 한다. RAID 4에서는 Parity를 저장한 장치를 이용해 다른 장치들의 오류를 검출하고, 만약 오류가 있다면 이를 복구한다.

 

A1 A2 A3 Parity A
B1 B2 B3 Parity B

Parity Bit를 4번째 하드디스크에 저장

 

이로써 RAID 4는 RAID 1 기법보다 동일한 하드 디스크 개수일때 더 많은 데이터를 저장할 수 있다.

 

RAID 5

RAID 4의 문제점은 새로운 데이터가 저장될 때마다 Parity를 저장하는 디스크에도 데이터를 써야하기 때문에 Parity를 저장하는 장치에 병목 현상이 발생한다는 것이다.

 

따라서 RAID 5에서는 Parity를 담당하는 하드 디스크를 두는 것이 아니라 Parity를 모든 하드디스크에 분산하여 저장한다.

 

A1 Parity A A2 A3
B1 B2 Parity B B3

Parity를 분산하여 저장

 

RAID 6

RAID 6의 기본 구성은 RAID 5와 같지만 RAID 6은 하나의 데이터에 대해 2개의 Parity를 가진다. 때문에 RAID 4나 5보다 안정성이 높은 대신 속도는 다소 느리다.

A1 Parity 1 A Parity 2 A A2
B1 B2 Parity 1 B Parity 2 B

 

지금까지 다양한 RAID 방식에 대해 알아보았는데 이 외에도 여러 RAID를 혼합한 Nested RAID 방식인 RAID 10(0+1), RAID 50(0+5) 등도 존재한다.

댓글