본문 바로가기

Domain/운영체제

[운영체제] 7. Advanced File System

UFS(Unix File System)

유닉스에서 사용하는 가장 기본적인 파일시스템 형식으로 inode와 data를 번갈아가며 접근하게 되어 seek time이 크다. 또한 일관성 문제가 존재한다. 장점으로는 간단하고 사용하기 쉽다는 장점이 있다.

 

성능이 낮은 이유는 inode와 data가 다른 트랙에 위치하기 때문이다. 그리고 점차 시간이 지나면서 단편화가 발생하여 더욱 긴 seek time이 유발된다.

 

FFS(Fast File System)

이름에서 유추할 수 있듯이 빠른 파일 시스템이다. Disk-awareness를 통해 inode와 data를 가능한 가까이 배치하여 seek time을 줄이는 방식이다. (연관된 것을 같이 놓게 된다. Data-inode, file-directory)

Disk-awareness란, 데이터가 같은 실린더에 존재할 경우 seek time이 없다는 디스크의 특성을 의미한다.

 

FFS의 할당 규칙

  1. 디렉토리: 부하 균등을 위해, 가능한 가용 공간이 많은 실린더 그룹에 배치한다. 
  2. 파일: 파일이 존재하는 디렉토리가 위치한 실린더 그룹에 배치한다. 그리고 데이터 블럭과, inode는 같은 그룹에 배치하여 namespace locality를 증대한다.
  3. 큰 파일: 한 그룹에 제한된 수의 블럭만 할당한다. 큰 파일을 통째로 한 실린더 그룹에 넣게 되면, 다른 파일들의 namespace locality를 저하시킬 수 있기 때문이다.

FFS의 특징

  1. 기존에 비해 큰 디스크 블럭 사이즈로 seek time이 줄어들어 성능이 좋다. 하지만 내부 단편화로 인해 낭비되는 공간이 늘어난다. (이는 sub-blocks allocation으로 해결할 수 있다.)
  2. Parameterization: 디스크 블럭이 배치되는 순서를 달리하여 연속적인 접근이 가능해진다.
  3. 이외에도, symbolic link, atomic rename, long file name 등의 특징이 있다.

Consitency(일관성)

유효한 상태에서 다른 유효한 상태로의 변화를 보장하는 것을 의미한다. 컴퓨터가 메모리에서 디스크로 쓰기 작업을 하던 중에 충돌이 발생하는 경우와 같은 상황들을 잘 처리하여야한다.

 

일관성을 보장하는 방법

  1. FSCK(File System Check): 파일시스템 레이아웃 전체를 확인하여 일관성이 깨진 부분을 처리한다. 이는 너무 느리다는 단점이 존재하다.
  2. Journaling: 디스크를 업데이트하기 전에 어떤 작업을 할지 미리 기록하고, 문제가 발생할 경우 redo 혹은 undo를 통해 일관성을 보장한다.

Journaling

1. Data Journaling

데이터를 저널링하여 일관성을 보장한다. Data journaling은 journaling과 checkpointing이라는 작업으로 나누어진다.

  • Journaling: 디스크에 쓰기 전에 트랜잭션으로 작업을 기록한다.
  • Checkpointing: 트랜잭션이 성공적이면 실제 데이터를 디스크에 쓴다.

위 단계를 통해, journaling 후 checkpointing 단계에서 문제가 발생할 시 redo를 하고, jounaling 단계에서 문제가 생길 시 undo를 통해 일관성을 보장한다.

 

Data journaling의 문제점

  • 성능: 트랜잭션의 시작과 끝, 그리고 쓰기 작업들로 인해 성능이 느리다.
  • 쓰기 양이 크다: data jouranling을 사실상 write를 두번하는 것과 같아, 큰 파일 경우에 문제가 된다.

2. Metadata journaling 

Data journaling의 단점에 대한 해결책으로 메타 데이터만 journaling하는 방식이다.데이터와 메타데이터를 디스크에 쓰는 순서가 중요하다.

  • Ordered journaling: 데이터 쓰기 → 메타데이터 저널링 → 저널링 커밋 → 체크포인팅 → free
  • Writeback: 순서가 존재하지 않는 메타 데이터 저널링 방식.


Ext2/3/4

  1. Ext2: 실린더 그룹(FFS), pre-allocation
  2. Ext3: Ext2에 저널링을 도입하여 일관성을 유지.
  3. Ext4: Ext3에 큰 파일시스템을 고려한 기능을 추가. 디렉토리에 많은 하위 파일을 보유할 수 있음.

FAT

작은 용량의 스토리지에 사용되는 파일시스템이다. Bitmap과 inode를 FAT(File Allocation Table)로 대체한다. FAT에서 다음 블럭의 링크와 가용 공간을 관리한다. 파일당 메타데이터가 하나씩 존재하지 않게 되어 공간이 효율적이다.

 

예시. Boot sector는 1블럭, FAT은 2블럭, Root dir은 1블럭을 차지한다. 이 경우 hello.c(7KB)를 만들고 컴파일 하여 a.out(15KB)가 생성될 경우의 모습이다.

FAT에서 인덱스를 알 수 있음.

LFS

Out-place update를 활용하는 파일 시스템이다. 원래 위치에 write하는 대신에 새로운 log라는 위치에 write를 하여 파일이 연속적으로 배치되는 것이 보장된다. inode의 위치가 계속 바뀌기 때문에 이를 관리해야 되고, garbage collection을 통해 비유효한 데이터를 제거한다.

 

In-place update를 하는 파일시스템인 UFS, FFS, Ext2 등의 경우 시간이 지날수록 단편화가 진행되어 파일들이 떨어져 seek/positioning time이 증가한다.


Flash-aware File System

디스크와 플래시 메모리의 차이

  • 플래시 메모리는 erase 연산이 필요하다.
  • 플래시 메모리는 read/write 단위가 4kb로 작고, erase의 단위는 512KB로 크다. (Out-place update)
  • 그외에 성능, 기계장치의 여부, 충격에 강한 정도의 차이가 존재한다.

 

F2FS(Flash Friendly File System)

Inode와 out-place update 기법을 결합한 파일시스템으로 플래시 친화적인 파일 시스템이다.

 

FTL: 플래시 메모리를 디스크와 같이 추상화하여 일반적인 파일 시스템을 사용한다.