안녕하세요 허언증입니다.
1. 가상 파일시스템(VFS - Virtual FileSystem)란??
파일시스템이 저장장치 내의 파일을 체계적으로 관리해주는 역할을 하는 것은 어느정도 이해가 됐다. 그렇다면 이런 경우를 생각해보자. 어떤 우분투 PC에 USB를 꼽고 그 안에 파일을 넣는 작업을 할 때 우리는 어떠한 불편함도 느끼지 않는다. 하지만 가만히 생각해보면 그 둘은 다른 파일시스템을 사용하고 있으며, 각 파일시스템은 파일 관리방법과 읽기, 쓰기의 방식이 모두 다르다. 그러나 우리는 이러한 일들을 아무런 어려움 없이 해낸다. 이러한 일을 가능하게 해주는 것이 가상 파일시스템(이하 VFS)이다. 설명을 하기전에 위 그림을 확인해 보자.
VFS의 정의는 '파일시스템 관련 인터페이스를 사용자 공간 어플리케이션에 제공하는 커널 서브시스템'이다. 그림을 보면 어느정도 이해가 될 것이다. VFS는 다양한 파일시스템들이 공존할 수 있도록 공통된 인터페이스를 제공해준다. 즉 open(), read(), write() 등의 시스템콜을 호출했을 때, 각 파일시스템이나 물리적 매체의 종류와 상관없이 동작하게 해주는 역할을 한다.
위의 그림은 사용자 공간에서 write()라는 시스템 콜이 발생했을 때, 실제 디바이스까지 어떻게 전달되는지를 보여준다. 1. 사용자가 write() 시스템 콜을 호출한다. 2. VFS는 sys_write() 함수를 호출하여 실제 파일시스템의 쓰기 함수를 호출된다. 3. 실제 파일시스템의 쓰기 함수가 실행된다. 4. 물리적 장치에 쓰여진다. 위와 같은 순서로 VFS는 사용자가 write()라는 함수를 호출해도 자체적으로 파일시스템에 알맞는 함수를 호출하여 쓰기를 진행하기 때문에 사용자는 연결된 파일시스템이 어떤 것이냐를 신경쓰지 않고도 읽고 쓰기를 자유롭게 할 수 있는 것이다. 이러한 추상화 기능을 제공하는 계층을 파일시스템 추상화 계층이라고 한다. 그렇다면 리눅스에서는 이러한 파일시스템을 추상화하기 위해서 어떤 구조를 사용하고 있을까? VFS의 주요한 네 가지 객체는 슈퍼블록(SuperBlock), 아이노드(Inode), 덴트리(Dentry), 파일(File)이 있다. 아래에서 자세하게 알아보자.
2. 슈퍼블록(SuperBlock)이란?
우선 블록을 도입한 이유는 블록 단위가 아닐 시 컴퓨터시스템은 디스크에 0또는 1의 데이터를 저장하는데 이를 한 비트마다 관리하면 오버헤드도 크고 관리가 안 되기 때문이다. 이제 이 블록 마다 고유번호를 부여한다. 하지만 사용자가 어떤 데이터를 몇 번 째 디스크 블록에 저장했는지 기억 할 수 없으므로 추상적 객체가 필요하게 되었다. 데이터를 관리하기 위해선 해당 번호의 위치를 알수 있는 알고리즘을 사용해야 한다. 슈퍼블록은 각 파일시스템별로 구현하며, 본질적인 파일시스템 메타데이터이다. 여기에는 파일시스템의 유형과 크기, 상태, 다른 메타데이터 구조체(아이노드 등)의 정보가 들어있다. 슈퍼블록은 매우 중요하기 때문에 복사본을 여러 곳에 저장해 놓기도 한다. 슈퍼블록의 구조는 inode 총수 와 블록 총수 빈 블록수 빈 inode 수 사용가능한 최초 블록 번호 와 블록 크기, 마지막 마운트 시간 마지막 쓰기 시간 매직번호 9가지로 구성이 되어있다. 슈퍼블록은 Inode와 달리 절대값이라고 생각하면 된다. Inode는 데이터의 순서에 대한 정보를 담고 있고, 하나의 파일시스템에 대한 모든 정보를 총괄하고 담고 있기 때문에 가장 핵심 블록이라고 생각하면된다.
'# OS > [ Linux ]' 카테고리의 다른 글
[허언증/리눅스] 프로세스 U-area/proc table 이란? (feat. linux) (0) | 2020.04.02 |
---|---|
[허언증/리눅스] System Call 이란? (feat. linux) (2) | 2020.03.24 |
[허언증/리눅스] Linux 네임서버 구축 (DNS서버) (0) | 2020.03.13 |
[허언증/리눅스] Linux 네임서버 개념 및 구조 (DNS서버) (0) | 2020.03.13 |
[허언증/리눅스] 캐싱 전용 네임 서버 설치 및 접속 (linux) (0) | 2020.03.12 |