File System : OS가 파일을 저장하는 법
파일 시스템은 데이터를 하드디스크, SSD, USB등 저장장치에 파일과 디렉터리로 조직화하여 저장하고 관리하는 방식이다. 각각의 파일에 대한 정보를 담고 있는 자료구조를 File Control Block이라고 하며 이는 리눅스에서 inode에 해당한다.

- 블록 하나의 크기는 4KB
- 블록을 가리키는 주소는 4bytes
하나의 책임블럭이 가리킬 수 있는 블록의 수 4KB / 4 bytes = 2^10 = 1024개
보통 한 파일의 inode에서 direct blocks pointer는 10-15개가 존재한다.
single indirect가 저장가능한 데이터 크기 : 4KB X 1024 = 4MB
double indirect가 저장가능한 데이터 크기 : 4KB X 1024 X 1024 = 4GB
triple indirect가 저장가능한 데이터 크기 : 4KB X 1024 X 1024 X 1024 = 4TB
* 윈도우에서 사용하는 FS : NTFS
* 리눅스에서 사용하는 FS : ext4
파일에게 디스크 블록을 할당하는 4가지 방법!
1. Contiguous allocation
2. Linked allocation
3. File Allocation Table (FAT)
4. Indexed Allocation Method
1. Contiguous allocation
- 파일이 블록의 한 위치에서 연속적으로 크기 만큼 블록을 할당한다.
- 읽는 속도가 빠르고 임의 접근이 가능하지만 외부단편화가 많이 발생한다.
2. Linked allocation
- 파일이 블록의 한 위치에서 시작해서 링크드 리스트로 연결되어 있다.
- 외부단편화가 없고, 디스크 이용률이 증가하지만, 임의접근이 어렵고, 링크가 하나 끊기면 뒤를 다 잃어버린다.
3. File Allocation Table (FAT)
- 파일의 블록 위치 정보를 테이블로 관리하며, 임의 접근이 가능하다.
- 테이블이 커질수록 메모리 낭비가 발생하고, 속도가 느려질 수 있다.
4. Indexed Allocation Method
- 각 파일에 인덱스 블록을 두어 모든 데이터 블록 위치를 저장한다.
- 임의 접근이 가능하지만, 추가적인 저장 공간이 필요하다.
남은 공간 관리 방법 Free-Space Management
1. 비트맵 활용
블록의 개수만큼 bit를 저장하는 배열이 있고 각각 빈 블럭(bit : 1), 사용 중인 블럭(bit :0)을 표시한다.
배열 이용 : 접근이 빠르고, 이진 검색이 가능하다.
2. 연결 리스트 활용
비어있는 블록의 번호를 linked list를 통해 저장한다.
리스트 이용 : 크기 변동이 용이하고 중간에 값을 넣기 쉽다. 임의 접근은 안된다.