[OS] Chap15-05 : 파일 시스템 내부 구조_가상 파일 시스템
운영체제(Operating System Concepts) 를 읽고 정리한 정리본입니다.
📌 Chap15-05 : 파일 시스템 내부 구조_가상 파일 시스템
최신의 운영체제는 동시에 병렬로 여러 유형의 파일 시스템을 지원해야 한다.
그렇다면 어떻게 여러 유형의 파일 시스템을 하나의 디렉터리 구조로 통합할 수 있을까?
🫧 여러 유형의 파일 시스템 관리
여러 유형의 파일 시스템을 하나의 디렉터리 구조로 통합하는 방법은 유형별로 디렉터리와 파일 루틴을 작성하는 것이다. (객체지향 방식 채택)
각각의 파일 시스템에는 그에 걸맞는 함수가 존재한다.
같은 open()의 기능을 하는 함수라고 하더라도 사진처럼 ext2에서는 dquot_file_open()인 반면, ext4에서는 ext4_file_open() 함수이다.
이 말은 즉슨, 파일 시스템에 따라 달라지는 함수를 모두 기억하여 사용자가 일일이 호출해야 한다는 것이다.
그렇다면 이를 하나로 합칠 수 없을까?
그에 대한 해답이 바로 가상 파일 시스템(Virtual File System, VFS)이다.
실제 파일이 어느 파일 시스템에 속해 있는지 기억할 필요 없이 open(), close(), read()와 같이 통일된 함수로 사용할 수 있다면 사용자는 편리하게 파일 관련 함수를 사용할 수 있을 것이다.
✨ VFS (Virtual File System)
해당 그림에서 보이는 VFS 계층은 두 가지 중요한 기능을 제공한다.
- NFS를 통해 VFS 인터페이스를 명확하게 정의함으로써 파일 시스템의 일반적인 연산과 구현을 분리한다.
- 네트워크에 속한 모든 파일을 동일한 형태의 파일 객체로 표현해 준다.
2번 기능은 vnode라 불리는 파일 표현 구조에 기반을 두어 표현된다.
여기서 vnode는 네트워크 전체에서 유일한 파일에 대한 수치 지정자를 포함하는데, 한 파일 시스템 내에서만 유일한 UNIX의 inode와 달리 시스템 전체에서 유일하다는 특징을 갖고 있다.
🫧 Linux VFS
VFS 구조를 이루는 네 가지의 기본 객체 유형은 다음과 같다.
-
Inode object : 특정 파일과 관련된 정보를 담기 위한 구조체
-> VFS가 아이노드 객체를 생성하고 파일 시스템에 특정 파일에 대한 정보를 요청하면 파일 시스템은 자신이 관리하고 있는 파티션에서 파일의 메타데이터를 읽어 inode 객체를 채움
-> 두 개의 태스크가 한 개의 파일에 동시에 접근하더라도 물리적으로 한 개의 파일이므로 하나의 inode 객체만 생성된다. -
File object : 오픈 파일과 관련된 정보 관리
-> 열린 파일에 대한 각각의 정보 관리
-> 두 개의 태스크가 한 개의 파일에 오프셋을 통해 동시에 접근하는 경우, 두 개의 태스크에 대한 정보는 다를 것이다. 따라 각각 정보를 저장하는 파일 객체가 필요하다. -
Superblock object : 전체 파일 시스템을 나타냄
-> 현재 마운트된 파일 시스템 당 하나씩 존재 -
Dentry object : 각 디렉터리 엔트리를 나타냄
-> directory entry의 약자
-> 태스크가 파일에 접근하려면 해당 파일의 inode 객체를 파일 객체에 연결시켜야 하는데, 디엔트리 객체는 이것을 조금 더 빠르게 연결하기 위한 일종의 캐시 역할을 수행한다.
-> 경로 탐색은 오버헤드가 크므로 모든 경로들을 객체화시켜 갖고 있다면 빠르게 접근이 가능할 것이다.
VFS 소프트웨어 레이어는 이러한 파일 객체에 대한 구현 내용을 갖고서 해당 파일 객체에 대한 연산을 수행해야 할 경우, 적절한 함수를 함수 테이블에서 찾아 수행시킬 수 있다.
✨ VFS 동작원리 예시
a.txt 파일이 저장된 디스크의 한 파티션을 관리하고 있는 ext2에 읽기 요청을 하려는 태스크가 있다고 가정한다.
- 사용자 태스크가 read(“a.txt”…) 시스템 콜 호출
- VFS는 a.txt 파일이 어떤 파일 시스템에 속해 있는지 판단
- a.txt 정보를 담을 목적으로 구조체 생성 (Inode 객체)
- 이 구조체를 인자로 하여 ext2 파일 시스템 내부에 구현되어 있는 고유한 읽기 함수 호출
- ext2 자체의 관리 방법을 통해 요청된 파일 내용을 읽음
- 읽은 내용을 바탕으로 넘겨받은 구조체에 채워서 리턴
🫧 참고 자료
-
[VFS 1 - 가상 파일시스템(Virtual File System) jinh2352.log Velog](https://velog.io/@jinh2352/%EA%B0%80%EC%83%81-%ED%8C%8C%EC%9D%BC%EC%8B%9C%EC%8A%A4%ED%85%9CVirtual-File-System) -
[POSIX 알아보기 #2 : 가상 파일 시스템 VFS(Virtual Filesystem)의 의의와 동작 방식 Naver Cloud Medium](https://medium.com/naver-cloud-platform/posix-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-2-%EA%B0%80%EC%83%81-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C-vfs-virtual-filesystem-%EC%9D%98-%EC%9D%98%EC%9D%98%EC%99%80-%EB%8F%99%EC%9E%91-%EB%B0%A9%EC%8B%9D-fb752a0fb542)