개발자는 기록이 답이다

혼공 컴퓨터구조 + 운영체제 7. 보조기억장치 본문

CS/운영체제

혼공 컴퓨터구조 + 운영체제 7. 보조기억장치

slow-walker 2024. 1. 21. 21:23

 

1. 다양한 보조기억장치

 

보조기억장치에는 다양한 종류가 있지만 대표적으로 2가지가 있따.

  • 하드 디스크
  • 플래시 메모리
    • USB메모리, SD카드, SSD
하드 디스크

 

하드디스크(HDD: Hard Disk Drive) 는 자기적인 방식으로 데이터를 저장하기에, 자기 디스크(magnetic disck)라고도 칭한다.

대용량 저장 장치가 필요한 작업이나 서버실에 자주 출입하는 작업을 할 경우 하드 디스크를 자주 접하게 된다.

 

▶ 하드 디스크의 생김새

  • 동그란 원판에 데이터를 저장하고, 그것을 회전시켜 뾰족한 리더기로 데이터를 읽음
  • CD나 옛날 음향 장치인 LP처럼 생김

 

실질적으로 데이터가 저장되는 곳(동그란 원판) = 플래터(platter)

  • 플래터는 자기 물질로 덮여 있어 수많은 N극과 S극을 저장한다.
  • N극과 S극은 0과 1의 역할을 수행한다
  • 플래터를 회전시키는 구성 요소 = 스핀들(spindle)
    • 스핀들이 플래터를 돌리는 속도 : 분당 회전수 RPM(Revolution Per Minute)이라는 단위료 표현
      • RPM이 15,000인 하드 디스크는 1분에 15,000바퀴 회전하는 하드 디스크

  • 플래터를 대상으로 데이터를 읽고 쓰는 구성 요소 = 헤드(head)
    • 플래터 위에서 미세하게 떠 있는 채로 데이터를 읽고 쓰는 바늘처럼 생긴 부품
  • 헤드를 원하는 위치로 이동시키는 요소 = 디스크암(disk arm)
    • 헤드가 디스크암에 부착되어 있다

▶ 플래터에 데이터가 저장되는 방법

 

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

  • 플래터를 여러 동심원으로 나누었을때 그 중 하나의 원 = 트랙(track)
    • 한 플래터를 동심원으로 나눈 공간
  • 트랙의 여러 조각으로 나뉘는 부분 중 한 조각 = 섹터(sector)
    • 섹터는 하드 디스크의 가장 작은 전송 단위
    • 하나의 섹터는 일반적으로 512바이트 정도의 크기를 가지고 있지만, 정확한 크기는 하드 디스크에 따라 차이가 있다
    • 일부 하드 디스크의 섹터 크기는 4,096바이트에 이르기도 한다.

  • 여러겹의 플래터 상에서 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위 = 실린더(cylinder)
    • 같은 트랙끼리 연결한 원통 모양의 공간
    • 연속된 정보는 보통 한 실린더에 기록됨
      • e.g. 두 개의 플래터를 사용하는 하드 디스크에서 4 개 섹터를 걸쳐 데이터를 저장할 때는 첫 번째 프래터 윗면, 뒷면과 두 분째 플래터 윗면, 뒷면에 데이터를 저장한다. 연속된 정보를 하나의 실린더에 기록하는 이유는 디스크 암을 움직이디 않고도 바로 데이터에 접근할 수 있기 때문이다.

 

이처럼 데이터는 하드 디스크의 섹터, 트랙, 실린더에 저장된다.

 

 저장된 데이터에 접근하는 과정

 

하드 디스크가 저장된 데이터에 접근하는 시간은 크게 탐색 시간, 회전 지연, 전송 시간으로 나뉜다.

 

탐색 시간(seek time) : 접근하려는 데이터가 저장된 트랙까지 헤드를 이동시키는 시간

 

회전 지연(rotational latency) : 헤드가 있는 곳으로 플래터를 회전시키는 시간

 

전송 시간(transfer time) : 하드 디스크와 컴퓨터 간에 데이터를 전송하는 시간

 

위의 시간들은 별거 아닌 것처럼 보이지만 성능에 큰 영향으르 끼친다.

구글의 AI를 주도하고 있는 제프딘은 과거 '프로그래머가 꼭 알아야 할 컴퓨터 시간들' 이라고 공개했는데, 아래는 일부를 발췌한 내용이다.

 

물론 2011년에 자료가 공개된 이후 오늘날까지 하드 디스크 성능은 많이 향상되었지만, 하드 디스크에서 다량의 데이터를 탐새하고 읽어 들이는 시간이 생각보다 많이 걸린다는 것을 쉽게 짐작할 수 있다.

 

탐색 시간과 회전 지연을 단축시키기 위해서는 플래터를 빨리 돌려 RPM을 높이는 것도 중요하지만,

6-3장에서 배운 참조 지역성, 즉 접근하려는 데이터가 플래터 혹은 헤드를 조금만 옮겨도 접근할 수 있는 곳에 위치해 있는것도 중요하다.

 

▶  다중 헤드 디스크와 고정 헤드 디스크

  • 플래터의 한 면당 헤드가 하나씩 달려 있는 하드 디스크 : 단일 헤드 디스크(single-head disk)
    • 헤드를 데이터가 있는 곳까지 움직여야 하기에 "이동 헤드 디스크"라고 부른다
  • 헤드가 트랙별로 여러 개 달려 있는 하드 디스크 : 다중 헤드 디스크(multiple-head disk)
    • 트랙마다 헤드가 있어 탐색에 시간이 들지 않고, 탐색 시간이 0이다.
    • 이런 점에서 "고정 헤드 디스크"라고 부른다

 

만일 하드 디스크를 한 번도 접해본적이 없다면 하드 디스크 작동 영상을 찾아보길 권장한다

  • 'hard drive running', 'hard drive in slow motion'

 

 

플래시 메모리

 

플래시 메모리(flash memory)도 많이 사용된다. USB메모리, SD카드, SSD가 모두 플래시 메모리 기반 보조기억장치이다.

 

붉은 박스로 표기된 부분이 플래시 메모리이다.

 

 

플래시 메모리는 전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반의 저장 장치이다.

플래시 메모리는 보조기억장치 범주에만 속한다기 보다 다양한 곳에서 널리 사용되는 저장장치로 보는게 맞다.

주기억장치 중 하나인 ROM에도 사용되고, 우리가 일상적으로 접하는 거의 모든 전자 제품 안에 플래시 메모리가 내장되고 있다

 

▶  두 종류의 플래시 메모리

 

  • NAND 플래시 메모리
    • NAND 연산을 수행하는 회로 (NAND 게이트)
    • 대용량 저장 장치로 많이 사용됨 ( 이번 절에서 설명할 플래시 메모리 )
  • NOR 플래시 메모리
    • NOR 연산을 수행하는 회로(NOR게이트)

 

플래시 메모리에는 셀(cell)이라는 단위가 있다.

셀이란 플래시 메모리에서 데이터를 저장하는 가장 작은 단위이다.

이 셀이 모이고 모여 MB, GB, TB 용량을 갖는 저장 장치가 된다.

이때 하나의 셀에 몇 비트를 저장할 수 있느냐에 따라 플래시 메모리 종류가 나뉜다.

  • 한 셀에 1비트를 저장할 수 있는 플래시 메모리 SLC(single Level Cell)타입
  • 한 셀에 2비트를 저장할 수 있는 플래시 메모리 MLC(Multiple Level Cell)타입
  • 한 셀에 3비트를 저장할 수 있는 플래시 메모리 TLC(Triple Level Cell)타입

 

큰 차이처럼 보이지 않아도 플래시 메모리의 수명, 속도, 가격에 큰 영향을 끼친다.

참고로 한 셀에 4비트를 저장하는 QLC타입도 있지만, 3가지 타입 위주로 알아보자.

 

▶  플래시 메모리도 수명이 있나요?

 

Yes. 플래시 메모리 뿐만 아니라 하드 디스크 또한 수명이 있다.

우리가 사용하는 USB 메모리, SSD, SD 카드는 수명이 다하면 더 이상 저장 장치로써 사용이 불가하다.

종이에 연필로 쓰고 지우개로 지우고를 반복하다보면 결국 종이가 찢어지는 것처럼 한 셀에 일정 횟수 이상 데이터를 쓰고 지우면 그 셀은 더 이상 데이트를 저장할 수 없기 때문이다.

 

▶ SLC, MLC, TLC 특징과 차이점

 

사람 한 명을 비트, 셀을 집에 비유해보자.

 

SLC 타입

 

한 집에 한명. 한 셀로 2개의 정보를 표현할 수 있다.

  • 다른 타입에 비해 비트의 빠른 입출력이 가능하다
    • 홀로 거주하는 집에 제약없이 출입 가능한 것이랑 비슷
  • 수명도 다른 타입에 비해 길어서 수만에서 수십만 번 가까이 데이터를 쓰고 지우고를 반복할 수 있다
  • 용량 대비 가격이 높다
    • 마치 혼자서 살면 감당해야 할 주거 비용이 커지는 것과 비슷
  • 그래서 보통 기업에서 데이터를 읽고 쓰기가 매우 많이 반복되며 고성능의 빠른 저장 장치가 필요한 경우 SLC사용한다

 

MLC 타입

 

한 집에 두명, 한 셀로 4개의 정보를 표현할 수 있다.

 

  • SLC 타입보다 속도와 수명은 떨어지지만, 한 셀에 2비트 씩 저장할 수 있다는점에서 SLC타입보다 대용화하기 유리
    • 집의 개수가 같다면 한 집에 한 명씩 사는 것보다 한 집에 두명 씩 사는게 훨씬 더 많은 사람을 수용할 수 있는것과 같은 이치
  • SLC타입보다 용량 대비 가격 저렴
    • 두 명이 한 집에서 주거 비용을 나눠 내면 혼자 감당해야 하는 주거 비용보다 저렴한거랑 비슷
  • 시중에서 사용되는 많은 플래시 메모리 저장장치가 MLC타입(혹은 TLC)이다.

 

TLC 타입

 

한 집에 세명, 한 셀당 3비트씩 저장, 한 셀로 8개의 정보를 표현할 수 있다.

 

  • 대용화에 유리
  • SLC, TLC타입보다 수명과 속도가 떨어지지만 용량 대비 가격 저렴

 

정리

  1. 같은 용량의 플래시 메모리 저장 장치라고 할지라도, 셀의 타입에 따라 수명, 가격, 성능이 다르다.
  2. 썻다 지우기를 자주 반복해야 하는 경우 or 높은 성능을 원하는 경우 : 고가의 SLC 타입
  3. 저가의 대용량 장치를 원하는 경우 : TLC타입
  4. 중간을 원하는 경우 : MLC타입

 

 

이제 플래시 메모리의 가장 작은 단위인 셀보다 더 큰 단위를 알아보자.

 

  • 셀들이 모여 만들어진 단위 : 페이지(page)
  • 페이지가 모여 만들어진 단위 : 블록(block)
  • 블록이 모여 만들어진 단위 : 플레인(plane)
  • 플레인이 모여 만들어진 단위 : 다이(die)

 

  • 플래시에서 읽기와 쓰기는 페이지 단위로 이루어진다.
  • 삭제는 페이지보다 큰 블록 단위로 이루어진다.

읽기/쓰기 단위와 삭제 단위가 다르다는 것이 플래시 메모리의 가잔 큰 특징 중 하나이다.

 

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

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

 

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

 

▶  플래시 메모리의 간단한 동작 원리

 

X라는 블록이 4개의 페이지로 이루어져 있다고 가정해보자.

그리고 그 중 2개의 페이지에는 A와 B라는 데이터가 저장되어있다. 여기서 블록 X에 새로운 데이터 C를 저장하면 아래처럼 저장된다.

(플래시 메모리의 읽기 쓰기 단위는 페이지)

 

여기서 새롭게 저장된 C와 기존에 저장되어 있던 B는 그대로 둔 채 기존의 A만을 A'로 수정하고 싶다면?

 

플래시 메모리는 덮어쓰기가 불가능하기 때문에 기존에 저장된 A는 InValid상태가 되어 더 이상 값이 유효하지 않은 쓰레기 값이 되고,

새로운 A'데이터가 저장된다. 결과적으로 블록 X의 Valid 페이지는 B, C, A'가 된다.

 

그런데 여기서 문제는 A와 같이 쓰레기값을 저장하고 있는 공간은 사용하지 않을 공간인데도 불구하고 용량을 차지한다는 것이다.

이는 '용량 낭비'이다. 그렇다고 플래시 메모리에서 삭제는 블록단위로 수행되기 때문에 A만 지울 수도 없다.

 

그래서 최근 SSD를 비롯한 플래시 메모리는 이런 쓰레기값을 정리하기 위해 가비지 컬렉션(garbage collection)기능을 제공한다.

  1. 유효한 페이지들만을 새로운 블록으로 복사한 뒤
  2. 기존의 블록을삭제하는 기능

 

즉, 블록 X의 모드 ㄴ유요한 페이지를 새로운 블록 Y로 옮기고, 블록 X를 삭제하는 것이다.

 

2. RAID의 정의와 종류

 

1TB 하드 디스크 4개와 4TB 하드 디스크 한개를 비교해 보자.

둘중에 어떻게 사용하는게 더 나을까?

 

1TB 하드 디스크 4개로 RAID를 구성하면 4TB 하드디스크 한 개의 성능과 안전성을 능가할 수 있다.

그렇다면 RAID가 무엇이며, 왜 이런 차이가 발생하는지 알아보자.

 

 

 

RAID의 정의

 

여러분이 구글, 아마존과 같은 글로벌 IT 기법의 서버를 관리하는 엔지니어라고 생각해보자.

매일 같이 수십, 수백 TB 데이터가 서버로 쏟아지고, 데이터에는 개인 정보, 결제 정보와 같이 절대로 잃어버려서는 안 될 민감한 정보도 포함되어 있다.

 

이런 정보를 어떻게 안전하게 관리할 수 있을까?

앞 절에서 '보조기억 장치에도 수명이 있다' 라는 사실을 학습했다.

그래서 '하드 디스크와 같은 보조기억장치에 어떻게든 저장만 하면 됩니다' 같은 단순한 답변은 다소 부족한 해법이다.

 

이럴때 사용할 수 있는 방법 중 하나가 RAID이다.

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

 

 

RAID의 종류

 

여러 개의 하드디스크나 SSD를 마치 하나의 장치처럼 사용하는 RAID를 구성하는 방법은 여러가지다

RAID 구성 방법을 RAID 레벨이라고 표현한다.

 

  • RAID0
  • RAID1
  • RAID2 (현재 잘 활용되지 않는다)
  • RAID3 (현재 잘 활용되지 않는다)
  • RAID4
  • RAID5
  • RAID6
  • RAID10
  • RAID50
RAID0

 

RAID 0 : 보조기억장치에 데이터를 단순히 나누어 저장하는 구성 방식 (병렬로 분산하여 저장)

 

예를 들어, 1TB 하드 디스크 4개로 RAID 0을 구성했다고 가정해보자

 

이제 어떠한 데이터를 저장할 때 각 하드 디스크는 아래와 같이 번갈아 가며 데이터를 저장한다.

즉, 저장되는 데이터가 하드 디스크 개수만큼 나뉘어 자장되는 것이다.

 

 

이때 줄무니처럼 분산되어 저장된 데이터를 스트라입(stripe)이라 하고, 분산하여 저장하는 것을 스트라이핑(striping)이라고 한다.

참고로 stripe는 영어로 줄무늬라는 뜻이다.

 

위와 같이 데이터가 분산되어 저장되면, 다시 말해 스트라이핑되면 저장된 데이터를 읽고 쓰는 속도가 빨라진다.

 

하나의 대용량 저장 장치를 이용했더라면 여러 번에 걸쳐 읽고 썻을 데이터를 동시에 읽고 쓸 수 있기 때문이다.

그렇기에 4TB 저장장치 한 개를 읽고 쓰는 속도보다 RAID 0으로 구성된 1TB 저장 장치 4개의 속도가 이론상 4배 가량 빠르다.

 

 

하지만 저장된 정보가 안전하지 않다는 단점이 있다.

RAID 0으로 구성된 하드 디스크 중 하나에 문제가 생긴다면 다른 모든 하드 디스크의 정보를 읽는데 문제가 생길 수 있다.

 

 

이러한 단점을 보완하기 위해 등장한 것이 RAID 1이다

 

RAID 1

 

RAID 1  : 완전한 복사본을 만드는 방식, 미러링(mirroring)이라고도 부름.

 

아래 그림은 4개의 하드 디스크를 RAID 1로 구성한 모습이다. RAID 0처럼 데이터 스트라이핑이 사용되긴 했지만, 오른쪽의 두 하드 디스크는 마치 거울처럼 왼쪽의 두 하드 디스크와 동일한 내용을 저장한다.

이처럼 RAID 1에 어떠한 데이터를 쓸 때는 원본과 복사본 2 군데에 쓴다. 그렇기에 쓰기 속도는 RAID 0보다 느리다.

 

 RAID 1 방식은 복구가 매우 간단하다.

똑같은 디스크가 2개 있는 셈이니, 하나에 문제가 발생해도 잃어버린 정보를 금방 되찾을 수 있다.

 

하지만  RAID 1은 하드 디스크 개수가 한정되었을 때 사용 가능한 용량이 적어지는 단점이 있다.

 RAID 0 구성은 4TB의 정보를 저장할 수 있는 반면,  RAID 1에서는 2TB의 정보만 저장할 수 있다.

 

즉,  RAID 1에서는 복사본이 만들어지는 용량만큼 사용자가 사용하지 못한다.

결국 많은 양의 하드 디스크가 필요하게 되고 비용이 증가한다는 단점이 있다.

 

 RAID 4

 

 RAID 4 :  RAID 1 처럼 완전한 복사본을 만드는 대신 오류를 검출하고 복구하기 위한 정보를 저장한 장치를 두는 구성 방식

'오류를 검출하고 복구하기 위한 정보'를 패리트 비트(parity bit)라고 한다.

RAID 4 에서는 패리티를 저장한 장치를 이용해 다른 장치들의 오류를 검출하고, 오류가 있다면 복구한다.

 

이로써 RAID 4 는 RAID 1보다 적은 하드 디스크로도 데이터를 안전하게 보관할 수 있다.

 

▶  오류를 검출하는 패리티 비트

 

원래 패리티 비트는 오류 검출만 가능할 뿐 오류 복구는 불가능하다.

하지만 RAID에서는 패리티 값으로 오류 수정도 가능하다. 구체적인 패리티 계산법은 다루지 않겠지만 아래 2가지만 기억하면 된다

  1. RAID 4에서는 패리티 정보를 저장한 장치로써 나머지 장치들의 오류를 검출 및 복구한다
  2. 패리티 비트는 본래 오류 검출용 정보지만, RAID에서는 오류 복구도 가능하다

 

RAID 5

 

RAID 4에서는 어떤 새로운 데이터가 저장될 때마다 패리티를 저장하는 디스크에도 데이터를 쓰게 되므로 패리티를 저장하는 장치에 병목 현상이 발생한다는 문제점이 있다

.

 

RAID 5 : 패리티 정보를 분산하여 저장하는 방식으로 RAID 4의 문제인 병목 현상을 해소한다.

 

RAID 6

 

RAID 6 : 기본적으로 RAID 5와 비슷하나 서로 다른 2개의 패리티를 두는 방식

 

오류를 검출하고 복구할 수 있는 수단이 2개가 생긴 셈이다.

따라서 RAID 6은 RAID 4나 RAID 5보다 안전한 구성이라고 볼 수 있다.

하지만 새로운 정보를 저장할때마다 함께 저장할 패리티가 2개 이므로, 쓰기 속도는 RAID 5보다 느리다.

따라서 RAID 6은 데이터 저장속도를 조금 희생하더라도 데이터를 더욱 안전하게 보관하고 싶을때 사용한다.

 

이외에도 Nest RAID 가 있다

  • RAID 0과 RAID 1을 혼합한 RAID 10
  • RAID 0과 RAID 5를 혼합한 RAID 50

각 RAID 레벨마다 장단점이 있으므로 상황에 따라 무엇을 최우선으로 하는지에 따라 최적의 RAID 레벨은 달라질 수 있다.