파일 시스템은 파일과 디렉토리를 관리합니다. 파일 시스템은 파일과 디렉토리를 보조기억장치에 일목요연하게 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램입니다. 파일 시스템에는 다양한 종류가 있고, 하나의 컴퓨터에서 여러 파일 시스템을 사용할 수 있습니다.
이제 막 공장에서 생산되어 한 번도 사용된 적이 없는 새 하드 디스크나 SSD가 있다고 가정하겠습니다. 우리는 이 보조기억장치에 곧바로 파일을 생성하거나 저장할 수 없습니다. 보조기억장치를 사용하려면 파티션을 나누는 작업과 포맷 작업을 거쳐야 합니다.
아주 큰 서랍이 있다고 가정해 봅시다. 이 서랍에 물건을 마구잡이로 보관한다면, 필요한 물건을 찾기 어려워질 것입니다. 하지만, 서랍 안에 칸막이를 설치해 구획을 나누면, 물건을 더 쉽게 정리하고 찾을 수 있습니다. 이처럼 저장 장치에 논리적 구획을 만드는 작업이 바로 파티셔닝(Partitioning)입니다. 그리고 이렇게 파티셔닝 작업을 통해 나누어진 영역 하나하나를 파티션(Partition)이라고 부릅니다.

포맷은 저장 장치를 완전히 삭제하는 것으로 알고 있는 사람들이 많습니다. 하지만, 이는 완벽하게 정확한 표현이라고 보기는 어렵습니다. 포매팅(Formatting)은 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업입니다. 즉, 어떤 종류의 파일 시스템을 사용할지는 바로 이때 결정됩니다.

운영체제는 파일과 디렉토리를 블록 단위로 읽고 씁니다. 하나의 파일이 보조기억장치에 저장될 때, 그 파일은 하나 이상의 블록에 걸쳐 저장됩니다. 작은 파일은 적은 수의 블록에 저장되지만, 큰 파일은 여러 블록에 걸쳐 저장됩니다. 파일을 보조기억장치에 할당하는 방식에는 연속 할당과 불연속 할당(연결 할당, 색인 할당)이 있습니다.
연속 할당은 파일이 저장 장치 내에서 연속적인 공간을 차지하도록 블록을 할당하는 방식입니다. 연속 할당은 가장 단순한 방식이지만, 외부 단편화를 야기한다는 치명적인 단점이 있습니다.

연결 할당은 각 블록 일부에 다음 블록의 주소를 저장하여 블록들을 연결 리스트 형태로 관리하는 방식입니다. 연결 할당은 연속 할당의 외부 단편화 문제를 해결할 수 있지만, 연결 리스트를 이용하여 특정 블록에 순차적으로 접근해야만 합니다.

색인 할당은 모든 파일의 블록 주소를 하나의 색인 블록에 모아 관리하는 방식입니다. 색인 할당은 연결 할당과 달리 파일 내 임의의 위치에 접근하기 쉽습니다. 파일의 i번째 블록에 접근하고 싶다면, 색인 블록의 i번째 항목이 가리키는 블록에 접근하면 됩니다.

연속 할당의 단점을 보완한 파일 시스템이 바로 FAT 파일 시스템입니다. FAT 파일 시스템은 USB 메모리, SD 카드 등의 저용량 저장 장치에서 사용됩니다.
파일 할당 테이블(FAT: File Allocation Table)은 연결 할당에서 각 블록에 포함된 다음 블록의 주소들을 하나의 테이블로 관리합니다.

FAT 파일 시스템의 디렉토리 엔트리에는 파일 속성과 관련한 다양한 정보들이 있습니다. 특히, 속성은 해당 파일이 읽기 파일, 숨김 파일, 시스템 파일, 일반 파일, 디렉토리인지 등을 식별하기 위한 항목입니다.

/home/minchul/a.sh에 접근해 봅시다.

UNIX 파일 시스템은 색인 할당 기반의 파일 시스템입니다. UNIX 파일 시스템은 색인 할당의 색인 블록을 i-node라고 부릅니다.
i-node에는 파일 속성 정보와 15개의 블록 주소가 저장될 수 있습니다. 하지만, i-node의 크기는 유한합니다. i-node 하나만으로는 파일의 데이터 블록을 모두 가리킬 수 없습니다. 그래서 UNIX 파일 시스템은 간접 블록 주소를 사용하여 문제를 해결합니다.

UNIX 파일 시스템에서 파일 속성 정보는 i-node에 표현됩니다.

/home/minchul/a.sh에 접근해 봅시다.

[운영체제(OS)] 18. 파일 할당
[운영체제] 파일 시스템(File System)
혼자 공부하는 컴퓨터구조+운영체제