보조 저장장치 (1) - 디스크 구조

미분류

2020. 1. 29. 22:16

1. Direct Access Storage Device (DASD, 직접 접근 저장장치) 

Disk는 보조 저장 장치 중 Direct Access Storage Device(DASD, 직접 접근 저장장치)의 한 종류로써 사용자가 원하는 부분에 Direct Access할 수 있다. 이는 Tape와 같은 Serial Acess Storage Device (SASD, 순차 접근 저장장치)와 가장 차별되는 차이점이다.

 

만약 우리가 Tape를 떠올릴 땐 예전에 사용하던 카세트 테이프를 떠올리면 이해가 쉽다. 특정 부분을 읽으려면 Direct 하게 접근 할 수 없고 원하는 부분까지 Tape를 감아야만한다. 우리가 예전에 가지고 있던 카세트 테이프 라디오 같은 장치를 보면 반드시 빨리감기, 되감기가 있었다. 이 두 연산이 필요한 이유이기도 하다.

 

[그림] 카세트 테이프, 만약 뒷쪽 부분을 들으려면 빨리감기 해야한다.

 

반대로 우리가 간단하게 Disk를 생각할 때는 LP판을 떠올리면 된다. 원판이 계속 회전하고 헤드가 원판의 일정 부분을 가리켜서 읽는다. 사용자가 헤드를 마음대로 조절하여 원하는 부분을 재생할 수 있기 때문에 Disk는 Direct Access가 가능하다. 때문에 Disk를 이용하면 우리가 원하는 데이터의 전에 있는 모든 데이터를 읽지 않고도 바로 원하는 곳에 접근 가능하고, 덕분에 Tape보다 훨씬 빠르다.

 

[그림] LP판, 헤드가 안쪽과 바깥쪽을 오가며 움직일 수 있다.

 

요즘날에 우리 주변에는 Hard Disk, Floppy Disk, Optical Disk 등의 디스크가 존재한다. 예전에는 Floppy Disk와 같은 디스크도 많이 사용되었지만 요즘 날에는 대부분 USB와 같은 저장장치로 대체되었다. 그러면 우리 주변에서 가장 자주 볼 수 있는 디스크 저장장치는 무엇일까? 단연 Hard Disk를 꼽을 수 있다. 우리는 이 중에서 우리가 가장 자주 접하는 Hard Disk에 초점을 맞추어서 공부할 예정이다. 물론 Hard Disk 역시 요즘에는 SDD같은 Flash Memory에게 자리를 위협받고 있지만 아직 완전대체의 수준까지는 아니고 OS만 SDD에 설치하고 대용량 데이터는 Hard Disk에 보관하는 등의 방법으로 서로 상호보완적으로 사용하고 있다. 

 

2. Hard Disk의 구성요소

아래 그림들을 보면 우리가 공부할 하드 디스크가 어떻게 생겼는지 알 수 있다.

 

[그림] Spindle (스핀들) (1)

 

Spindle (스핀들)은 하드디스크의 중앙부에 위치하며 모터에 연결되어있다. 스핀들은 일정한 속도로 계속 회전하고, 스핀들의 회전 수를 측정하는 단위를 RPM (Revolution Per Minute)라고 한다. 디스크 드라이브는 7200RPM, 10000RPM, 15000 RPM 등의 속도로 스핀들을 회전시킨다.

 

[그림] Platter (플래터)

 

기본적으로 디스크는 여러장의 원판에 데이터를 저장한다는 것을 알고 있을 것이다. 이렇게 스핀들에 연결된 원판 한 장 한 장을 Platter (플래터)라고 한다. 플래터에는 바이너리 코드 (0 or 1)이 기록된다. 플래터의 앞/뒷면은 모두 마그네틱 소재로 표면이 코팅되어있다. 그래서 플래터는 자성을 가지는데, 0이 쓰여진 경우와 1 쓰여진 경우 각각 다른 자성을 가지게 만든다.

 

[그림] R/W Head (읽기/쓰기 헤드)

 

이 여러장의 플래터들 사이에 Read/Write Head를 위치시켜 앞/뒷 면을 읽게한다. 플래터의 앞/뒷면 모두를 사용하기 위해 마그네틱 코팅을 해놓았기 때문에 앞/뒷면 모두를 읽고 쓰기 위해 플래터 1장 당 2개의 헤드를 가진다. Read와 Write가 일어나는 동안 헤드는 플래터의 자성을 감지하거나 변형하는 작업을 수행할 뿐 절대 플래터의 표면을 물리적으로 건드리지 않는다.

 

추가적으로 이 Head의 종류에 따라 Disk의 종류를 유동헤드 고정 헤드 Disk 등으로 나눌 수 있는데, Head가 움직이며 원하는 Track(아래에서 후술함)선택하는 Disk를 유동 헤드 Disk라고 하고, 모든 Track에 Head를 부착해서 Head를 움직일 필요가 없는 Disk를 고정 헤드 Disk라고 한다. 유동 헤드 Disk의 경우 데이터를 Cylinder(아래에서 후술함) 단위로 저장하는 것이 효율적이다. 또한 이러한 Spindle, Platter, Head를 함께 패킹하여 만든 디스크를 윈체스터 디스크 (Winchester Disk)라고 하는데, 이는 IBM에서 이러한 형식의 디스크를 처음 만들 때, 윈체스터 연구소에서 만들어졌기에 붙은 이름이라고 한다. (요즘의 디스크는 대부분 윈체스터 디스크이다)

 

[그림] Disk의 모습 (옆)

 

요즘이야 패킹 기술이 발달해서 6장의 Platter가 있으면 앞/뒤 12개의 면을 모두 이용할 수 있으나, 과거에는 가장 끝쪽 면들은 손상이 잦아서 아예 사용 하지 않았다. 때문에 위처럼 6장의 Platter가 있지만 10개의 면을 사용했다. Read/Write Head의 경우 한 헤드가 움직이면 모든 헤드가 따라 움직인다. 각각 헤드가 따로따로 움직이거나 하지 않는다. 백문이 불여일견이다. 아래 영상들을 보면서 디스크가 어떻게 움직이는지 확인해보자. (첫번째 영상은 1분 부터 보는 것을 추천한다)

 

 

 

아래 그림은 디스크의 표면을 나타낸 것이다. LP판은 페인 홈의 모양이 나선형(소용돌이모양)이라 헤드가 안쪽 혹은 바깥쪽으로 점점 움직이게 되지만, 하드디스크는 아래 그림 처럼 여러개의 동심원으로 구성되어있다. 때문에 헤드가 한 곳을 가리키고 회전한다면 계속해서 같은 부분만 읽게 된다.

 

[그림] 하드디스크의 구조

 

이 때 이 동심원 하나 하나를 트랙(Track)이라고 한다. 그리고 아래와 같이 피자모양의 선으로 Hard Disk 영역을 나누게 되는데, 이 선을 갭(Gap)이라고 하고, 갭과 갭 사이의 영약을 섹터(Sector)라고 한다. 그리고 특정 트랙의 특정 섹터를 트랙 섹터이라고 한다. 블록은 메인메모리와 Hard Disk간 데이터 전송의 논리적 단위이다. 내가 만약 1Byte만 읽고싶다고 해서 Hard Disk에서 1Byte만 읽을 수 있는 것이 아니라 특정 트랙의 특정 트랙섹터를 불러와서 읽어야한다.

 

 

3. Zoned Bit Recording (ZBR)

그런데 생각해보면 뭔가 이상한게 있다. 만일 우리가 1개 블록만큼의 데이터를 저장한다고 하면, 섹터의 안쪽 트랙보다 바깥쪽 트랙이 더 길이가 길게 된다. 즉 안쪽보다 바깥쪽에 더 많은 데이터를 저장할 수 있다. 그러나 Hard Disk의 한 블록의 크기는 하나의 상수로 고정 되어있다. 바깥쪽에 있는 블록은 2KB, 안쪽에 있는 블록은 500B 이런식으로 되어있지 않고, 모든 블록이 500B와 같은 상수로 고정된 크기를 갖는다.

 

따라서 데이터의 저장 밀도를 고려하면 안쪽 트랙에 있는 블록들은 저장 밀도가 높고, 바깥쪽 트랙에 있는 블록들은 저장 밀도가 낮다. 그러면 Hard Disk 제조사에서 이런 것을 고려해서 바깥쪽에 더 많은 데이터를 저장할 수 있게 해줄까? 정답은 아니다. Seagate, Samsung과 같은 제조사는 모두 동일한 양의 데이터를 저장 할 수 있도록 제조한다. 결국에는 바깥쪽 블록은 2KB를 저장할 수 있다고 하더라도 500B만 저장하고 나머지 1.5KB를 저장할 수 있는 면적은 사용되지 못한다. (가장 안쪽 블록을 기준으로 사이즈를 결정한다)

 

[그림] 낭비되는 영역 (붉은색)

 

그러나 이러한 방식으로 구현되면 너무 많은 면적이 낭비되고 이는 너무 비효율적이다. 때문에  이 것을 개선해서 만든 구조가 바로 Zoned Bit Recording (ZBR) 방식의 Hard Disk이다. 요즘날의 대부분 Hard Disk들은 아래 처럼 ZBR방식으로 만들어진다. 

 

[그림] Zoned Bit Recording 방식의 Hard Disk (1)
[그림] Zoned Bit Recording 방식의 Hard Disk (2)

 

ZBR 방식으로 Hard Disk를 만들게 되면 모든 블록의 크기가 동일하고, 따라서 바깥쪽 트랙이라고 하더라도 공간이 낭비되지 않고 모두 효율적으로 쓰일 수 있다. 위 ZBR 디스크의 경우 가장 안쪽 트랙의 경우 한 트랙 당 9개의 섹터가 할당 되지만 가장 바깥쪽에는 16개의 섹터가 할당된다. 즉 바깥쪽 트랙일수록 더 많은 섹터가 할당되게 된다.

 

그러나 디스크를 이렇게 만들면 재밌는 현상이 발생한다. 우리가 아래의 ZBR를 붉은색 선에서 푸른색 선까지 회전시킨다고 해보자. 동일한 속도(RPM)로 회전했음에도 불구하고 안쪽 블록들은 2칸 이동하고, 바깥쪽 블록들은 약 4칸을 이동했다. 이렇게 되면 안쪽과 바깥쪽 중 어느 트랙을 읽는 것이 빠를까? 동일한 속도임에도 불구하고 바깥쪽 트랙을 사용하는 것이 속도가 빠르게 느껴진다.

 

[그림] ZBR 디스크의 특징 중 하나인 트랙간 속도 차이

 

때문에 Hard Disk 제조사들은 처음 디스크를 구매하면 데이터를 바깥쪽 먼저 쓰게 한다. 처음 구매하고나면 모든 데이터가 바깥쪽에만 저장되어있기 때문에 속도가 굉장히 빠르게 느껴지지만 바깥쪽 트랙들이 가득 차게 되면 시스템은 데이터를 안쪽 트랙에 데이터를 저장하게 된다. 그래서 사용하면 사용할 수록 느려지는 것처럼 느껴지고, 사용자들은 "아 내 Hard Disk가 너무 오래되어서 낡았구나."라고 생각하고 하드디스크를 새로 구매하게 된다. 재미있지 않은가?

 

4. Cylinder (실린더)

 

[그림] Hard Disk를 옆에서 바라본 모습

 

이제 트랙과 섹터 말고도 한가지 용어가 더 등장한다. 그 용어의 이름은 실린더(Cylinder)이다. 실린더란 여러 플래터에서 각각 동일한 동심원을 가지는 트랙들의 집합이다. 즉 만약 3번 실린더라고 하면 위 그림에서 플래터1, 2, 3, 4의 트랙3을 모아놓은 집합을 의미한다. 위 그림에서 파란색 점선으로 연결된 원통모양을 의미한다.

 

[그림] 실린더를 설명하는 그림

 

물론 실린더는 플래터가 여러장 있을 때 의미가 있다. 플래터가 단 한장 뿐이라면 실린더는 의미가 없다. 우리가 만약 3개의 블록만큼 데이터를 저장시켜야한다고 하자. 그러면 데이터를 어디에 저장해야 빠르게 접근할 수 있을까? 정답은 동일한 실린더에 저장하는 것이다. 이유는 헤드가 실린더 단위로 움직이기 때문이다. 위 영상에서도 봤듯이 각 플래터에 있는 헤드가 따로 움직이는 것이 아니라 같이 움직인다. 

 

[그림] 실린더 단위로 저장해야하는 이유

만약 위 그림의 왼쪽과 가운데처럼 한장의 플래터에 3개의 블록을 모두 저장했다고 해보자. 만약 같은 트랙에 저장했다면 디스크가 회전하는 동안 기다려야하며, 같은 섹터에 저장했다면 헤드가 움직이는 것을 기다려야한다. 그러나 같은 실린더에 저장한다면 데이터가 3개의 블록 데이터가 동시에 읽혀질 수 있다. 유동헤드 디스크의 경우에는 데이터를 실린더 단위로 저장하는 것이 가장 효율적이다.

 

5. Reference

 

Xinics.SLProject.Player

 

contents.kocw.or.kr

'미분류' 카테고리의 다른 글

보조 저장장치 (4) - 클러스터 & FAT(inode)  (0) 2020.01.30
보조 저장장치 (3) - 저장 용량  (0) 2020.01.30
보조 저장장치 (2) - 하드디스크 인터페이스  (0) 2020.01.30
Expression과 Statement  (1) 2020.01.20
튜링 머신  (1) 2020.01.19
괴델의 불완전성 정리  (0) 2020.01.18
컴퓨터의 기원  (0) 2020.01.18