가상 파일 시스템은 다양한 파일 시스템들의 인터페이스 역할을 하는 개념이다.
예를 들면, 파일 시스템은 xfs, ext4, fat32 등 다양하게 한 시스템 내에 공존할 수 있는데, 서로 다른 파일 시스템에 대한 표준(?)적인 인터페이스가 없으면 개발 시 파일 접근에 대해 각각 다르게 코드가 작성되어야 한다.
VFS가 서로 다른 파일 시스템들을 커널 계층해서 추상화해주는 역할을 한다. VFS가 있기 때문에 open(), write() 같은 동일한 시스템 콜로 통일해서 사용할 수 있다.
VFS를 구성하는 4가지 개념
1. Super Block
- 특정 파일 시스템 전체에 대한 정보를 담고 있다. (크기, 마운트 정보 등...)
2. Inode
- 특정 파일에 대한 메타 데이터를 담고 있다. (크기, 소유자, 권한 등...)
- 파일의 실제 이름은 없지만, 데이터가 실제로 어디에 저장되어 있는지 알고 있다.
3. Dentry
- Directory Entry, 파일 이름과 Inode를 연결해주는 역할을 한다.
4. 파일 객체 (File Object)
- 프로세스가 파일을 실제 열었을 때 생성되는 객체로, 현재 읽고 있는 위치 같은 정보를 담고 있다.
리눅스 root 디렉토리에 /proc과 /sys에서 /proc는 현재 실행중인 프로세스 정보나 시스템 리소스들, /sys는 하드웨어 장치나 드라이버 정보 같은 데이터들을 파일로 보여준다.
그런데 이 데이터들은 실제로 "메모리"에 위치해 있고 이를 해당 디렉토리에 파일로 띄워주는 것인데, 이 또한 VFS를 이용하여 메모리에 있는 데이터들을 파일처럼 보여주는 대표적인 예시이다.