파일 시스템
사용자가 직접 파일을 보관하는 대신 파일 관리자를 두어 저장 장치의 관리를 맡기는 시스템
블록과 파일 테이블
블록은 저장 장치에서 사용하는 가장 작은 단위로, 한 블록에 주소 하나가 할당
블록 크기를 작게 설정하면 내부 단편화 현상이 줄어들어 저장장치를 효율적으로 쓸 수 있지만,
파일이 여러 블록으로 나뉘어 파일 입출력 속도가 느려짐
큰 파일을 많이 사용할 때는 블록 크기를 크게 잡는 것이 좋음

파일 분류
실행 파일: 운영체제가 메모리로 가져와 CPU를 이용하여 작업을 하는 파일
데이터 파일: 실행 파일이 작업하는 데 필요한 데이터를 모아놓은 파일

파일 헤더와 고유 헤더
파일 헤더: 파일 테이블에서 관리하며 파일의 이름, 종류, 크기, 시간, 접근 권한 등과 같은 일반적인 내용과 파일이 저장장치의 몇 번째 블록에 있는지에 대한 정보를 가지고 있음
고유 헤더: 데이터 파일에는 응용 프로그램이 필요로 하는 고유 헤더가 따로 달려 있는데 파일의 버전 번호, 크기, 특수 정보 등 응용 프로그램이 필요로 하는 정보가 있음

파일 구조
1. 순차 파일 구조
파일의 내용이 하나의 긴 줄로 늘어선 형태

장점: 모든 데이터가 순서대로 기록되기 때문에 저장 공간에 낭비되는 부분이 없음
단점: 파일에 새로운 데이터를 삽입하거나 삭제할 때 시간이 많이 걸림
2. 인덱스 파일 구조
순차 파일 구조에 인덱스 테이블을 추가하여 순차 접근과 직접 접근이 가능

3. 직접 파일 구조
저장하려는 데이터의 특정 값에 어떤 관계를 정의하여 물리적인 주소로 바로 변환하는 파일 구조
특정 함수(해시 함수)를 이용하여 직접 접근이 가능한 파일 구조

장점: 해시 함수를 이용하여 주소를 변환하기 때문에 데이터 접근이 매우 빠름
단점: 전체 데이터가 고르게 저장될 수 있는 해시 함수를 찾기가 어려움
디렉터리 파일
일반 파일에는 데이터가 담기고 디렉터리에는 파일 정보가 담김
디렉터리 헤더에는 디렉터리의 이름, 만든 시간, 접근 권한 등의 정보가 기록됨

1단계 디렉터리 구조
디렉터리 안에 자식 디렉터리가 없음
다단계 디렉터리 구조
디렉터리 안에 자식 디렉터리가 존재할 수 있음

파일 데이터 관리
1. 연결 할당
파일에 속한 데이터를 연결 리스트로 관리하는 방식
체인 할당이라고도 함

2. 인덱스 할당
테이블의 블록 포인터가 데이터 블록을 연결하는 것이 아니라, 데이터의 인덱스를 담고 있는 인덱스 블록을 연결
인덱스 블록은 실제 데이터의 위치에 관한 정보를 순서대로 보관

3. 빈 공간 리스트
파일 시스템은 디스크의 내부 단편화를 줄이고 빈 공간을 효율적으로 관리하기 위해 빈 블록의 정보만 모아놓은 빈 공간 리스트를 유지
(사용했던 블록을 빈 공간 리스트에 등록하는 것을 파일이 삭제된 것으로 간주, 어떤 데이터를 지우고 새로운 데이터를 디스크에 넣을 때 방금 지워진 블록에 할당되는 것이 아니라 리스트에 있는 블록 중 맨 앞에 있는 블록에 할당)
