본문 바로가기

Enginius/Linux

[OS] VFS

출처: http://hooneyo.tistory.com/category/OS%EC%9D%B4%EC%95%BC%EA%B8%B0

VFS의 네가지 주요 객체
-마운트된 특정 파일시스템을 나타내느 수퍼블록 객체
-특정 파일을 나타내는 inode 객체
-특정 디렉토리 항목과 경로 상에 있는 한 항목을 나타내는 덴트리 객체
-프로세스와 연관돼 열려져 있는 파일을 나타내는 파일 객체

여기서 VFS에서는 디렉토리 역시 일반 파일로 취급하므로 별도의 디렉터리 객체는 존재하지 않음을 주의하자.
dentry는 일반 파일을 포함한, 경로 상에 있는 어떤 항목을 가리킨다.
즉, dentry는 디렉터리와 같지 않지만, 디렉터리와 파일은 같은 것이다.

inode는 단순히 데이터블록을 가리킨다. 따라서, 사용자가 해당 디렉토리에 어떤 파일이 있는지를 알기 위해서는 dentry가 객체가 있어야 할 필요성이 있다. (내 생각임)

동적 객체(operation object)는 각각의 주요 객체들 안에 포함돼있다.
즉, 각 객체마다 함수구조체들이 있다는 말씀.
- 커널이 특정 파일시스템에 대하여 호출하는 read_inode(), sync_fs()와 같은 함수들을 포함하는 super_operations 객체
- 커널이 특정 파일에 대하여 호출하는 create(), link()와 같은 함수들을 포함하는 inode_operations 객체
- 커널이 특정 디렉터리 엔트리에 대하여 호출하는 d_compare(), d_delete()와 같은 함수들을 포함하는 dentry_operations객체
- 프로세스가 파일을 열기 위하여 호출하는 read(), write()과 같은 함수들을 포함하는 file 객체

다른 VFS객체
- 각각의 등록된 파일시스템들은 file_system_type 구조체로 표현된다. 이 객체는 해당 파일시스템과 파일 시스템의 기능을 표현한다. 
- 각각의 마운트 포인트는 vfsmount 구조체로 표현된다. 이 구조체는 위치와 마운트 플래그와 같은 마운트 포인트에 대한 정보를 포함한다.
- 프로세스당 3개씩 존재하는 구조체들이 파일시스템과 프로세스와 연관돼있는 파일을 표현한다. file_struct 와 fs_struct namespace 구조체