파일 시스템
파일이란
컴퓨터는 데이터를 저장 매체에 저장하는데, OS는 데이터를 편리하게 사용하기 위해 파일이라는 개념으로 관리한다.
파일은 OS에 의해서 물리 장치(하드디스크, CD-ROM 등)에 저장되고, 관리된다.
일반적으로 파일은 프로그램과 데이터를 의미한다.
파일은
OS
마다 다른 속성을 갖지만 일반적으로 파일은 이름, 크기, 유형, 위치, 생성 시간, 접근 권한 등의 속성을 갖는다.
파일 디스크립터
유닉스 계열의 시스템에서 프로세스가 파일을 다룰 때 사용하는 정수 값
유닉스 시스템에서는 모든 것을 파일이라고 한다.
디바이스, 디렉토리, 소켓, 파이프 등 모든 객체를 파일로 관리
프로세스가 실행 중에 파일을 오픈하면 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않은 가장 작은 값을 할당해준다.
그 다음 프로세스가 열려있는 파일에 시스템 콜을 호출하여 접근할 때, 파일 디스크립터 값을 사용해서 파일을 지칭할 수 있다.
각 프로세스 별로
Open file descriptor table
이 존재하고, 이 테이블의 엔트리에는 파일의 offset, flag, 접근 모드, inode 레퍼런스를 가지고 있다.
파일 시스템
파일 시스템은 디스크에서 쉽게 파일을 저장하고, 찾고, 인출할 수 있게 함으로써 보다 효울적으로 파일을 다룰 수 있게 해준다.
파일 시스템은 크게 데이터를 저장하는 파일 그리고 파일을 관리하는 디렉토리로 구성된다.
디렉토리 구조
디렉토리는 파일 이름을 디렉토리의 파일 컨트롤 블록으로 매핑하는 테이블이다.
디렉토리는 여러 구조를 가질 수 있고 싱글 레벨부터 멀티 레벨까지 다양하게 구성할 수 있다.
자바 파일을 컴파일을 하는 명령어로, 디스크에 컴파일과 관련된 프로그램을 매핑되어 있는
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