Linux의 가상파일시스템(VFS, Virtual File System)
사용자 프로세스에게 단일의 일관된 파일시스템 인터페이스 제공
VFS를 통해 파일시스템의 일반적인 특성과 행동을 모두 나타낼 수 있는 공통적인 파일 모델 정의
- 사용자 프로세스 -> VFS 파일 방식을 이용해서 파일시스템 호출을 수행
- VFS는 이 호출을 내부적인 파일시스템 호출로 전환하고 다시 구체적 파일시스템에 대한 사상기능으로 전달
VFS -> 객체지향 방식 + 각 객체는 데이터와 데이터에 대한 연산들을 가리키는 포인터를 가지고 있음
VFS의 주요 객체 타입
- 수퍼블록 객체(Superblock object)
- 마운트된 특정 파일시스템
- inode 객체(Inode object)
- 특정 파일
- dentry 객체
- 특정 디렉토리 항목
- 파일 객체(FIle object)
- 프로세스와 연계된 열린 파일
수퍼블록 객체
특정 파일시스템을 관리하기 위한 정보. 많은 데이터 항목들로 구성
- 파일시스템이 마운트되어 있는 장치
- 파일시스템의 기본 블록 크기
- dirty 플래그(수퍼블록이 변경되었지만 디스크 재쓰기는 하지 않았다는 것을 나타냄)
- 플래그들(읽기 전용 플래그 등)
- 파일시스템 디렉토리의 루트를 가리키는 포인터
- 열려있는 파일들의 리스트
- 파일시스템 접근 제어를 위한 세마포어
- 수퍼블록 연산들의 리스트
inode 객체
각각의 inode는 하나의 파일과 연계
inode 객체는 파일명과 파일의 실제 데이터를 제외한 모든 파일 관련 정보를 담음
소유자, 소유 그룹, 접근허가, 파일 접근시간, 데이터 크기, 링크 수 등
dentry(Directory entry) 객체
파일과 디렉토리 접근을 용이하게 함
inode와 수퍼블록을 가리키는 포인터 포함
부모 객체와 하위 dentry 객체들에 대한 포인터 포함
파일 객체 항목
- 해당 파일과 연계된 dentry 객체
- 해당 파일이 포함된 파일시스템
- 파일 객체에 대한 사용 카운터
- 사용자의 사용자 ID
- 사용자의 그룹 ID
- 파일 포인터(다음 연산의 기점이 될, 파일 내 현재 위치)
각 파일 개체는 VFS가 파일 객체에 실행시킬 수 있는 파일시스템구현 함수들을 기술하는 inode 연산 객체 포함
캐시
성능 향상을 위한 캐시의 사용(3종류)
- Inode캐시
- 디렉토리 나열 명렬 또는 파일
- 디렉토리 캐시
- 완전한 디렉토리 이름과 해당 inode 번호와의 매핑 저장
- 디렉토리 나열 연산 족도를 줄임
- 버퍼 캐시
- 동일한 데이터가 자주 필요하다면 이후의 요청은 디스크가 아닌 버퍼 캐시에서 처리
Windows 파일 시스템
Windows의 파일시스템 NTFS
NTFS의 주요 특성
아주 단순한 파일시스템 모델을 기반으로 만들어짐
- 복구 능력(Recovery)
- 시스템 다운과 디스크 장애로부터 복구할 수 있는 능력
- 저널링을 통한 복구
- 보안성
- 보안성 강화를 위해 Windows 객체 모델 사용
- 열린 파일은 자체의 보안 속성을 정의한 보안 디스크럽터를 가진 파일 객체로서 구현
- 대용량 디스크와 대용량 파일
- FAT 뿐만 아니라 대부분의 파일시스템보다 효율적으로 대용량 디스크와 파일 지원
- 다중 데이터 스트림
- 파일의 실제 내용은 바이트스트림으로 취급
- 저널링
- 볼륨 상의 파일에 행해진 모든 변경의 로그를 유지
- 어느 파일이 변경되었는지를 확인하기 위해 저널을 읽으면 됨
- 압축과 암호화
- 전체 디렉터리와 개별 파일들은 투명하게 압축 또는 암호화, 혹은 둘 다 될 수 있음
- Hard link, Symbolic Link
- 경성 링크(Hard link) -> 하나의 파일을 같은 볼륨에 존재하는 여러 경로명으로 접근
- 심볼릭 링크(Symbolic link) -> 하나의 파일이나 디렉터리를 서로 다른 볼륨에 존재하는 여러 이름으로 접근
NTFS 볼륨과 파일구조
디스크 저장 개념
- 섹터(sector)
- 디스크 상의 가장 작은 물리적 저장 단위
- 2의 멱수로 거의 항상 512바이트
- 클러스터(cluster)
- 하나 이상의 인접트랙
- 섹터 단위의 클러스터 크기는 2의 멱수
- page, block이라고도 함
- 볼륨(volume)
- 디스크의 논리적 파티션으로 하나 이상의 클러스터로 구성되어 있고 한 파일시스템에 의해 공간 할당에 사용됨
- 하나의 볼륨은 하나의 파일시스템 정보와 파일들의 집합, 파일에 할당될 수 있는 볼륨 상의 가용 공간 등으로 구성
- NTFS의 최대 볼륨 크기 264바이트
NTFS 볼륨 레이아웃
- 파티션 부트 섹터
- 부트 시작 정보 및 볼륨 레이아웃과 파일시스템 구조에 대한 정보
- 마스터 파일 테이블(MFT, Master File Table)
- 1024바이트 길이 행들의 테이블로 구성
- MFT2
- MFT의 첫 몇 행에 대한 미러
- MFT를 저장하는 섹터 영역에서 한 섹터만 오류가 발생할 경우에 볼륨에 대한 접근을 보장하기 위해 사용
- 로그파일
- NTFS 복구에 사용되는 트랜잭션 단계 리스트
- Cluster Bitmap
- 어떤 클러스터가 사용중인지 나타내는 볼륨의 한 표현
- 속성정의표(attribute definition table)
- 볼륨 상에서 지원되는 속성 타입 정의
- 인덱싱, 시스템 복구 연산을 통한 복구 가능 여부 등
복구성(recoverability)
시스템 다운이나 디스크 장애 등 -> NTFS는 파일시스템을 일관성 있는 상태로 복구
복구성을 지원하는 주요 요소
- 입출력 관리자
- 로그파일서비스
- 캐시관리자
- 가상메모리관리자