섹터 주소 지정 방식 (Sector Addressing)
하드디스크는 오랫동안 데이터 저장매체로 사용되어 왔다. 최근 플래쉬 저장매체가 그 자리를 넘보고 있지만 섣부른 우려가 아닐까 생각된다. 그만큼 이전의 하드디스크와 현재의 하드디스크는 많은 차이점이 있기 때문이다. 그리고 앞으로도 이러한 우려를 넘어설 기술 개발이 꾸준히 이루어질 것이기 때문이다.
저장매체는 섹터라는 최소한의 데이터 저장단위를 사용한다. 섹터는 일반적으로 512 바이트이다. (모두 512 바이트라고 생각해도 무방하다.) 이러한 섹터들은 하드디스크의 물리적인 구조내에 존재하는데 특정 파일을 읽고자 한다면 해당 섹터를 읽어야 한다. 섹터는 각각 주소값을 가지고 있기 때문에 해당 주소로 접근하여 각 섹터를 읽어오면 될 것이다.
하지만 이러한 섹터의 주소를 지정하는 방식은 조그마한 변화를 거쳐왔다. 초기에 사용된 것이 CHS 주소 지정 방식이고 이후 LBA 주소 지정 방식이 사용되고 있다.
CHS 주소 지정 방식
CHS(Cylinder-Head-Sector) 주소 지정 방식은 실린더(Cylinder), 헤드(Head), 섹터(Sector) 구조를 기반으로 주소를 지정하는 방식이다. 다음은 하드디스크의 물리적인 구조이다.
위 그림에서 살펴보면 플래터는 3개로 구성되어 있다. 헤드가 6개인 것으로 보아 플래터는 양면 모두 사용되도록 만들어졌다. 만약 어떤 파일의 시작 섹터 위치가 CHS(21, 3, 20) 이라고 하자. 운영체제에 의해서 해당 파일의 읽기 명령이 내려지면 커널은 INT 13h 인터럽트를 이용해 하드디스크 컨트롤러에 명령을 내린다. 각각의 C, H, S에 대해 명령을 받은 컨트롤러는 하드디스크의 3번째 헤드를 21번째 실린더, 20번째 섹터에 위치 시킨다. 이후 읽기 명령이 발생하면 해당 위치부터 지정한 만큼 데이터를 읽게 된다.
이처럼 물리적인 구조에 기반한 주소 지정 방식이 CHS 방식이다. CHS 주소 지정 방식이 잘 설계된 것 같지만 이후에 용량에 제한이 발생하였다. 초기에 제안된 ATA 표준은 28 비트 블록 주소 방식으로 실린더 16비트, 헤드 4비트, 섹터 8비트로 할당되었다. 이후 ATA-1 이 정식으로 소개되면서 BIOS INT 13h가 지정할 수 있는 비트가 24 비트였는데 각각 실린터 10 비트, 헤드 8비트, 섹터 6 비트였다.
BIOS는 운영체제의 입출력을 처리하는 칩이다. 따라서 운영체제가 하드웨어의 입출력을 위해서는 BIOS를 통해야 한다. 반면, ATA는 하드디스크 인터페이스의 규정이므로 하드디스크는 해당 스펙이 맞게 설계되어야 하고 컨트롤러 또한 해당 스펙의 기능을 지원해야 한다. 이런 이유로 운영체제가 내린 명령이 BIOS를 통해 디스크 컨트롤러에서 정상 동작하기 위해서는 둘 사이의 최적 값인 실린더 10 비트, 헤드 4 비트, 섹터 6 비트가 사용되어야 한다.
최대 실린더 수 | 최대 헤드 수 | 최대 섹터 수 | 표현 가능한 최대 용량 | |
IDE/ATA Limits | 16(65,536) | 4(16) | 8(256) | 128 GB |
BIOS | 10(1,024) | 8(256) | 6(63) | 7.88 GB |
최소 가능 비트 | 10(1,024) | 4(16) | 6(63) | 504 MB |
이 제한적인 비트 수로 표현할 수 있는 용량은 다음과 같다. 실린더나 헤드는 값이 0부터 시작하지만 섹터는 1부터 시작하므로 섹터 수는 63이 된다. 물론 이 용량은 당시로서는 큰 용량이었을지 모르지만 급속도로 증가하는 하드디스크의 용량에 금새 한계점으로 다가왔다.
2^10(1,024)(실린더 수) X 2^4(16)(헤드 수) X 2^6-1(63)(섹터 수) X 512(섹터크기) = 528,482,304 = 504 MB
명세상으로 보면 헤드 수를 제외하고 BIOS보다 IDE/ATA는 더 많은 비트 수를 할당하고 있다. 다만 BIOS의 제약으로 사용하지 못하는 것이었다. 따라서, 앞선 용량 제한을 늘리기 위해 운영체제에서 BIOS를 통해 전달되는 각 비트 수를 변환하여 지정하도록 하는 방안이 고안되었다. 이러한 변환을 수행하는 CHS 방식을 Large Mode 또는 Extended CHS(ECHS)라 한다.
한 예로, 웨스턴 디지털(Western Digital) 社의 Caviar AC33100 하드디스크는 2.95 GB의 용량을 가진다. 이 용량은 6,136 실린더, 16헤드, 63 섹터의 논리적인 구조로 표현되었다. 그러나 여기의 실린더 값은 BIOS에서 지원하는 값을 초과하는 것이다. 이것이 가능한 이유는 BIOS를 통과한 값에 2, 3, 8, 16의 값으로 곱하거나 나누어 확장시켰기 때문이다. 이처럼 확장하는 방법은 Bit Shift Translation 이라 한다.
실린더 수 | 헤드 수 | 섹터 수 | 표현 용량 | |
IDE/ATA Limits | 65,536 | 16 | 256 | 128 GB |
Hard Disk Logical Geometry | 6,136 | 16 | 63 | 2.95 GB |
BIOS Translation Factor | divide by 8 | multiply by 8 | – | – |
BIOS Translated Geometry | 767 | 128 | 63 | 2.95 GB |
BIOS INT 13h Limits | 1,024 | 256 | 63 | 7.88 GB |
위와 같이 8로 나누거나 곱하기 때문에 IDE/ATA 명세를 벗어나 BIOS를 최대한 이용할 수 있었다. 하지만 이러한 노력에도 BIOS 의 최대 제한 값을 초과하여 전달할 수는 없었다. 7.88 GB 라는 용량은 다시 금새 엄청난 집적도로 발전하는 하드디스크의 용량을 감당하기에는 부족했다. 그리고 집적도로 인해 예전에는 여러 개의 플래터를 사용했지만 시간이 갈 수록 플래터 한, 두 장에 원하는 용량을 모두 표현 가능하게 되었다. 이러한 이유로 결국 다른 주소 지정 방식이 사용되게 되었는데 그 방식이 LBA 방식이다.
LBA 주소 지정 방식
앞서 언급한 대로 CHS 주소 지정 방식의 한계로 인해 대체된 방식이 LBA(Logical Block Addressing)이다. 그렇다고 해서 LBA가 CHS와 전혀 별개로 생겨난 것은 아니다. 모두 ATA-1 명세에 포함되어 있다. 다만, CHS가 먼저 사용되었고, 이후 한계점으로 인해 LBA가 주목받기 시작한 것이다.
LBA 방식은 하드디스크의 구조적인 정보를 이용하지 않고 단순히 0 부터 시작되는 숫자로 이루어져 있다. 하드디스크 내부에 존재하는 모든 섹터들을 일렬로 늘어뜨린 후 번호를 매겼다고 생각하면 이해가 쉬울 것이다. 따라서 이러한 번호들은 물리적인 번호가 아니라 논리적인 번호가 될 것이다. 그렇다면 특정 파일을 읽기 위해 해당 파일의 논리적인 섹터번호를 얻었다면, 이 논리적인 번호를 물리적인 위치 값으로 변환해야 할 것이다. 하지만, 이것에 대해서는 해당 디스크 컨트롤러가 알아서 해주기 때문에 신경쓸 필요가 없다.
이렇듯 LBA가 고안된 이후 CHS 주소 지정 방식은 ATA-6 표준으로 넘어오면서 자취를 감추었다. 하지만 아직도 CHS 주소 지정 방식의 지원 가능한 용량을 초과하지 않는 일부 임베디드 장비들에서는 경우에 따라 CHS 주소를 사용하고 있기도 하다. 따라서 CHS와 LBA 주소 간의 변환관계를 이해할 필요가 있다.
LBA 주소가 0 이라고 하면, CHS 주소는 (0, 0, 1)이 된다(섹터는 1부터 시작). LBA 주소가 1 이라고 하면, CHS 주소는 (0, 0, 2)가 된다. 이와 같은 방식으로 계산을 하게 되면 (CHS->LBA), (LBA->CHS)로 주소 변환을 할 수 있다.
CHS -> LBA 변환
LBA = ( ( CYLINDER * heads per cylinder + HEAD ) * sectors per track ) + SECTOR – 1 |
LBA -> CHS
CYLINDER = LBA / ( heads per cylinder * sectors per track ) HEAD = ( LBA / sectors per track ) % heads per cylinder
SECTOR = ( LBA % sectors per track ) + 1
|
그러나 최근의 대부분에 디스크는 ZBR(Zone Bit Recording)을 사용한다. ZBR은 플래터의 트랙 길이가 내부보다 외부가 더 길다는 점에 착안해 트랙의 길이가 길수록 더 많은 섹터를 할당하는 방식이다. 이전에는 모든 트랙은 같은 섹터로 이루어져 있었다. 따라서 ZBR을 쓰는 디스크는 ZBR에 따른 각 트랙당 섹터의 수를 알고 있어야 정확한 계산이 가능하다.
LBA는 초기 ATA 표준에 포함될 때 28 비트를 사용하는 것으로 규정되었다. 28 비트로 선형적으로 표현된 섹터 번호를 지정하기 때문에 최대 268,435,456(2^28) 섹터가 지정이 가능하다. 섹터가 512 바이트이므로 총 128 GB 의 용량을 표현할 수 있는 것이다. 그렇다면 최근 1 테라의 하드디스크는 어떻게 표현되는 것일까?
28 비트 LBA가 하드디스크의 증가된 용량을 표현하지 못하게 되자 ATA-6 표준에서 이를 확장한 48 비트 LBA 방식이 새롭게 등장하였다. 48 비트 방식을 사용하게 되면 144 PB(Petabytes)(144,000,000 GB) 의 용량까지 표현할 수 있게 되었다. 지금 현재의 시각으로는 이 용량은 결코 부족하지 않을 것이라 느낄 것이다. 하지만 이러한 생각은 처음 28 비트 LBA 방식을 고안한 사람들도 같은 생각이었을것이다.
0 개의 댓글