이 글은 한빛미디어 출판사의 '혼자 공부하는 컴퓨터 구조+운영체제(강민철 저)'를 정리한 내용입니다.
대중적인 보조기억장치는 하드 디스크와 플래시 메모리인데, 플래시 메모리에는 USB 메모리, SD 카드, SSD와 같은 저장 장치가 있다.
자기적인 방식으로 데이터를 저장하는 보조기억장치. 그래서 자기 디스크(magnetic disk)라고도 한다.

그림 출처 - https://uk.rs-online.com/web/content/discovery/ideas-and-advice/hard-drives-guide


그림 출처 - https://en.wikipedia.org/wiki/Hard_disk_drive
(며칠 전에 범죄도시4를 봤는데 영화에서 개발자들이 컴퓨터에 꽂았다 뺐다 하는 게 하드디스크였다...^^)
하드 디스크에서 데이터가 저장되는 곳은 동그란 원판 모양의 '플래터(platter)'이다. 플래터는 자기 물질로 덮여 있어 수많은 N극과 S극을 저장한다. N극과 S극은 0과 1의 역할을 수행한다.
이 플래터를 회전시키는 구성 요소를 스핀들(spindle)이라고 한다. 스핀들이 플래터를 돌리는 속도는 분당 회전수를 나타내는 RPM(Revolution Per Minute)이라는 단위로 표현된다. RPM이 15,000인 하드 디스크는 1분에 15,000바퀴를 회전하는 하드 디스크이다.
플래터를 대상으로 데이터를 읽고 쓰는 구성 요소는 헤드(head)이다. 헤드는 플래터 위에서 미세하게 떠서 데이터를 읽고 쓰는 바늘같이 생긴 부품이다.
헤드는 원하는 위치로 헤드를 이동시키는 디스크 암(disk arm)에 부착되어 있다.
하드 디스크는 매우 많은 양의 데이터를 저장해야 하므로 일반적으로 여러 겹의 플래터로 이루어져 있고 플래터 양면을 모두 사용할 수 있다. 양면 플래터를 사용하면 위아래로 플래터 당 두 개의 헤드가 사용된다. 이 때 일반적으로 모든 헤드는 디스크 암에 부착되어 다같이 이동한다.

그림 출처 - https://blocksandfiles.com/2019/10/07/10-platter-hard-disk-drives/

플래터는 트랙(track)과 섹터(sector)라는 단위로 데이터를 저장한다. 플래터를 여러 동심원으로 나누었을 때 그 중 하나의 원을 트랙이라고 부른다. 그리고 이 트랙은 피자처럼 여러 조각으로 나누어지는데 이 한 조각을 섹터라고 부른다.
섹터는 하드 디스크의 가장 작은 전송 단위이다. 하나의 섹터는 일반적으로 512바이트 정도의 크기를 가지고 있지만 정확한 크기느 하드 디스크에 따라 차이가 있다.
여러 겹의 플래터 상에서 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위를 실린더(cylinder)라고 한다. 한 플래터를 동심원으로 나눈 공간은 트랙, 같은 트랙끼리 연결한 원통 모양의 공간은 실린더이다.
연속된 정보는 보통 한 실린더에 기록된다. 예를 들어 두 개의 플래터를 사용하는 하드 디스크에서 4개 섹터에 걸쳐 데이터를 저장할 때는 첫번째 플래터 윗면, 뒷면과 두번째 플래터의 윗면, 뒷면에 데이터를 저장한다.
연속된 정보를 한 실린더에 기록하는 이유는 디스크 암을 움직이지 않고 바로 데이터에 접근할 수 있기 때문이다.
하드 디스크가 저장된 데이터에 접근하는 시간은 크게 탐색 시간, 회전 지연, 전송 시간으로 나뉜다.
탐색 시간(seek time): 접근하려는 데이터가 저장된 트랙까지 헤드를 이동시키는 시간

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

전송 시간(transfer time): 하드 디스크와 컴퓨터 간에 데이터를 전송하는 시간
위 시간들은 성능에 큰 영향을 끼친다. 구글의 AI를 주도하고 있는 제프 딘의 '프로그래머가 꼭 알아야 할 컴퓨터 시간들'에 따르면 L1 캐시를 참조하는 시간은 0.5ns가 걸리지만, 하드 디스크를 탐색하는 시간은 1,000ns, 하드 디스크에서 1MB를 순차적으로 읽는 시간은 30,000ns이 걸린다.
탐색 시간과 회전 지연을 단축시키기 위해서는 플래터를 빨리 돌려 RPM을 높이는 것도 중요하지만 접근하려는 데이터가 플래터 혹은 헤드를 조금만 옮겨도 접근할 수 있는 곳에 위치해 있는 것도 중요하다.
다중 헤드 디스크와 고정 헤드 디스크
플래터의 한 면당 헤드가 하나씩 달려 있는 하드 디스크는 단일 헤드 디스크(single-head disk), 헤드가 트랙별로 여러 개 달려 있는 하드 디스크를 다중 헤드 디스크(multiple-head disk)라고 한다.
다중 헤드 디스크는 트랙마다 헤드가 있기 때문에 탐색 시간이 들지 않는다.
이런 점에서 다중 헤드 디스크를 고정 헤드 디스크(fixed-head disk), 단일 헤드 디스크를 이동 헤드 디스크(movable-head disk)라고 한다.
플래시 메모리는 전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반의 저장 장치이다. 플래시 메모리는 보조기억장치 범주에만 속하지 않고 다양한 곳에서 널리 사용하는 저장 장치이다. 주기억장치 중 하나인 ROM에도 사용되고 일상적으로 접하는 거의 모든 전자제품 안에 플래시 메모리가 내장되어 있다고 봐도 무방하다.
두 종류의 플래시 메모리
- NAND 플래시 메모리: NAND 게이트를 기반으로 만들어진 메모리. 대용량 저장 장치로 많이 사용됨.
- NOR 플래시 메모리: NOR 게이트를 기반으로 만들어진 메모리.
플래시 메모리에서 데이터를 저장하는 가장 작은 단위.
이 셀이 모여서 MB, GB, TB 용량을 갖는 저장 장치가 되는 것. 하나의 셀에 몇 비트를 저장할 수 있는지에 따라 메모리 종류가 나뉜다.
1셀 1비트 저장 -> SLC(Single Level Cell) 타입
1셀 2비트 저장 -> MLC(Multiple Level Cell) 타입
1셀 3비트 저장 -> TLC(Triple Level Cell) 타입
한 셀에 몇 비트를 저장할 수 있느냐는 1비트 차이로도 플래시 메모리의 수명, 속도, 가격에 큰 영향을 끼친다.
플래시 메모리의 수명
플래시 메모리뿐만 아니라 하드 디스크도 수명이 있다. 한 셀에 일정 횟수 이상 데이터를 쓰고 지우면 그 셀은 더 이상 데이터를 저장할 수 없다. USB 메모리 , SSD, SD카드 모두 수명이 다하면 더 이상 저장 장치로써 사용이 불가능하다.
한 셀로 0과 1 두 개의 정보를 표현할 수 있음.
홀로 사는 집에 제약없이 출입이 가능한 것처럼 SLC 타입은 MLC나 TLC 타입에 비해 비트의 빠른 입출력이 가능하다.
수명도 MLC나 TLC 타입보다 길어서 수만에서 수십만 번 가까이 데이터를 쓰고 지우고를 반복할 수 있다. 하지만 SLC 타입은 용량 대비 가격이 높다.
데이터 읽고 쓰기가 매우 많이 반복되고 고성능의 빠른 저장 장치가 필요한 경우 SLC 타입을 사용한다.
한 셀로 00, 01, 10, 11 총 4개의 정보를 표현할 수 있다.
SLC 타입보다 속도와 수명은 떨어지지만 한 셀에 두 비트씩 저장할 수 있다는 점에서 대용량화하기 유리하고, 용량 대비 가격이 저렴하다.
시중에서 사용되는 많은 플래시 메모리 저장 장치들이 MLC 타입 또는 TLC 타입으로 만들어진다.
한 셀 당 3비트씩 저장할 수 있다.
대용량화하기 유리하고 용량 대비 가격이 저렴하지만 SLC나 MLC 타입보다 수명과 속도가 떨어진다.
정리하자면,
썼다 지우기를 자주 반복해야 하는 경우, 높은 성능을 원하는 경우 -> SLC
저가의 대용량 저장 장치를 원하는 경우 -> TLC
둘의 중간을 원한다면 -> MLC
셀들이 모여 만들어진 단위 -> 페이지 page
페이지가 모여 만들어진 단위 -> 블록 block
블록이 모여 -> 플레인 plane
플레인이 모여 -> 다이 die

그림 출처 - https://flashdba.com/2014/06/20/understanding-flash-blocks-pages-and-program-erases/
플래시 메모리에서 읽기, 쓰기는 페이지 단위로 이루어지고, 삭제는 블록 단위로 이루어진다.
읽기/쓰기, 삭제 단위가 다르다는 것이 플래시 메모리의 가장 큰 특징 중 하나이다.
이때 페이지는 Free, Valid, Invalid 3개의 상태를 가질 수 있다.
플래시 메모리는 하드 디스크와 달리 덮어쓰기가 불가능해서 Valid 상태에서는 새 데이터를 저장할 수 없다.

그림 출처 - https://flashdba.com/2014/06/20/understanding-flash-blocks-pages-and-program-erases/
새로운 데이터를 저장하고 싶다면 비어있는 페이지에 데이터를 쓰면 된다.
그런데 만약 기존에 저장되어 있는 데이터를 수정하고 싶다면 플래시 메모리는 덮어쓰기가 불가능하기 때문에 기존에 저장되어 있는 데이터를 Invalid 상태로 바꾸고, 새로운 값을 새로운 페이지에 저장한다.
그리고 쓰레기값이 된 페이지를 지워야 하는데, 지우는 동작은 페이지 단위가 아닌 블록 단위로 한다. 따라서 유효한 페이지들만 새로운 블록으로 복사하고, 기존의 블록을 삭제하면 된다.
출처 - '혼자 공부하는 컴퓨터 구조+운영체제(강민철 저, 한빛미디어)