File Allocation
파일에서는 블록 단위로 데이터를 저장한다. 블록 하나의 크기는 4,096Byte이다. 파일 내부에 여러 개의 블록이 존재할 때, 이들을 연결해주는 것을 File Allocation이라 한다. Allocation에는 아래와 같은 방법이 존재한다.
Contiguous Allocation
디스크 내부에 존재하는 연속된 블록들을 할당해 파일을 저장하는 방법. 파일 구성 테이블이 존재하는데, 이 테이블에 파일명 - 시작 블록 인덱스 - 블록 길이가 들어있다.
장점 Read/Write 처리하는 데에 시간이 적게 걸린다
단점 External Fragmentation이 발생. 먼저 Fragmatation이란 메모리에 생기는 작은 빈 공간을 말하는데, 빈 공간이 덩어리로 이루어져 있지 않고, 조각나있어 활용에도 어려움이 있다. External이란 특정 파일의 내부에 있는 것이 아닌 외부에 존재하는 Fragmentation을 말한다.
또 다른 단점으로 파일 사이즈가 증가하는 경우, 빈 공간을 할당하는 데에 어려움이 있다는 것이다. 이와 같은 단점들 때문에 현재는 해당 방법으로 블록들을 연결하지 않는다.
Chained Allocation (Linked Allocation)
파일 사이즈 증량에 자유롭다. 파일 용량을 바꿀 경우 데이터 블록 구조가 변해야 하기 때문에, 각 블록은 다음 블록을 가리킬 수 있는 포인터를 갖고 있다. 전체로 보면 블록들이 순서없이 배열된 것처럼 보이지만 다음 블록의 주소를 통해 연결되어 있다.
해당 방법을 통해 Fragmentation을 방지할 수 있지만, 중간에 한 블록에 에러가 난다면 다음 블록 정보까지도 읽어올 수 없다는 문제점이 존재한다. 또한 파일의 맨 처음 블록부터 순차적으로 읽어나가야 하기 때문에, 처리에 시간이 많이 걸린다는 단점이 있다.
Indexed Allocation
파일 블록의 인덱스 정보를 담고 있는 별도의 블록 테이블을 통해 관리. 테이블에는 파일별 인덱스 블록 번호가 기재되어 있고, 해당 인덱스 블록 내부 데이터에 해당 파일을 구성하고 있는 블록 위치 정보가 담겨있게 된다.
단점 파일을 저장하는 데 필요한 블록의 개수가 늘어난다. 인덱스 블록에 에러가 발생할 경우 해당 파일의 모든 블록 위치 정보를 잃게 된다.
Free Space Managment
파일 시스템 전체로 보았을 때 존재하는 빈 공간을 어떻게 관리할 것인가
Counting
파일 관리 방식에서의 Contigous allocation 방식과 유사. 빈 블록의 인덱스와, 해당 블록부터 비어있는 블록의 길이가 기재되어 있는 테이블이 존재한다.
Linked List
다음 빈 블록 주소를 블록 공간 말미에 할당해준다. Chained allocation 방식과 유사하지만, 빈 블록 정보를 순차적으로 접근할 필요가 없어 처리 시간이 지연되지 않는다는 차이점이 있다. 하지만 중간 블록에 에러 발생 시 다음 블록 정보들을 읽어올 수 없는 문제점은 여전히 존재한다.
Grouping (in Primitive Unix)
비어 있는 블록들으 번호를 인덱스 블록에 저장. 하나의 블록처럼 보이지만 실제로는 여러 개의 블록들로 구성된 슈퍼 블록에 인덱스를 저장한다. 한 블록당 4Byte의 정수를 1,024개 저장할 수 있으며, 초과할 경우 슈퍼 블록 내부 블록들에 Nested하게 빈 블록 위치 정보들을 저장한다. 슈퍼 블록의 빈 블록 위치정보들이 다 채워져 나갔다면, 가장 오래된 Nested 블록 데이터를 슈퍼 블록으로 불러온다.
Bit Vector (in Linux)
파일 시스템 내에 데이터 블록 개수만큼 비트들을 일렬로 할당한다. 각 비트들은 사용되는 중이면 0, 비어 있으면 1의 시퀀스로 관리된다. 굉장히 직관적인 방법이지만, 데이터 블록이 많아지면 길이가 굉장히 길어질 수 있다.
UNIX File Management
파일의 종류엔 일반파일, 디렉토리, 특수파일 (Named Pipes, Links, Symbolic Links)가 존재하며,
Boot block - Super block - inode block - data blocks 의 시스템으로 구성된다.
inode
UNIX 환경에서의 FCB이며, 파일 정보를 담고 있는 자료구조이다. File Mode / Link Count / Owner ID / Group ID / File Size / File Address / Last Accessed / Last Modified / inode Modified 정보가 저장되어 있다.
UNIX 환경에서는 Indexd allocation 방식을 이용해 파일의 블록들을 연결한다.
LINUX Virtual File System (VFS)
어느 파일 시스템(IBM, DOS..)이든 리눅스 환경에서 호환 가능하게 하는 논리적 파일 시스템. 해당 System Call만 호출하면 동적으로 모듈링된다.
System calls for files
운영체제는 들어오는 파일의 타입에 따라 적절한 Operation을 실행해준다. 연산들을 함수로 작성해놓고, 해당 함수들이 들어있는 경로정보들을 담는 테이블을 구성한다.
LINUX File Operations