13장 가상 파일시스템. [30] DATE : 2015-07

Download Report

Transcript 13장 가상 파일시스템. [30] DATE : 2015-07

13장
가상 파일시스템
Kangmin, Lee
가상 파일시스템이란?
•
파일시스템 관련 인터페이스를 사용자 공간
애플리케이션에 제공하고 파일을 구현하는 커널 서브
시스템
•
간단히 VFS(Virtual Filesystem) 라고 부름
2
가상 파일시스템의 특징
•
모든 파일시스템은 VFS를 통해 공존 가능
•
다른 파일시스템간의 상호 동작도 가능
3
쉽지 않은 추상화
•
다양한 종류의 파일시스템이 존재함
•
•
공식 커널에서 지원하는 파일시스템 종류만 60개 이상
이들의 특성을 전부 고려하여 추상화 하는것은 힘든 작업
VFS
No Directory
Special Directory
No Inode
4
유닉스식의 추상화
•
유닉스는 모든 파일시스템에게, 기본 인터페이스 및
자료구조의 선언을 요구
•
유닉스 스타일 파일시스템에 편향되어 있음
넌 ~니까 이렇게
읽어()
사용자 공간
읽어()
사용자 공간
읽어줘()
친절한 OS
알아서_잘_내놔()
VFS
드림()
파일 시스템
옜다()
파일 시스템
5
잘 내놓을 조건
•
유닉스 파일시스템에서 사용하는 필수 기능 구현
•
•
•
•
슈퍼블록
디렉토리 구조
-
디렉토리도 하나의 보통 파일임
-
디렉토리 항목(directory entry)으로 파일에 접근
inode
파일시스템에 위 개념이 없더라도 마치 있는 것처럼
제공해야 함
•
독립적인 inode가 없어도 메모리 상에 inode 자료구조를
만들어 내야 함
6
VFS 객체
•
VFS는 객체지향적
•
•
•
한 자료구조가 여러 파일 모델을 표현
함수포인터와 구조체를 이용한 객체지향 구현
VFS 객체의 주요 유형
•
•
•
•
마운트된 파일시스템을 표현하는 슈퍼블록 객체
파일을 표현하는 아이노드(inode) 객체
디렉토리 항목을 표현하는 덴트리(dentry) 객체
프로세스가 사용하는 열린 파일을 표현하는 파일 객체
7
VFS 객체 동작
•
객체 선언시 해당 파일시스템에 맞는 함수를 정의
•
정의된 함수를 VFS가 적절한 때에 호출
•
정의하지 않고 NULL로 지정하면 종류에따라 범용 함수를
호출하거나 아무 일도 하지 않음
8
슈퍼블록(superblock) 객체
•
파일시스템을 기술하는 정보를 저장
•
•
•
보통 디스크의 특별한 섹터에 저장되어짐
디스크 기반이 아닌경우 실시간으로 생성해 메모리에 저장
<linux/fs.h>의 super_block 구조체를 이용해 표현
9
슈퍼블록 동작
•
<linux/fs.h>의 super_operations 구조체로 표현
•
파일시스템과 아이노드에 작용하는 저수준 작업
10
아이노드(inode) 객체
•
커널이 파일이나 디렉토리를 관리하는 데 필요한 모든
정보를 담음
•
•
파일시스템은 각자의 방법으로 메모리 상에 아이노드 객체를
구축해야 함
<linux/fs.h>의 inode 구조체로 표현
11
아이노드 동작
•
<linux/fs.h>의 inode_operations 구조체로 표현
12
덴트리(dentry) 객체
•
경로의 각 항목을 변환하고, 각 항목이 유효함을 확인
•
•
•
경로의 항목 하나하나가 덴트리 객체
ex) /bin/vi -> / , bin , vi 가 각각 하나의 덴트리 객체
<linux/dcache.h>의 dentry 구조체로 표현
13
덴트리 상태
•
유효한 덴트리 객체는 사용, 미사용, 부정 세가지 상태를
가짐
•
•
•
사용
-
해당 객체를 사용하는 사용자가 한 명 이상 존재
-
폐기할 수 없음
미사용
-
해당 객체를 아무도 사용하고 있지 않음
-
캐시를 위해 보관해두다가 메모리가 부족하면 폐기
부정
-
덴트리가 가리키는 아이노드가 삭제되었거나 올바르지 않음
-
잘못된 파일을 여는 경우가 많기 때문에 캐시용으로 보관
-
미사용시와 마찬가지로 메모리 부족시 폐기
14
덴트리 특징
•
여러 덴트리 객체가 같은 아이노드를 가리킬 수 있음(링크)
•
폐기시엔 가장 오래전에 사용한 객체를 폐기
•
경로에 해당하는 덴트리 객체를 해시 테이블로 구성
•
덴트리 객체가 해당 아이노드를 메모리에 고정시켜줌
15
덴트리 동작
•
<linux/dcache.h>의 dentry_operations 구조체로 표현
•
d_hash 함수가 덴트리 해시테이블의 함수로 사용됨
16
파일(file) 객체
•
프로세스가 연 파일을 표현하는데 사용
•
open()으로 생성되고 close()로 해제
•
같은 파일에 대해 여러 객체가 존재할 수 있음
•
<linux/fs.h>의 file 구조체로 표현
17
파일 동작
•
<linux/fs.h>의 file_operations 구조체로 표현
18
VFS 자료구조
•
객체에 필요한 정보를 담기 위한 구조체
•
•
파일시스템 관련
-
파일시스템 정보를 나타내는 file_system_type 구조체
-
마운트 관련 정보를 나타내는 vfsmount 구조체
프로세스 관련
-
프로세스의 사용중인 파일의 정보를 나타내는 files_struct 구조체
-
프로세스의 파일시스템 정보가 들어있는 fs_struct 구조체
-
프로세스의 namespace를 나타내는 mnt_namespace 구조체
19
결론
•
다양한 파일시스템을 관리하기 위해 가상 파일시스템을
지원
•
가상 파일시스템은 객체로 이루어져있어, 객체마다
정해진 동작과 정보를 파일시스템이 정의
•
이로인해 VFS 계층은 리눅스가 새로운 파일시스템과 표준
유닉스 시스템 호출 사이의 상호 작동이 가능하도록 해줌
20
thanks