Chapter 07

저장장치와 파일

RAM은 빠르지만 전원을 끄면 모든 것을 잊는다. 사진, 앱, 운영체제처럼 오래 남아야 하는 것은 저장장치에 둔다. 주방으로 치면 창고다. 이 장에서는 창고가 어떻게 생겼는지(HDD와 SSD), 그 안의 물건을 어떻게 정리하는지(파일 시스템), 그리고 버렸다고 생각한 물건이 왜 여전히 창고에 남아 있는지를 알아본다.

잊지 않는 기억: 비휘발성

6장에서 본 DRAM은 전하가 새서 계속 새로 채워야 했다. 전원이 꺼지면 모든 것이 사라진다. 이런 성질을 휘발성(volatile)이라 한다. 반대로 전원 없이도 수년간 데이터를 유지하는 장치를 비휘발성(non-volatile) 저장장치라 한다.

메모리 (DRAM)SSDHDD
전원이 꺼지면사라짐남음남음
기억 방법새는 커패시터의 전하절연막에 갇힌 전자원판 표면의 자석 방향
무작위 읽기 시간≈ 0.1 µs≈ 50~100 µs≈ 5~10 ms
1 GB당 가격 (대략)가장 비쌈중간가장 쌈
움직이는 부품없음없음있음 (회전 원판, 헤드)

하드디스크: 레코드판과 바늘

하드디스크(HDD, Hard Disk Drive)는 자성 물질을 입힌 금속 원판이 1분에 5,400~7,200번 돌고, 그 위를 머리카락보다 얇은 높이로 떠 있는 헤드가 오가며 자석의 방향(N/S)으로 0과 1을 읽고 쓴다. 레코드판과 바늘을 떠올리면 된다.

데이터를 읽으려면 두 가지를 기다려야 한다. ① 헤드가 원하는 동심원(트랙)까지 팔을 움직이는 시간(탐색 시간), ② 원판이 돌아서 원하는 위치가 헤드 밑에 올 때까지 기다리는 시간(회전 지연). 둘 다 기계가 실제로 움직이는 시간이라 밀리초 단위다. CPU 기준으로는 몇 달이다(1장).

SIMULATOR

HDD vs SSD 읽기 경주

읽을 데이터의 위치
 
HDD 걸린 시간—
SSD 걸린 시간—
차이—
애니메이션은 실제보다 약 100배 느리게 재생된다. 해볼 것: “흩어짐”을 고르면 HDD는 조각마다 팔을 움직이고 회전을 기다려야 해서 크게 느려진다. 움직이는 부품이 없는 SSD는 위치와 상관없이 거의 일정하다. 예전에 “디스크 조각 모음”을 하던 이유가 여기에 있다.

SSD: 전자를 가두는 감옥

SSD(Solid State Drive)는 움직이는 부품 없이 반도체 칩으로만 데이터를 저장한다. 그 칩이 플래시 메모리(정확히는 NAND 플래시)다. 플래시 셀은 트랜지스터 안에 사방이 절연체로 막힌 작은 방을 하나 더 두고, 높은 전압으로 전자를 억지로 밀어 넣어 가둔다. 갇힌 전자는 전원이 꺼져도 빠져나가지 못해 수년간 남는다. 전자가 갇혀 있는지 아닌지로 0과 1을 구분한다.

잉크로 쓰는 공책

플래시는 연필이 아니라 잉크로 쓰는 공책과 비슷하다. 빈 줄에는 언제든 쓸 수 있지만, 이미 쓴 줄을 고쳐 쓸 수는 없다. 지우려면 여러 쪽이 묶인 한 장(블록)을 통째로 표백해야 한다. 그래서 내용을 고칠 때는 새 빈 줄에 다시 쓰고, 옛 줄에는 “무효” 표시만 해 둔다. 무효 줄이 쌓이면 아직 유효한 줄만 다른 장으로 옮겨 적고 그 장을 통째로 지운다.

SIMULATOR

플래시 메모리의 쓰기와 지우기

파일 A~D를 계속 수정해 보세요
처음에는 A, B, C, D 네 파일이 각각 한 페이지씩 들어 있다.
사용자가 요청한 쓰기0
실제 플래시 쓰기0
블록 지우기 횟수0
파랑 = 유효한 데이터, 빨간 취소선 = 무효(옛 버전), 회색 = 빈 페이지. 빈 페이지가 바닥나면 SSD가 알아서 가비지 컬렉션을 한다: 무효가 가장 많은 블록의 유효 데이터를 옮기고 블록을 통째로 지운다. 옮겨 쓰는 만큼 “실제 쓰기”가 요청보다 많아진다. 플래시 셀은 수천 번 지우면 닳기 때문에 SSD는 지우기를 여러 블록에 고르게 나눈다(웨어 레벨링).

이런 복잡한 관리는 SSD 안에 들어 있는 작은 컴퓨터(컨트롤러)가 혼자 처리한다. 운영체제는 “5번 블록에 써 줘”라고만 말하고, 컨트롤러가 실제로는 빈 페이지 어딘가에 쓰고 그 위치를 자기만의 표에 적어 둔다. 9장에서 배울 가상 메모리와 놀랄 만큼 닮은 아이디어다.

파일 시스템: 창고의 정리 규칙

저장장치는 그 자체로는 번호 붙은 블록(보통 4 KB)이 길게 늘어선 공간일 뿐이다. 여기에는 “사진.jpg”나 “문서” 폴더 같은 개념이 없다. 이름 붙은 파일과 폴더라는 정리 방식을 제공하는 것이 운영체제의 파일 시스템(file system)이다. 윈도우의 NTFS, 맥의 APFS, 리눅스의 ext4가 대표적이다.

파일 시스템은 저장장치 한쪽에 목록을 두고, “사진.jpg = 크기 12 KB, 블록 5, 6, 7번”처럼 파일 이름과 데이터가 들어 있는 블록 번호를 적어 둔다. 도서관의 도서 목록 카드와 같다. 아래에서 파일을 만들고 지워 보자.

SIMULATOR

파일 시스템: 블록과 목록

새 파일 크기
 
파일 이름크기블록 목록조각 수
빗금 칸은 지운 파일이 있던 자리다. 목록에서는 사라졌지만 내용은 그대로 남아 있다. 파일을 만들고 지우기를 반복하면 빈 자리가 여기저기 흩어져 새 파일이 여러 조각으로 나뉜다(단편화). HDD에서는 이것이 느려지는 원인이었다.

폴더도 사실은 특별한 파일이다. “이 폴더 안에는 이런 이름의 파일들이 있고, 각각의 목록 정보는 여기 있다”라는 내용을 담은 파일이다. 그래서 폴더 안에 폴더를 끝없이 넣을 수 있다. 파일을 다른 폴더로 옮기는 일이 아무리 큰 파일이어도 순식간에 끝나는 이유도 이것이다. 데이터를 옮기는 게 아니라 목록의 한 줄만 다른 폴더로 옮겨 적기 때문이다(같은 저장장치 안에서는).

지워도 남는 데이터

위 시뮬레이터에서 보았듯이 파일을 지우면 파일 시스템은 목록에서 그 줄만 지우고 블록을 “빈 자리”로 표시한다. 내용을 일일이 0으로 덮어쓰지 않는다. 그게 훨씬 빠르기 때문이다. 그래서 새 파일이 그 자리를 덮어쓰기 전까지는 복구 프로그램으로 되살릴 수 있다. 실수로 지운 사진을 살리는 데는 고마운 일이지만, 중고로 파는 컴퓨터에서 개인 정보가 새어 나가는 원인이 되기도 한다.

저장장치를 넘기기 전에

컴퓨터나 휴대폰을 팔거나 버릴 때는 단순히 파일을 지우는 대신 공장 초기화나 저장장치 전체 암호화 후 초기화를 하자. 요즘 스마트폰과 노트북은 저장장치를 기본으로 암호화해 두고, 초기화할 때 암호 열쇠를 버린다. 열쇠가 없으면 남은 데이터는 의미 없는 숫자 더미다.

SSD의 TRIM

SSD에서는 운영체제가 파일을 지울 때 TRIM이라는 신호로 “이 블록들은 이제 안 쓴다”고 컨트롤러에 알려 준다. 컨트롤러는 그 페이지를 무효로 표시하고 가비지 컬렉션 때 지운다. 그래서 SSD는 HDD보다 지운 파일이 복구되기 어렵다. 다만 언제 실제로 지워질지는 컨트롤러 마음이다.

핵심 정리

  1. RAM은 휘발성, SSD와 HDD는 비휘발성이다. 오래 둘 데이터는 저장장치에, 작업 중인 데이터는 RAM에 둔다.
  2. HDD는 회전 원판과 움직이는 헤드로 읽는다. 기계가 움직이는 시간 때문에 흩어진 데이터를 읽을 때 특히 느리다.
  3. SSD는 플래시 셀에 전자를 가둬 기억한다. 덮어쓰기가 안 되고 블록 단위로 지워야 하며, 지울수록 닳는다. 컨트롤러가 이를 숨겨 준다.
  4. 파일 시스템은 블록 공간 위에 파일 이름, 폴더, 블록 목록이라는 정리 체계를 만든다.
  5. 파일을 지우면 대개 목록만 지워지고 내용은 남는다. 기기를 넘길 때는 암호화와 초기화가 필요하다.

확인 퀴즈

HDD가 흩어진 작은 파일 여러 개를 읽을 때 특히 느린 이유는?

탐색 시간과 회전 지연은 기계적 움직임이라 밀리초 단위다. 조각이 많을수록 이 기다림이 반복된다.

플래시 메모리(SSD)에 이미 데이터가 쓰인 페이지를 수정하려면?

플래시는 블록 단위로만 지울 수 있어서 제자리 덮어쓰기가 안 된다. 컨트롤러가 새 자리에 쓰고 위치 표를 고친다.

휴지통까지 비운 파일을 복구 프로그램으로 되살릴 수 있는 경우가 있는 이유는?

삭제는 “이 자리 비었음” 표시일 뿐이다. 새 데이터가 덮어쓰기 전까지 내용은 그대로다.

같은 SSD 안에서 10 GB짜리 영상 파일을 다른 폴더로 “이동”하면 순식간에 끝나는 이유는?

폴더는 “이름 → 파일 정보”를 담은 목록이다. 이동은 목록 한 줄을 옮겨 적는 일일 뿐이다. 다른 저장장치로 옮길 때는 실제 복사가 필요하다.