섹터 주소 지정 방식
CHS 주소 지정 방식
CHS(Cylinder-Head-Sector) 주소 지정 방식은 이름을 보면 알 수 있듯이 실린더(Cylinder), 헤드(Head), 섹터(Sector) 구조를 기반으로 주소를 지정하는 방식이다.
이 방식은 물리적으로 주소를 할당하는 방식이고, 각각 실린더, 헤드, 섹터에 번호를 할당해 그 주소를 이용하여 데이터를 찾아 읽고 쓰는 방식이다.
예를 들어 CHS(1,2,3)이면 2번째 헤드를 1번째 실린더, 3번째 섹터에 위치 시킨다. 이 후 읽기 명령을 발생시켜 해당 위치부터 지정한 만큼 데이터를 읽게 만든다.
초기에 ATA 표준은 28bit 블록 주소 방식으로 실린더 16bit, 헤드 4bit, 섹터 8bit로 할당되었다. 이 후 ATA-1 이 정식으로 소개될 때는 BIOS INT 13h가 지정할 수 있는 최대 비트인 24bit에 맞춰 각각 실린더 10bit, 헤드 8bit 섹터 6bit로 소개하였다.
위에 정보를 토대로 표현 가능한 용량을 계산해 보면 아래와 같이 된다.
2^10(실린더) * 2^4(헤드) * 2^6-1(섹터) * 512(섹터크기) = 504MB
섹터 계산 2^6-1 이 부분에서 -1 해준 이유는 헤드와 실린더는 인덱스가 0부터 시작하지만 섹터는 1부터 시작하기 때문이라고 한다. (하지만 왜 1 부터 시작하는지는 어디에서도 이유를 찾을 수 없었다... 왜 1부터 시작하는지 아는 사람이 있다면 댓글로 달아주시면 감사할 것 같다.)
어찌됐든 결국 표현 가능한 용량은 504MB이므로 최대 용량의 한계가 존재한다.
이후 BIOS와 IDE/ATA를 한계 CHS를 2의 제곱수로 나누고 곱하여 서로 조정하여 용량을 늘렸지만 7.88GB가 한계라서 LBA 주소 지정 방식이 사용되게 된다.
LBA 주소 지정 방식
LBA(Logical Block Addressing)은 CHS와 별개로 생겨난 것은 아니다. ATA-1 명세에 포함되어 있었으며, CHS가 먼저 사용되었고 그 한계점이 들어나며 LBA가 주목받게 된 것이다.
LBA의 이름 풀이를 보면 알 수 있듯이 LBA는 논리적인 주소를 가지게 된다.
따라서 CHS와 같이 Cylinder-Head-Sector로 나누어 3차원적으로 실제 물리적 주소를 갖게 하는 것이 아니라 Sector를 일차원으로 배열하여 순서대로 숫자를 지정해 주소를 계산해주는 방식이다.
CHS(0,0,1),(0,0,2) 와 같이 계산하는 것이 아닌 0,1,2,3,...,102와 같이 주소를 지정하는 것이다.
LBA는 28bit 로 최대 2^28 섹터가 지정이 가능하다. 섹터가 512byte이므로 총 128GB의 용량을 표현할 수 있다는 뜻이다.
그렇다면 128GB보다 큰 용량인 하드는 어떻게 만들어진 것일까?
28bit로는 더 큰 용량을 만들 수 없게 되자 48bit LBA 방식이 등장하였다. 48bit를 사용하면 이론적으로 144PB(PeraByte)의 용량까지 사용할 수 있다. 이는 GB로 144,000,000GB의 용량을 표현할 수 있다.
그럼 이제 이러한 논리적 주소는 컴퓨터가 어떻게 계산해서 물리적 주소로 접근을 하느냐...? 이것에 대해선 BIOS가 해결해 준다.
이 부분에 대해선 아직 자세히 알아보지 않아서 나중에 더 깊게 공부를 하게되면 적게 될 것 같다.
이렇듯 LBA가 사용되면서 CHS는 점점 사용되지 않게 되었으나 CHS 주소 지정 방식이 가지는 용량 한계에 대해 이 한계를 신경쓸 필요가 없는 용량이 작은 임베디드 장비들에서는 경우에 따라 CHS 주소 지정 방식을 사용하고 있기도 해서 LBA와 CHS간에 주소 변환 관계를 이해할 필요가 있다.
CHS -> LBA 변환 |
---|
LBA = ( ( 실린더 * 실린더 당 헤드 수 + 헤드) * 트랙당 섹터 수 ) + 섹터 - 1 |
LBA -> CHS 변환 |
---|
실린더 = LBA / ( 실린더 당 헤드 수 * 트랙당 섹터 수 ) |
헤드 = ( LBA / 트랙당 헤드 수 ) % 실린더 당 헤드 수 |
섹터 = ( LBA % 트랙당 섹터 수 ) + 1 |
ZBR 방식
최근 디스크는 이 ZBR(Zone Bit Recording) 방식을 이용한다.
물리적으로 트랙 길이가 내부보다 외부가 더 길다는 점에서 착안되어 트랙의 길이가 길수록 더 많은 섹터를 할당하는 방식이다.
이전까지는 모든 트랙이 같은 섹터로 이루어져 있었다.
그렇기 때문에 ZBR을 쓰는 디스크는 ZBR에 따른 각 트랙당 섹터의 수를 알고 있어야 정확히 계산할 수 있다.
Reference
http://blog.naver.com/PostView.nhn?blogId=cksdud1113&logNo=221687484310 - LBA , CHS
https://mamu2830.blogspot.com/2019/10/blog-post_14.html - 하드디스크 구조와 원리
http://forensic-proof.com/archives/355 - 그저 포렌식 푸르프