01 디스크의 구성요소
: Platter, Spindle, Surface / Track, Sector, Cylinder / Head, ARM
- Platter (원판)
- disk는 기본적으로 레코드판처럼 생긴 원판이 여러개 쌓여있는 형태이다.
- 원판의 개수는 disk 용량에 따라 다르다.
- Spindle (축)
- disk는 동작할 때 회전하면서 사용되고, 원판은 축을 중심으로 회전한다.
- Surface (표면)
- 실제 data를 저장하는 곳이다.
- 원판의 위아래 총 2곳에 데이터를 저장한다.
- 3개의 원판 → 6개의 표면
- Track (동심원)
- 동심원은 원판(platter)마다 몇 천 개씩 그려져 있고, 각 동심원을 트랙이라고 부른다.
- Sector (섹터)
- track은 sector로 나누어져 있다.
- ‘disk는 sector 단위로 접근가능하다’ 할 때의 그 sector이다.
- sector는 일반적으로 512바이트이다.
- sector 단위로 자화 방향에 따라 데이터(비트)를 적는다. (예를들어, N극이면 0, S극이면 1과 같이)
- Head (헤드)
- 데이터를 읽거나 쓰는, 즉 N극인지 S극인지 sensing한다.
- 각 표면마다 데이터를 읽거나 쓸 수 있으므로 head가 필요하다.
- 6개의 표면 → 6개의 head
- ARM
- head는 ARM에 연결되어 있다. 그래서 head들은 같이 움직인다.
- Cylinder
- 여러 플래터 중에 같은 트랙들의 집합으로, 성능 상 중요한 개념이다.
Platter 표면에 Track이 그려져 있고, Track은 Sector로 나누어진다.
Sector 단위로 데이터를 자화시키면서 비트(데이터)를 기록한다.
02 디스크에 접근하는 방법
디스크에 데이터를 요청할 때에 섹터 주소 지정 방식(Sector Addressing)을 사용한다. 디스크에는 여러 개의 head가 있으므로, 먼저 어떤 head를 사용할 것인지 결정한다. head가 결정되면, 어느 surface에 갈 지, 이후엔 어느 track 갈지, 그리고 어느 sector에 갈 건지 차례대로 정해진다. 즉, head → surface → track → sector의 순으로 결정되는 것이다. 이렇게 디스크에 접근할 때에는 Seek time (탐색시간), Rotational latency time (회전지연시간), Transmission time (전송시간)이 걸린다.
① head를 데이터가 존재하고 있는 track으로 옮긴다. → seek time
② 읽고자 하는 target sector가 head 밑으로 오도록 회전한다. → Rotational latency time
③ 디스크가 회전해서 target sector가 헤드 밑으로 들어오면, N극, S극을 sensing한다. → Transmission time
=> 모두 합쳐 디스크에서 데이터를 읽는데에 대략 10ms의 시간이 걸린다.
그렇다면 어디에서 시간이 많이 걸릴까?
바로 탐색시간, 회전지연시간에서 가장 시간이 많이 걸린다. 그 이유는 모터 즉, 기계적인 작업이기 때문이다. (전송시간은 전자기적으로 sensing하는 작업이므로 상대적으로 시간이 적게 걸린다.)
disk가 회전하는 시간은 RPM(Rotation Per Minute)으로 나타내고, 보통 720 RPM을 많이 사용한다. 즉, 1분에 720번 회전하므로 120 RPS(초기준)이고, 1번 돌 때 걸리는 시간은 1/120초이다. 쉬운 계산을 위해 대충 1/100초라고 하면 1바퀴를 회전하는데 걸리는 시간은 10ms가 된다.
데이터를 읽기 위해서는 필요한 시간이 헤드를 움직이는 seek time, Rotational latency time이라는 점을 인지하고 생각해보자. 원하는 데이터가 헤드 밑에 오도록 하기 위해서 걸리는 회전 수는 최악의 경우 1바퀴 모두, 최적의 경우 헤드와 원하는 데이터의 거리가 가까워서 조금 회전해야하는 경우이다. 따라서 평균적으로 절반 바퀴를 회전해야 한다고 하면 5ms가 걸린다. 그래서 disk를 읽을 때에는 5-10ms의 평균 읽기 쓰기 시간이 필요한 것이다.
이러한 seek time과 rotational latency를 줄이기 위해
seek time을 줄이기 위한 다양한 디스크 스케줄링(SCAN이나 elevator 알고리즘) 또는 한 디스크로 얻을 수 있는 성능은 제한되어 있으므로 여러 디스크를 묶는 RAID 기술인 Parallel access techniques을 사용한다. (나중에 운영체제 과목에서 자세히 배운다~)
03 Disk와 Flash memory
Disk와 Flash memory의 공통점
: 비휘발성 저장 매체이므로 storage로 사용이 가능하다.
Flash memory의 특성
① 기계적인 부분이 없어서 빠르고 가볍다.
: HDD는 모터가 있지만, 플래시메모리는 모두 전자기적 작업을 하기 때문에 빠르고 가볍다. 빠른다는 장점은 데이터센터에 유의미하고, 가볍다는 장점은 모바일 기기에 유의미하다.
② overwrite에 제한이 있어서 쓰기 전에 지워야 한다.
: HDD는 overwrite이 가능하기 때문에 erase할 필요가 없다. 반면, SSD는 overwrite가 불가능하여 한 번 데이터를 쓴 후 그 내용을 바꾸려면 그 위에 바로 쓸 수 없고, erase 작업이 필요하다.
③ 읽고 쓰는 단위와 지우는 단위가 다르다.
: 읽고 쓸 때는 작은 단위를 사용하고, 지울 땐 큰 단위를 사용하기 때문에 기존 내용을 수정할 때의 과정이 굉장히 복잡하다. 예를들어, CBBABBBBCC 에서 A부분만 수정하고 싶은 경우에도 B부분까지 모두 지워야 한다. 이를 위해 B 부분의 내용은 다른 곳에 복사해놓고, 지우고, 다시 써야한다.
④ endurance, disturbance, retention error
: 지울 수 있는 횟수에 제한이 있다. → wear leveling
⑤ SLC, MLC, TLC와 같이 다양한 유형이 있다.
※ 최근에는 [복사하고, 지우고, 다시 쓰고, 수정하는] 과정을 FTL이라는 소프트웨어가 처리해서 더욱 빠르게 처리할 수 있도록 개선하였다. → 플래시메모리는 HDD와는 다르게 내부적으로 소프트웨어가 동작한다는 것을 알 수 있다.
※ FTL(Flash Translation Layer)가 필요한 이유 2가지를 꼽자면
1) overwrite limitation 2) read/write vs trase granularity 라고 할 수 있다.