본문 바로가기
객체지향설계

[파일구조] - 파일에 대한 물리적 관점

by CHML 2016. 4. 22.
1. 디스크(Disks)

디스크는 크게 데이터를 저장하는 부분과 데이터를 읽는 부분으로 구성된다. 데이터를 저장하는 부분은 아래의 그림과 같이 트랙(track)과 섹터(sector)로 구분할 수 있다. 대부분의 디스크는 아래의 우측 그림과 같이 여러 개의 판(플래터, platter)을 다층으로 쌓아서 저장 용량을 증가시키는데, 이러한 구조에서 각각의 플래터의 같은 위치에 존재하는 트랙으로 구성된 원기둥의 표면과 같은 모양의 집합을 실린더(cylinder)라고 한다.



위의 그림과 같이 다층으로 플래터를 쌓은 디스크에서는 여러 개의 헤더를 구성하여 디스크 연산의 효율을 증가시킨다. 여러 개의 헤더는 각각이 개별적으로 동작하는 것이 아니라, 하나의 축에 고정되어 같이 움직인다. 따라서, 같은 실린더에 존재하는 데이터는 헤더의 위치를 변경하지 않고도 데이터를 읽을 수 있다.


2. 디스크 연산

디스크에서 데이터를 읽거나 쓰기 위해서는 올바른 트랙과 섹터에 헤더를 위치시키는 작업이 필요하다. 섹터를 찾는 작업은 플래터를 회전시키면 되기 때문에 디스크 연산 중에서는 비교적 빠른편에 속한다. 그러나 트랙을 찾는 작업은 헤더를 기계적인 방법으로 움직여야하기 엄청난 시간을 소모하며, 디스크의 동작 중에서 가장 느린 연산이다. 따라서, 좋은 파일 구조는 디스크 접근을 최소화하는 것과 더불어 트랙과 섹터를 찾는 연산을 효율적으로 수행할 수 있도록 시스템을 구성하는 것을 뜻한다.

메모리를 엑세스하는 것은 보통 ns 단위의 시간을 소모하는 반면에 디스크를 엑세스하는 것은 ms 단위의 시간을 소모하기 때문에 디스크에서 효율적으로 트랙과 섹터를 찾을 수 있도록 파일 구조를 설계하는 것은 시스템 전체 성능에 막대한 영향을 미친다.


3. 클러스터(Cluster)

디스크에서 트랙과 섹터를 찾는 작업은 매우 많은 비용을 소모하기 때문에 대부분의 파일 시스템에서는 같은 트랙에 존재하는 여러 섹터를 그룹화하여 한 번에 읽는 방식을 이용한다. 이러한 시스템에서 특정한 수의 섹터로 구성된 그룹을 클러스터라고 한다.

파일 매니저는 클러스터 단위로 파일을 입출력하기 위해 FAT(File Allocation Table)을 참조한다. FAT은 논리적 파일 관점의 레코드를 물리적 파일 관점의 클러스터로 사상하기 위한 정보를 포함하고 있으며, FAT의 한 요소는 클러스터 번호와 클러스터의 물리적 위치로 구성된다.


4. 단편화(Fragmentation)

단편화는 메모리나 디스크와 같은 기억 장치의 저장 공간이 여러 개의 조각으로 나뉘는 현상을 뜻한다. 단편화는 기억 장치의 저장 공간을 낭비하게 하거나 읽기 및 쓰기 연산의 속도를 늦추는 문제점을 야기하며, 단편화에는 내부 단편화가 외부 단편화가 있다.


1) 내부 단편화(internal fragmentation)

디스크에서 내부 단편화는 섹터의 크기보다 실제 데이터의 크기가 작을 때 발생한다. 예를 들어, 섹터의 크기는 512bytes인데  실제 데이터는 300bytes인 경우, 섹터의 저장 공간(512bytes - 300bytes = 212 bytes)이 낭비되는 내부 단편화가 발생한다.


2) 외부 단편화(external fragmentation)

외부 단편화는 다수의 파일 쓰기 및 지우기 작업을 수행했을 때, 사용 가능한 저장 공안이 여러 조각으로 나뉘는 현상을 말한다. 외부 단편화가 발생하는 경우, 하나의 논리적 파일이 실제 디스크에서는 연속적인 저장 공간에 할당되지 못하기 때문에 디스크 읽기 및 쓰기 연산의 효율이 떨어지게 된다. 흔히 Windows에서 제공하는 디스크 조각 모음을 실행하면 컴퓨터의 속도가 향상된다고 하는데, 이는 디스크 조각 모음이라는 유틸리티 프로그램이 디스크에서 발생한 단편화를 제거해주기 때문이다.