Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

101258
1323
114603


[리눅스커널] 가상 파일시스템이란? 13. Virtual Filesystem

가상 파일시스템이란 무엇일까요? ext4나 proc과 같은 파일시스템일까요? 가상 파일시스템은 ext4나 proc과 같은 파일시스템은 아닙니다. 리눅스 커널에서 다양한 파일시스템이 공존하며 동적으로 실행할 수 있는 가상 소프트웨어 계층입니다. 

참고로, ext4는 Extended File System 4 약자로 리눅스 저널링 파일시스템입니다.
라즈베리파이에서 특정 파일을 생성해서 쓰고 저장할 때 ext4 파일시스템이 해당 파일을 관리합니다.

가상 파일시스템이란 용어 자체가 리눅스 커널을 처음 접하는 분에게 혼돈을 줄 수 있으니 이 용어에 대해 조금 더 짚어 봅시다. 가상이란 용어는 객체 지향에서 말하는 추상화와 유사한 개념입니다. 추상화 계층(Abstraction Layer)은 소프트웨어를 전체 구조를 설계할 때 쓰는 기법입니다. 특정 모듈의 상세한 기능을 숨기고 인터페이스 용으로 선언된 특정 함수로만 다른 계층과 인터페이싱하는 방법입니다.

소프트웨어 구조 관점으로 가상 파일시스템을 생각해봅시다. 
가상 파일시스템은 파일시스템 위에 있는 계층으로 파일시스템 계층에 접근하기 전 실행합니다. 파일시스템을 관리할 수 있는 공통 자료구조(슈퍼블록 객체, 아이노드 객체, 파일 객체, 덴트리 객체)로 파일시스템 속성을 관리하며 함수 오퍼레이션을 써서 파일시스템별 세부 함수를 호출합니다.

다음 그림을 보면서 가상 파일시스템 계층에 대해 생각해 봅시다.
 

위 그림은 유저 공간과 커널 공간에서 가상 파일시스템 계층을 표현합니다. 시스템 콜 일부분을 예로 들었습니다.

가상 파일시스템은 open(), write(), read() 함수를 유저 어플리케이션에서 호출하면 시스템 콜 실행으로 다양한 파일 시스템에 접근할 수 있는 소프트웨어 계층입니다. 이 중에는 실제 파일 시스템이 제공하는 각 연산을 지원하기 위한 필드나 함수가 있습니다. open(), read() 그리고 write() 함수들이 호출되면 각각 파일시스템별로 구현된 함수를 호출합니다. 

가상 파일시스템(Virtual File System)은 파일시스템 인터페이스를 사용자 어플리케이션에 제공하고 모든 파일시스템은 가상 파일시스템을 통해 접근 가능합니다. 또한 open(), write(), read() 함수와 같이 리눅스 표준 저수준 함수를 써서 파일에 접근하니 유저 어플리케이션 입장에서는 리눅스 커널에 파일 시스템이 하나인 것처럼 느낄 수 있습니다.

가상 파일시스템을 적용하면서 얻게 되는 특징은 다음과 같습니다.
첫째, 새로운 파일시스템을 적용해도 유저 어플리케이션나 디바이스 드라이버 코드는 호환성을 유지하며 개발할 수 있습니다. 가상 파일시스템에서 추상화 인터페이스를 지원하기 때문입니다.

둘째, 유저 어플리케이션에서 open(), write() 함수를 호출하면 시스템 콜이 실행되고 가상 파일 시스템 계층을 접근합니다. 대부분 가상 파일시스템 계층에서 제공하는 함수는 vfs_xxx() 형태입니다.


"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

Thanks,
Austin Kim(austindh.kim@gmail.com)


Reference(가상 파일시스템)

가상 파일시스템 소개
파일 객체
파일 객체 함수 오퍼레이션 동작
프로세스는 파일객체 자료구조를 어떻게 관리할까?
슈퍼블록 객체
아이노드 객체
덴트리 객체
가상 파일시스템 디버깅


핑백

덧글

댓글 입력 영역