가상 파일 시스템 (VFS)
-
그럼 태스크는 어떻게 파일 시스템에 접근하는가 사용자 태스크들은
open(),
read(), write(), close()` 등의 시스템 호출을 사용해 파일 시스템에 접근하려 할 것이다. -
그럼 거꾸로 파일 시스템은 어떤 함수를 구현하여 상위 계층에 제공해줘야할까? 이는 구현하기 나름인데 파일 시스템 자체는 특정 운영체제에 구애 받지 않고 (심지어 운영체제가없는 상황에서도) 동작 가능한 독립적인 구조로 설계되고 구현되어야 한다.
-
이를 위해서 파일 시스템 설계자들은 나름대로의 철학을 가지고 다양한 구현을 할 것이다. 하지만 대부분의 파일 시스템 설계자들은 나름 대로운 철학을 가지고 다양한 구현을 할 것이다. 하지만 대부분의 경우 사용자 태스크는 POSIX 표준 시스템 호출을 이용하면 파일 시스템을 이용할 수 있을 것이라 가정하기 때문에 파일 시스템은 외부로 함수를 제공할 때 이를 고려 해야한다.
-
각각의 파일 시스템마다 제공하는 API 함수가 있고 제각각 조금씩 다를 것이다. 따라서 사용자가 이를 일일히 구분해서 사용하는 것은 귀찮은 일이므로, 리눅스에서는
VFS
를 제공하여 일관된 인터페이스로 조작할 수 있도록 만들어준다. -
바로 이러한
VFS
를 통해서 리눅스에서 다양한 파일 시스템을 지원하는 것이 가능해졌다. 예를 들면, 기존 유닉스 파일 시스템인 UFS, 리눅스 기본 파일 시스템인 EX3, 네트워크 파일 시스템인 NFS 작은 스기에 좋은 성능을 제공하는 LFS, CMU에서 개발하였으며disconnect
연산 기능을 제공하는CODA
CD
를 위한iso9660
윈도우 NT 파일시스템등 매우 다양한 파일 시스템을 제공한다. -
또한 커널의 내부 상태를 볼 수 있는
proc
파일 시스템, 장치를 통합 관리하는sysfs
등의 특별한 파일 시스템도 지원한다. -
따라서 사용자 태스크는 자신이 접근하는 파일이 어느 파일 시스템에 저장되어 있는지 굳이 알 필요가 없이 일관된
POSIX
표준 인터페이스만을 사용하는 것이 가능해진다. 조금 다르게 말하면 사용자 태스크는VFS
라는 가상적인 ‘파일시스템’만을 알고 있으면 충분하다. -
따라서 사용자 태스크 입장에서 본다면
VFS
는 가상적이긴 하지만 실제 접근을 하게되는 ‘파일시스템’인 것이다.
참고 문헌
>> Home