파일 시스템
파일 시스템
우리는 컴퓨터를 쓸 때 주로 데이터를 파일 형식으로 저장하여 사용한다. 하드 디스크와 같은 보조 저장장치에서 이렇게 파일의 형태로써 데이터를 저장하는 방식을 파일 시스템(File System)이라고 한다.
이제부터 보조 저장장치에 어떤 식으로 데이터가 저장되어 파일의 형태를 띄게 되는지에 대해 알아보도록 하겠다.
하드 디스크의 구조
넘어가기 전에 간단하게 되돌아보고 가자.
- Platter : 하드 디스크에서 데이터를 저장하는 원판. 양면이고 여러 개가 있다.
- Track : platter의 동심원을 이루는 영역 중 하나이다. 여러 개의 sector로 이루어져 있다.
- Sector : track을 여러 개로 나눈 영역. 주로 512byte이며 여러 개를 묶어 하나의 Block으로 사용한다.
- Cylinder : 모든 platter의 같은 트랙 위치를 뜻한다.
하드 디스크는 기본적으로 비어있는 Block(Cluster라고도 한다)의 집합이라고 볼 수 있다.
하드 디스크의 파티션(Partition)
우리는 자연스럽게 하드 디스크를 C드라이브와 D드라이브의 2개의 파티션으로 나누어 사용한다. 이렇게 보조 저장장치의 저장 공간을 논리적으로 분할한 것을 파티션(Partition)이라고 한다.
각 파티션은 파티션의 첫 번째 섹터에 운영 체제의 부팅에 필요한 정보를 담고있는 BR(Boot Record)를 저장하고 있다. 그리고 2개 이상의 파티션을 사용하는 다중 파티션 구조에서는 MBR(Master Boot Record)가 존재한다. MBR에는 각 파티션의 BR과 파티션의 정보를 담고있는 파티션 테이블이 존재한다.
파일 시스템의 특징
우리는 보조 저장장치에 막대한 양의 데이터를 저장한다. 파일 시스템은 이렇게 저장한 데이터를 접근하고, 보호하고, 관리하기 위해 만들어진 수단이다. 파일 시스템을 통해서 우리는 파일의 무결성을 보장하고, 계층적 디렉토리를 통해 파일에 접근하며, 보조 저장장치의 용량을 효율적으로 사용이 가능하다.
파일은 기본적으로 파일의 이름, 위치, 크기 등의 정보가 담여있는 메타 영역과 데이터 본체를 저장하고 있는 데이터 영역으로 나뉜다. 파일 시스템의 무결성은 저널링(Journaling)을 통해 이루어진다. 파일 시스템이 업데이트 될 때마다 로그를 기록하여 파일을 수정하던 도중 크래시가 나는 등의 비정상적인 활동이 있어도 로그를 읽고 파일을 복구하거나 중단됬던 작업을 계속할 수 있게 한다.
대표적인 파일 시스템의 종류로는 FAT와 NTFS가 있다.
FAT 파일 시스템
가장 많이 사용되는 파일 시스템인 FAT32에서의 한 파티션의 구조이다.
FAT는 File Allocation Table의 약자이며 이름대로 파일의 저장을 표로 관리한다. 각 인덱스에 다음 Block의 번호를 저장한 표인 FAT를 FAT Area에 저장하여 FAT를 한번 읽는 것만으로 파일 전체에 대한 직접 접근이 가능하게 하고 파일을 읽는 도중 중간 Block에서 문제가 생겨도 FAT를 읽고 다음 Block으로의 이동이 가능하다.
FAT 시스템에서 한 파티션은 OS의 부팅에 사용되는 Boot Sector, 사용 가능한 클러스터의 개수와 그 위치를 담고있는 FSINFO, Boot Sector의 공간이 부족할 경우 사용되는 공간인 Boot Strap 등의 여러 정보가 담긴 Reserved Area가 섹터의 가장 처음을 차지한다. 그리고 FAT들을 담고있는 FAT Area가 차지하고 그 다음을 실제 데이터가 저장되는 Data Area를 차지한다.
FAT의 인덱스는 해당 파티션의 블록 전체를 저장할 수 있어야 하는데, 현재는 32bit 크기를 사용하는 FAT32가 가장 많이 사용된다.
NTFS 파일 시스템
NTFS 시스템에서의 한 파티션의 구조이다. FAT의 구조와 유사한데 Volume Boot Record에는 OS의 부팅에 필요한 정보를 담고있는 Boot Sector와 클러스터의 크기, 볼륨의 크기, MFT의 위치 등의 정보가 담겨있다.
파일의 메타 데이터, 디렉토리 등이 담긴 MFT(Master File Table)이 있고, 실제 데이터를 저장하는 Data Area가 있다.
NTFS 구조는 현재 윈도우의 기본 파일 시스템으로 사용되고 있고 FAT보다 검색능력, 대용량 파일 처리 능력, 용량의 효율성 등이 더 뛰어나다.
마치며
지금까지 파일 시스템에 대해 기본적인 부분을 알아보았다. 깊이 들어가면 부트 레코드가 무엇무엇을 담고있고 512바이트 크기의 MBR은 어느 크기의 뭘로 이루어져 있고 이런걸 다 봐야하는데 아무래도 그것까지는 필요하지 않을 것 같아 겉부분만 알아두기로 했다.
다음 포스팅부터는 남궁성 저자님의 JAVA의 정석을 구매하여 C++과 겹치는 부분은 패스하고 C++과의 차이점, JAVA에만 있는 기능 등을 중점에 두고 알아보는 ‘C++로 배우는 자바’를 포스팅 해볼까 한다.
그동안 알고리즘 문제풀이를 안한지 좀 됬기 때문에 일단 JAVA를 먼저 배우고 JAVA로 알고리즘 문제를 풀어보는 것이 언어 숙달에도 더 도움이 되고 CS의 네트워크 파트 공부보다는 우선이라고 생각했다.