File system은 file과 directory를 보조기억장치에 저장하고 접근할 수 있게 하는 OS 내부 프로그램이다.
대표적으로 FAT file system과 Unix file system이 있다.
보조기억장치를 처음 사용하는 경우 사용을 위해서는 partioning과 formating 작업을 거쳐야 하는데 partioning은 저장 장치의 논리적인 영역을 구획하는 작업을 의미한다.
쉽게 말하면 disk 내의 구획 작업을 하는 것을 의미하고 이렇게 나누어진 구획 하나하나를 partion이라고 부른다.
formating은 file system을 설정하여 어떤 방식으로 file을 저장하고 관리할 것인지를 결정하고 새 데이터를 쓸 준비를 하는 작업을 의미한다.
어떤 종류의 file system을 사용하는지는 이때 결정이 되고, partion마다 다른 file system을 적용할 수도 있다.
OS는 file과 directory를 block 단위로 읽고 쓴다.
하나의 file이 저장될 때는 하나 이상의 block에 저장이 되는데 OS는 하나 이상의 sector를 block으로 묶고 block 단위로 file과 directory를 관리한다고 할 수 있다.
이러한 상황에서 file을 보조기억장치에 할당하는 방법에는 크게 연속할당, 불연속 할당 2가지가 있으며 불연속 할당에는 연결 할당, 색인 할당이 있다.
연속 할당
가장 단순한 방식이며 보조기억장치 내 연속적인 block에 file을 할당하는 방식이다.
연속 할당된 file에 접근하기 위해서는 file의 첫번째 block 주소와 block 단위의 길이만 알면 된다.
연속 할당을 사용하는 file system에서는 다음과 같이 directory entry에 file 이름과 더불어 첫번째 block 주소와 그 단위 길이를 명시한다.
이러한 방식은 구현이 단순하지만 외부 단편화를 야기한다는 치명적인 문제가 있다.
연결 할당
연속 할당의 문제를 해결하기 위한 방식이며 각 block의 일부에 다음 block의 주소를 저장하여 각 block이 다음 block을 가리키는 형태로 할당하는 방식이다.
불연속 할당의 일종이기에 file이 여러 블록에 흩어져 저장되어도 무방하다.
외부 단편화 문제를 해결할 수 있지만 아래의 단점을 가지고 있다.
- 첫번째 block부터 읽어야 한다.
중간 부분부터 접근하고 싶어도 반드시 file의 첫번째 block부터 접근하여 하나씩 차례로 읽어야 하는데, 다시 말해 임의 접근의 속도가 매우 느리다고 할 수 있다.
- hardware 고장이나 오류 발생시 해당 block 이후 접근할 수 없다.
하나의 block 안에 file 데이터와 다음 block 주소가 모두 포함되어 있어 고장 및 오류가 발생할 시 그 block 이후의 block에 접근할 수 없다는 점이다.
위 문제를 해결하기 위해 오늘날에는 그대로 사용하지 않고 구현을 조금 변형하여 사용하는데 이를 이용하는 file system은 대표적으로 FAT File system이 있다.
색인 할당
모든 block 주소를 색인 block이라는 하나의 block에 모아 관리하는 방식이다.
임의의 위치에 있는 file에 접근하기 쉽고 색인 block안에 file을 구성하는 데이터 block 주소가 있으므로 색인 block만 알면 해당 file 데이터에 접근 가능하다.
그렇기에 색인 할당을 사용하는 file system에서는 directory entry에 file 이름과 더불어 색인 block 주소를 명시한다.
실제 file system을 보면 크게 2개가 있는데, USB 메모리, SD 카드 등에서 채용하는 저용량 저장 장치의 FAT file system이고, 다른 하나는 Unix 계열의 OS에서 사용하는 Unix file system이다.
연결 할당의 단점을 보완한 file systme이다.
연결 할당에서 block 주소를 저장해 이 블록들 중 하나라도 문제가 발생하면 그 이후에는 block에 접근할 수 없는데, FAT(File Allocation Table)라고 부르는 table을 통해 각 block의 주소를 관리하면 이러한 문제를 상당부분 해결할 수 있다.
이렇게 FAT를 이용하는 file system을 FAT file system이라고 부른다.
FAT는 partion의 앞부분에 만들어지고 뒤이어 root directory가 저장되는 영역이 있으며 그 뒤에 sub directory와 file을 위한 영역이 있다.
색인 할당 기반의 file system으로 색인 block을 i-node라고 부른다.
i-node에는 file 속성 정보와 15개의 block 주소가 저장될 수 있으며 file 속성 정보는 i-node에 표현된다.
i-node에는 file마다 있으며 i-node마다 번호가 부여된다. 그리고 i-node들은 partion 내 특정 영역에 모여 있으며 데이터 영역에 directory와 file 들이 있다.
여기서 i-node의 크기가 유한하다는 문제가 있는데, 만약 file 크기가 block 15개를 초과하는 file이 있는 경우 i-node 하나만으로는 file의 데이터 block을 모두 가리킬 수 없다.
Unix file system은 이러한 문제를 아래와 같이 해결한다.
i-node가 가리킬 수 있는 15개의 block 주소 중 처음 12개에는 file 데이터가 저장된 block 주소를 직접적으로 명시하며 이를 direct block이라고 한다.
여기에는 추가적인 작업을 필요로 하지 않는다.
12개로 모든 block을 표현할 수 없다면 i-node의 13번째 block 주소를 이용해 단일 간접 block 주소를 가리킨다. 단일 간접 block(single indirect block)이란 file 데이터가 저장된 block이 아닌 file 데이터가 저장한 block 주소가 저장된 block을 의미한다.
13개로도 부족하다면 i-node의 14번째 주소에 이중 간접 block 주소를 저장한다.
여기서 이중 간접 block(double indirect block)이란 데이터 block 주소를 저장하는 block 주소가 저장된 block을 의미한다.
즉, 단일 간섭 block의 주소를 저장하는 block이다.
14개로도 부족하면 i-node의 15번째의 삼중 간섭 block 주소를 저장한다.
이는 이중 간접 block 주소가 저장된 block으로 웬만한 크기의 file은 모두 표현할 수 있다.
system crash가 일어나는 경우를 대비해 journaling 기법을 통한 file system이 있다.
이를 이용하면 system crash가 발생한 경우 다음과 같은 방식으로 작업 log를 통해 복구를 수행한다.
이러한 방식이면 system crash가 발생하고 다시 booting해야한다면 file system 전체를 읽지 않고 log만 검사를 한다면 어떤 작업을 실행중인지 확인할 수 있다.
현대 대부분의 file system은 이러한 journaling을 지원한다.
mount란 하나의 file system을 가진 저장 장치에서 다른 file system을 가진 저장 장치를 사용할 수 있도록 system을 편입시키는 작업을 의미한다.