1. Cluster (클러스터) 란?
Cluster는 연속된 Sector(Track Sector)들의 묶음이다. 아래 그림을 보면 더 잘 이해될 것이다.
위 그림의 녹색부분이 Cluster(클러스터)이다. 그러면 이 Cluster는 대체 어디에 쓰일까? 정답은 FAT(File Allocation Table)의 관리를 용이하게 관리하고 저장된 파일의 탐색을 빠르게(Head의 움직임 최소화) 하기 위해 쓰인다. 이 말을 이해하려면 먼저 FAT에 대해서 알 필요가 있다.
2. File Allocation Table (FAT)
컴퓨터가 디스크에 파일을 저장할 때는 파일들이 실제로는 쭉 연결되어서 저장되는 것이 아니라 아래 그림과 같이 여기저기 쪼개져서 저장된다. 그리고 사용자가 파일에 접근을 시도하면, 쪼개진 각각의 조각들이 어디에 저장되어있는지 알아야한다. 때문에 이 조각들의 위치를 모두 저장하고 있어야하고, 쪼개진 조각들의 위치를 저장하고 있는 자료구조를 FAT(File Allocation Table)이라고 한다.
결국 사용자가 어떠한 파일에 접근하면 운영체제는 FAT를 뒤져서 Disk에서 실제로 파일들의 정보를 가져오게 되는 것이다. 이러한 파일 조각 테이블을 윈도우즈 운영체제에서는 FAT라고 부르고, 리눅스 운영체제에서는 inode라고 부른다. 이름은 다르지만 근본적으로 역할은 동일하다. (이 글에서는 FAT라는 단어로 표현할 것이다)
3. FAT와 Cluster의 관계
그렇다면 쪼개지는 하나의 조각 크기를 어느정도의 크기로 설정해야할까? 예를 들어 Cluster의 개념 없이 쪼개진 한 조각을 한 Sector(Track Sector)에 맵핑하여 저장한다고 생각해보자. 만약 우리가 1GB의 동영상 파일을 디스크에 저장할 때 만약 디스크의 한 Sector(Track Sector)의 크기가 512Byte라고 하면, 파일을 $\frac{1,048,576,000 Byte (=1GB)}{512 Byte} = 2,048,000$조각으로 쪼개야한다. 그러면 이 Table에는 2,048,000개의 조각 위치가 저장되어야 한다. 결국 FAT는 조각들의 위치들만 저장된 Table에 불과한데, Cluster가 아닌 Sector(Track Sector)단위로 파일을 너무 잘게 쪼개면 이 Table의 크기가 너무 커지게 된다.
FAT 자체가 너무 커지면 FAT와 File을 한번에 읽지 못하는 상황이 발생할 수 있고, 그러면 Disk를 두번씩 접근해야하는데 이는 엄청나게 비효율적이다. (파일구조의 가장 중요한 목표 중 하나는 Disk 접근을 줄이는 것이다) 때문에, 파일을 조각낼 때 조각의 크기를 조금 크게 설정하면 어떨까? 에서 나온 아이디어가 바로 Cluster이다. 파일을 쪼갤때 만약 조각의 크기를 4KB로 지정한다면(Cluster에 8개의 조각 포함) 하나의 파일을 기존 보다 8배 덜 쪼개도 된다. 아까와 같이 1GB의 파일을 저장할 때 2,048,000조각으로 쪼갰던 것을 256,000개로만 쪼개도 된다는 것이다. 이렇게 하면 FAT의 크기가 획기적으로 줄어든다. 또한 각 조각들이 여기저기 트랙에 아무렇게나 막 흩어져 있는 것이 아니라 8개 단위로 붙어서 흩어져 있기 때문에 파일을 읽을 때 Head를 덜 움직여도 되고 이 때문에 파일의 탐색속도가 크게 향상된다.
그러나 Cluster의 크기가 마냥 크다고 좋은 것은 아니다. 예를 들어 1KB의 파일을 저장하는데 Cluster의 크기가 4KB라고 해보자. 만약 우리가 Cluster를 사용하지 않는다면 파일을 2개의 Sector(Track Sector)에 쪼개서 저장하고 FAT에 2개의 Sector(Track Sector)의 주소를 명세하면 된다. 하지만 Cluster를 사용하면 쪼개지는 모든 파일의 접근이 Cluster 단위로 이루어지기 때문에 내용을 1개의 Cluster에 저장하고 FAT에 1개의 Cluster를 명세하게 된다. 그러나 정작 내용은 1KB이고 3KB는 의미없이 사용된다. 이러한 현상을 우리는 단편화(Fragmentation)이라고 한다. 때문에 Cluster의 크기가 너무 크면 작은 파일을 저장할때, 혹은 파일을 쪼개서 저장할 경우 마지막 남은 작은 조각들을 저장할 때 의미없이 버려지는 공간이 상당히 커지게 된다. 때문에 Cluster의 크기는 매우 신중하게 선택해야한다. 아래는 Cluster의 크기에 따른 장단점을 정리한 표이다.
구분 | 장점 | 단점 |
Cluster 크기가 작을 때 |
버려지는 용량이 적다. (Fragmentation이 적다) |
FAT의 크기가 너무 커진다. |
Cluster 크기가 클 때 |
FAT의 크기가 줄어든다. 파일 탐색시간이 줄어든다. |
버려지는 용량이 커진다. (Fragmentation이 심해진다) |
4. FAT의 종류 (FAT32, NTFS)
1) FAT32 : FAT32는 윈도우즈95, 98, ME, XP까지 쓰였던 FAT의 형식이다. FAT32는 Cluster의 ID(1번 Cluster, 2번 Cluster 등의 ID)를 32bit를 사용하나 실제로는 상위 4bit는 다른 용도로 사용하고 28bit만 사용하였음. 한 Cluster의 최대 크기를 32KB로 지정했기 때문에 FAT32의 최대 볼륨 크기는 $32KB \times 2^{28} Clusters = 2^{43}Byte = 8TB$임. 즉 8TB이상의 디스크는 FAT32로 포맷할 수 없음.
그러나 실제로 윈도우즈 운영체제를 이용하다보면 FAT32로는 32GB 이하의 Hard Disk만 포맷하라고 권고하고 있고 그 이상은 NTFS 형식을 사용하여 포맷하라고 권고한다. 또한 Directory Entry(파일의 메타데이터가 저장된 자료구조)에서 File의 크기를 나타내는 비트를 32bit를 사용해서 최대 4GB의 파일까지만 표현할 수 있다.
2) NTFS : 현재 윈도우즈 운영체제 기본 FAT 형식이다. Cluster의 ID로 64bit를 사용해서 이론적인 최대 볼륨 크기가 16EB에 달한다. 그러나 또 실제 볼륨크기는 그정도는 안되고 32bit주소 체계를 따르도록 해서 256TB까지만 허용되며, 최대 파일크기는 16TB까지 지원된다.
우리가 윈도우즈 운영체제에서 디스크에 마우스를 대고 오른쪽 버튼을 누르면 포맷 버튼이 있다. 포맷버튼을 누르면 파일시스템과 할당단위 크기를 결정할 수 있는데 이 파일시스템이 바로 FAT의 형식이고 할당단위 크기가 바로 Cluster의 크기이다. 기존에는 이 것이 무엇을 의미하는지 몰랐지만 이제는 무엇인지 알 수 있다.
5. Reference
'미분류' 카테고리의 다른 글
디지털 to 아날로그 변조 (Modulation) (0) | 2020.05.12 |
---|---|
보조 저장장치 (3) - 저장 용량 (0) | 2020.01.30 |
보조 저장장치 (2) - 하드디스크 인터페이스 (0) | 2020.01.30 |
보조 저장장치 (1) - 디스크 구조 (0) | 2020.01.29 |
Expression과 Statement (1) | 2020.01.20 |
튜링 머신 (1) | 2020.01.19 |
괴델의 불완전성 정리 (0) | 2020.01.18 |