파일 시스템
파일이란
- 컴퓨터는 데이터를 저장 매체에 저장하는데, OS는 데이터를 편리하게 사용하기 위해 파일이라는 개념으로 관리한다. 
- 파일은 OS에 의해서 물리 장치(하드디스크, CD-ROM 등)에 저장되고, 관리된다. 
- 일반적으로 파일은 프로그램과 데이터를 의미한다. 
- 파일은 - OS마다 다른 속성을 갖지만 일반적으로 파일은 이름, 크기, 유형, 위치, 생성 시간, 접근 권한 등의 속성을 갖는다.
파일 디스크립터
- 유닉스 계열의 시스템에서 프로세스가 파일을 다룰 때 사용하는 정수 값 
- 유닉스 시스템에서는 모든 것을 파일이라고 한다. - 디바이스, 디렉토리, 소켓, 파이프 등 모든 객체를 파일로 관리 
 
- 프로세스가 실행 중에 파일을 오픈하면 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않은 가장 작은 값을 할당해준다. - 그 다음 프로세스가 열려있는 파일에 시스템 콜을 호출하여 접근할 때, 파일 디스크립터 값을 사용해서 파일을 지칭할 수 있다. 
- 각 프로세스 별로 - Open file descriptor table이 존재하고, 이 테이블의 엔트리에는 파일의 offset, flag, 접근 모드, inode 레퍼런스를 가지고 있다.
 
파일 시스템
- 파일 시스템은 디스크에서 쉽게 파일을 저장하고, 찾고, 인출할 수 있게 함으로써 보다 효울적으로 파일을 다룰 수 있게 해준다. 
- 파일 시스템은 크게 데이터를 저장하는 파일 그리고 파일을 관리하는 디렉토리로 구성된다. 
디렉토리 구조
- 디렉토리는 파일 이름을 디렉토리의 파일 컨트롤 블록으로 매핑하는 테이블이다. 
- 디렉토리는 여러 구조를 가질 수 있고 싱글 레벨부터 멀티 레벨까지 다양하게 구성할 수 있다. 
javac *.java자바 파일을 컴파일을 하는 명령어로, 디스크에 컴파일과 관련된 프로그램을 매핑되어 있는
javac를 호출하여 프로그램을 실행시키는 것이다.새로운 프로그램을 설치하고 터미널에서 실행했을때(ex:
java등) 환경 변수 PATH 에 등록하는 이유도 파일 위치를 매핑하기 위해서이다.
파일 할당
- 디스크는 물리적으로 섹터로 구성되어 있고, 섹터는 블록으로 구성되어 있다. 파일은 각 블록에 할당된다. 
- 메모리 할당 이슈가 있는 것처럼, 파일도 블록에 어떻게 할당한 것인지에 대한 이슈가 있다. 
Contiguous Allocation
설명
- 파일을 연속적인 섹터에 할당하는 방법 
- 연속적인 메모리 할당과 비슷한 방식으로 파일을 할당한다. 
장점
- 파일을 쉽게 할당 가능 
단점
- 파일을 삭제하면 빈 공간이 생기고, 이 빈 공간을 활용하기 위해서는 파일을 압축해야 한다. 
- 외부 단편화가 발생할 수 있다. 
Linked Allocation
설명
- 파일을 불연속적으로 블록에 할당하고, 각 블록을 순차적으로 링크드 리스트로 연결하는 방법 
장점
- 외부 단편화와 압축 이슈는 해결 
단점
- 파일의 i번째 블록을 찾기 위해서는 첫 번째 블록부터 순차적으로 탐색하는 오버헤드방생 
- 파일의 중간 블록이 고장나면 파일의 나머지 블록에 접근 불가. 
Indexed Allocation
설명
- 파일의 모든 블록의 위치를 인덱스 블록에 저장하는 방식 
- 인덱스 블록은 디스크의 한 섹터에 저장되고, 파일의 i번째 블록을 찾기 위해서는 인덱스 블록에 접근하여 i번째 블록의 위치를 찾을 수 있다. 
장점
- 외부 단편화가 발생하지 않는다. 
- 직접 데이터 접근이 가능하다. 
단점
- 인덱스 블록 + 데이터 블록 이기 때문에 작은 크기의 파일의 경우 메모리 낭비될수 있다. 
- 너무 큰 파일의 경우 하나의 블록으로 index저장이 어려울수 있다 - index 블록을 연결 리스트로 여러개를 만드는 linked scheme방법으로 해결가능. 
 
파일 시스템 구조
파일 시스템은 계층 구조로 구성되어 있다.
- devices- 장치(하드디스크, CD-ROM 등)를 관리하는 계층 
 
- I/O control- 메모리와 디스크 시스템 사이에 정보 전송을 담당하는 계층 
 
- Basic file system- 적절한 디바이스 드라이버에게 디스크 상의 물리 블록을 읽고 쓰도록 명령을 내리는 계층 
 
- File organization module- 파일의 논리 블록과 물리 블록을 매핑하는 계층 
 
- Logical file system- 메타 데이터 정보를 관리하는 계층 
- 메타데이터는 파일의 내용 자체인 데이터를 제외한 모든 파일시스템 구조를 말한다 (파일의 이름, 유형, 크기, 생성 시간, 접근 권한 등의 속성) 
- Logical file system계층은- inode를 사용하여 메타 데이터를 관리한다.
 
Unix 파일 시스템 구조
설명
- Boot block - 컴퓨터의 부팅과 관련한 정보가 들어있는 디스크 
- 0번 블록에 부팅에 필요한 정보를 메모리에 올리면 복잡한 로직 없이 부팅할수 있기 때문에 모든 파일 시스템에는 부트 블록이 가장 위에 있다. 
 
- Super block - 파일 시스템과 관련된 모든 정보가 있는 파티션 
- 비어있는 블록의 위치, 실제 사용중인 블록 위치 등 
 
- Inode list - 파일 이름을 제외한 모든 메타 데이터를 저장하는 영역 
- 사진의 빨간 상자의 모든 항목이 inode로 매핑된 파일의 메타데이터가 들어있다. 
- direct block은 파일 내 블록에 집적 접근할 수 있는 블록 위치를 저장하는 영역으로 블록 별 위치 정보를 저장하기 때문에 모든 데이터에 직접접근이 가능해진다. 
- single/double/triple indirect블록은 파일 크기가 클 경우 다른 파일에 저장하게 되는데 파일을 연결할때 사용하는 주소이다 
 
FAT 파일시스템 구조(File Allocation Table)
설명
- Block block - Unix 파일 시스템과 동일 
 
- FAT - 메타데이터 중 파일의 위치정보만 저장하고 나머지는 Root directory에 저장 
- 위치 정보가 있기때문에 contents에 직접 접근 가능 
- 부팅과 함께 메모리에 올라가기 때문에 파일에 접근할때 디스크에 접근하는 것이 아닌 메모리내에서 Linked Allocation처럼 위치 탐색이 가능 
 
- Root directory - 위치를 제외한 나머지 메타데이터를 저장 
 
- Data block - 파일 자체 정보를 갖고있는 블록 
 
Ref
- https://dev-ahn.tistory.com/96 
- https://velog.io/@redgem92/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C-inode-%EB%B0%A9%EC%8B%9D%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC 
Last updated