파일 시스템

파일이란

  • 컴퓨터는 데이터를 저장 매체에 저장하는데, 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