본문 바로가기

Programming/Linux_Kernel

virtual file system diagram


안녕하세요.

오늘은 말도많고 복잡하기로도 유명한 linux 의 virtual file system 을 보겠습니다.
virtual 은 각 file system layer 에의 상위에 위치하며 공통의 interface 를 user 단에 재공하여,
user 단에서 사용하고 있는 file system 에 상관없이 구현을 하도록 돕는 역할을 하고 있습니다.


< user space >
===========================================================
< kernel space >

-------------------------------
virtual file system
-------------------------------
file system (UBI, ext4, nfs, proc)
-------------------------------
physical file system
-------------------------------

간단히 요런 구조로 되어 있지요.

linux 는 file 기반의 운영체제 인지라, 매우- 빈번하게 파일을 access 하고 r, w 를 합니다.
따라서 virtual file system 은 굉장히 효율적인 구조를 가져야만 합니다.
전체 system 의 성능을 좌우하는 것은 cpu 속도와 더불어 file system 도 커다란 부분을 차지하고 있기 때문입니다.

이를 위해서 virtual file system 은 몇게의 구조체를 사용하고, 이를 linked-list 나 hash table 등으로 관리하며, slab allocator 등으로 메모리 관리를 합니다.

우선 주요 struct 들을 소개해 봅니다.


< super_block struct >
요 녀석은 nand 상에 phsical file system 의 파티션 마다 저장되어 있습니다.
따라서 dirty bit 가 있습니다.
(dirty bit 는 저장장치에 저장되어 있는 데이터를 ram 에 불러와서 사용할때 데이터 불일치가 생기면 setting 되는 bit 입니다.)
이 단위는 mount 단위와 일치한다고 생각하셔도 됩니다.
해당 파티션이 어느 file system 을 사용하는지 알 수 있습니다.

<i-node struct>
우리가 생각하는 각각의 파일들 마다 i-node 를 하나씩 가지고 있다고 생각하면 됩니다.
파일의 경로를 나타내는 dentry 에 연결되어 있습니다.
i_state 에 dirty state 가 있습니다.

< dentry struct >
폴더의 각 경로와 파일들 마다 dentry object 가 생성되며, 각 경로의 정보를 담고 있습니다.
slab allocator 에 의해 관리 됩니다.

< file object >
보통 file struct 에 대한 객체 이지만 어찌된 일인지 file object 로 더 자주 명시 됩니다.
효율을 위해 slab allocator 에 의해 관리되고 한 process 에서 file 에 access 하기 위해 접근할때 생성됩니다.
A process 와 B Process 가 동시에 접근한다면 각각의 file object 가 생성되게 됩니다.
이 file object 에는 각각의 process 에서 읽고 있는 fop 값등이 저장됩니다.

< files struct >
연결된 process 가 access 하고 있는 모든 file 들의 file object 에 대한 배열을 가지고 있습니다.


무척 간단하게 정리해 봤습니다.
사실 file system 에 대한 내용은 책 한권을 통해 서술해도 부족할 정도로 방대합니다.

이러한 각 struct 들간의 관계를 diagram 으로 정리해 보았습니다.





그림파일을 다운받을 수 있습니다.
제가 책을 보고 직접 그린것이기 때문에 잘못 그린 부분이 있을 수 있습니다.
댓글 남겨주시면 수정하도록 하겠습니다.

긴 시간을 들여서 작성한 자료 입니다.
사용은 자유이지만, 수정 및 재 배포시에 간단히 댓글로 남겨주시기 바랍니다.

이것은 여러 사람들과 국내 linux kernel 의 발전을 위해서 공개한 것입니다.
용도에 맞게 활용하시고 상업적 사용을 금지 합니다.