Blog
스터디
CS Study with SON
21주차
파일시스템

출처 - https://github.com/jmxx219/CS-Study (opens in a new tab)

파일 시스템

파일이란

  • 컴퓨터는 데이터를 저장 매체에 저장하는데, 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블록은 파일 크기가 클 경우 다른 파일에 저장하게 되는데 파일을 연결할때 사용하는 주소이다

    Inode의 추가적인 내용

    파일 시스템에서의 블록에 대해서 자세하게 보면 아래 그림과 같이 구성되어 있다.

    파일 시스템에서의 블록은 super block, 그 파일의 메타 데이터는 inode block, 그리고 실제 데이터를 data block 으로 구성됨을 볼 수 있다.

    이렇게 계층화를 하여 파일 시스템을 구성하는 이유는 아래 inode 구조를 보면 알 수 있다.




    • inode block 구성을 보면 data block의 위치를 가리키는 포인터가 존재한다.
      • 이 포인터는 direct pointer, indirect pointer, double indirect pointer 로 구성되어 있다.
        • 핵심은 블록의 크기가 최대 4KB 이다.
        • 블록의 크기가 제한되어있기 때문에 direct pointer, indirect pointer, double indirect pointer로 나누어 확장하여 관리한다
      • direct pointer
        • 파일의 데이터 블록을 가리키는 포인터
        • inode에는 12개의 direct block이 존재한다.
        • direct block는 파일의 데이터 블록을 가리키는 포인터이기 때문에, 파일의 크기가 4KB 이하일 경우에는 direct pointer만 사용하게 된다.
      • indirect pointer
        • indirect pointer는 데이터 블록을 가리키는 포인터이기 때문에, 파일의 크기가 4KB를 넘어서는 경우에 사용된다.
      • double indirect pointer
        • double indirect pointerindirect pointer를 가리키는 포인터이기 때문에, 파일의 크기가 4MB를 넘어서는 경우에 사용된다.

    이렇게 블록 크기를 넘어서면 indirect pointer를 사용하고, indirect pointer의 개수가 부족하면 double indirect pointer를 사용하는 방식으로 파일의 크기를 확장할 수 있다.

FAT 파일시스템 구조(File Allocation Table)

설명

  • Block block

    • Unix 파일 시스템과 동일
  • FAT

    • 메타데이터 중 파일의 위치정보만 저장하고 나머지는 Root directory에 저장
    • 위치 정보가 있기때문에 contents에 직접 접근 가능
    • 부팅과 함께 메모리에 올라가기 때문에 파일에 접근할때 디스크에 접근하는 것이 아닌 메모리내에서 Linked Allocation처럼 위치 탐색이 가능
  • Root directory

    • 위치를 제외한 나머지 메타데이터를 저장
  • Data block

    • 파일 자체 정보를 갖고있는 블록

Ref