OS - file system (개발자 입장에서의 파일 시스템)

Bomin Seo·2022년 8월 8일
0

In-memory structure

  • OS가 부팅 후, 프로세스가 파일을 접근할 때의 동작에 대한 구현

    buffer cache = directory cache + buffer cache

  • Buffer cache : 디스크에 존재하는 파일 중 자주 쓰이는 파일을 buffer cache에 넣어 사용한다.

    • File data cache : buffer cache
    • directory data cache : directory cache
  • 프로세스 별로 Open한 파일에 대한 정보를 system-wide open-file table에 통합하여 관리하고, 각각의 process는 process별로 open한 파일의 정보가 담긴 system-wide open-file table의 주소를 저장한다.

  • UNIX에서는 프로세스가 생성이 되면 Per-process 0, 1, 2번은 open한 상태로 유지된다.

    • 0번 : standard input
    • 1번 : standard output
    • 2번 : standard error

Virtual file system

  • 수많은 파일 시스템이 존재하며, 공통된 부분도 존재하고 각각의 차이점도 존재한다.
  • 공통된 부분을 모아 virtual file system(VFS)에 저장하고, 서로 다른 부분을 새로 Layer를 만들어 구현에 쉽도록 하였다.

파일 시스템 종류

  • CD-ROM : ISO 9660 (운영체제에 독립적)
  • UNIX : UFS, FFS
  • WINDOWS : FAT(16bits), FAT32(32bits, USB메모리에 많이 사용된다), NTFS (신뢰도 향상)
  • LINUX : ext 2/3/4, distributed file system, 기존 시스템과의 호환을 위해 파일 시스템이 매우 많다.
  • New ones : GoogleFS, Oracle ASM, FUSE …
  • In embedded system : NAND-FLASH 기반한 파일 시스템 사용 (ZFS)

On-disk structure

  • 전원이 꺼져도 디스크 내의 데이터들은 어떻게 관리되는 것인가에 대하여 구현

Boot control block (부팅시 필요, UNIX : UFS / Windows : NTFS)

  • Boot block(UFS) or Boot sector(NTFS)

Volume control block (파일 시스템에 대한 정보 저장)

  • Super block(UFS) or Master file table(NTFS)

Directory structure (디렉토리 관리)

File control block (FCB) (파일의 Attribute, meta data 관리)

  • i-node(UFS) or in master file table(NTFS)
MBR/GPT
  • 운영체제를 Booting해주는 boot loader 존재
Active한 partition
  • Booting이 가능한 partition
Boot block
  • Boot와 관련된 데이터를 저장
Super block
  • 파일 시스템에 대한 meta data(타입, Block number 및 개수 등)를 가지고 있다.
Bitmaps block
  • Free space에 관한 데이터를 가지고 있다.
i-nodes (FCB)
  • 파일에 관한 meta data를 관리한다.
Root dir
  • 제일 처음 생성되는 root directory에 관한 파일을 관리한다.
Format을 진행하면 하나의 파일(root dir)이 생성된다.
  • Format 명령어 (파일 시스템을 만드는 명령어)
    • C:/> format (windows)
    • $ mkfs (LINUX)

Disk block

  • OS에서 Cylinder No. / track No. / sector No. / Surface No. 등으로 관리할 수 없기 때문에 disk block number를 통하여 관리한다. (Disk block 단위로 관리한다)
  • Disk block 크기는 보통 4Kb이다.

Free-space management

Linked list 방식 : 에러가 발생하기 쉬워 잘 사용되지 않는다.

A Typical File Control Block

  • I-node (UNIX) / Master file table (NTFS)

Directory implementation

  • Directory data : 파일의 이름과 FCB(meta data)를 관리한다

  • 파일과 FCB를 저장하는 방법

  • Directory entry에 파일이름과 파일 위치정보만 저장하는 방법

    • UNIX / LINUX
  • 파일 이름, 위치, 몇 개의 중요한 정보를 중복 저장하는 방법

    • Windows

File data Allocation methods

  • 파일 저장 위치, 저장 방식이 제일 중요하다

Contiguous allocation

  • 디스크 블록을 연속적으로 할당하는 방법
  • CD-ROMS와 같은 읽기 전용에서 많이 사용된다.
  • 장점
    • Disk seek time이 최소화 된다.
    • 시작 위치와 길이만 알면 되기에 가장 간단한 방법이다.
    • Directory entries가 간단하게 표현된다.
  • 단점
    • 파일이 커지면 공간이 충분한 곳으로 전부 이동해야 한다.
    • Dynamic storage allocation이 필요하다
    • External fragmentation이 발생하며, compaction이 필요해진다.

Linked allocation

  • Linked list로 연결하여 불연속적으로 할당하는 방법
  • 장점
    • Directory entries가 간단하게 표현된다.
    • External fragmentation이 발생하지 않는다.
    • Free block이 있다면 파일이 커져도 된다.
  • 단점
    • 포인터 헤드 유지에 따른 오버헤드
    • 중간에 연결이 끊기면 전부 사용하지 못한다. 신뢰성 저하
    • 원하는 위치의 파일을 읽기 위해서는 처음부터 읽어야 한다(Random access 불가)

File-allocation table(FAT)

  • 포인터를 별도의 테이블 형태로 관리한다.
  • Random access가 가능하다.
  • 신뢰도를 위하여 사본을 만들어 관리한다.
    • 여전히 신뢰도에 대한 문제가 있다.

Indexed allocation

  • 파일의 위치를 별도의 디스크 블록에 저장한다.
  • Index – node(i-node) 형태로 관리한다.
  • 신뢰도가 FAT보다 높으면 RANDOM ACCESS가 가능하다.
  • UNIX/LINUX가 사용하는 방법
  • 장점
    • External fragmentation 없이 direct access가 가능하다.
    • 필요한 파일이 열릴 때만 i-node 가 사용된다.
  • 단점
    - 인덱스에 관한 오버헤드가 발생한다.
  • Direct block은 최대 12개 까지 : 48KB
  • Single indirect는 4B Int를 고려하면 1K * 4KB = 4MB
  • Double inderect : 4MB * 1K = 4GB
  • Triple indirect : 4GB * 1K = 4TB

    Buffer caching으로 성능 최적화

Block Size Performance vs. Efficiency

  • Block size가 커질수록 한 번에 읽는 양이 많아져 data rate가 좋아진다.
  • Block size가 커질수록 disk space utilization이 낮아진다. Internal fragmentation이 커진다.
    • SDD는 Data rate로부터 자유롭다

Read-ahead

  • 파일 시스템은 다음 블록에 대한 요청을 예상하여 미리 읽는다
  • HDD를 감안한 성능 최적화 방법이며, 미리 읽어온 것은 Cache에 저장된다.

Buffer cache

  • HDD에서 자주 사용되는 데이터를 디스크가 아닌 메인 메모리에서 읽음으로써 성능을 높인다.
  • SSD도 Buffer cache를 둠으로써 성능을 향상시킬 수 있다.
  • 4MB만 되어도 상당히 효율적이다.

Caching writes

  • Synchronous writes(버퍼와 디스크에 동시 변경내용 적용)가 매우 느리다.
  • Asynchronous write ( write-behind / write-back)
    • Uncommitted된 block의 queue를 유지한다.
    • 주기적으로 queue의 내용을 disk에 flush한다.
    • 신뢰성이 낮다 : 버퍼에만 반영되고 메인 메모리에는 반영되지 않을 수 있다.

File system consistency

  • 신뢰성 향상 방법
  • 손실된 데이터를 복구할 수는 없지만, 비정상적인 상황을 일관적인 정상적인 상태로 복구한다.
    • Windows : scandisk UNIX : fsck

Log Structured File Systems

Journaling file systems

  • Fsck는 시간이 오래 걸리므로 파일 시스템이 재시작될 때 매우 느리게 동작한다.
  • Log, journal, 갱신된 파일과 directories를 독립된 장소에 저장한다.
  • Crash가 발생하면 log(journal)을 읽어 부분적으로 갱신된 파일에 대하여 undo를 실행한다.
  • Windows : NTFS LINUX : ext3부터 적용

  • 수행된 operation의 요약 정보를 journal에 기록한다.
  • 블록이 flush되면 journal 내용이 삭제된다
    • Journal 기록이 남아있다면 비정상적인 상태가 있다는 의미

Remote File Systems

Network File Systems (NFS)

  • VFS interface : 파일 시스템의 공통된 부분을 구현
  • RPC / RMI : 분산 시스템에서 다른 컴퓨터에 있는 코드를 실행하는 메커니즘
profile
KHU, SWCON

0개의 댓글