Skip to content

파일시스템

  • VFS(Virtual FileSystem)는 시스템콜이 파일시스템이나 물리적 매체 종류에 상관없이 공통적으로 동작할 수 있도록 해주는 인터페이스다.

  • 파일시스템 추상화 계층은 모든 파일시스템이 지원하는 기본 인터페이스와 자료구조를 선언한 것이다.

  • VFS는 슈퍼블록(superblock), 아이노드(inode), 덴트리(dentry), 파일(file) 4가지 객체로 구성돼있다.

    • 슈퍼블록: 파일시스템을 기술하는 정보(+ file_system_type, vfsmount 구조체)를 저장한다.
    • 아이노드: 파일이나 디렉토리를 관리하는 데 필요한 모든 정보를 저장한다.
    • 덴트리: 디렉토리 경로명 속 각 항목의 유효성 정보 등을 저장한다.
    • 파일: 메모리 상에 로드 된 열려있는 파일에 대한 정보를 저장한다. 한 파일은 여러 프로세스에서 동시에 열고 사용할 수 있기 때문에, 같은 파일에 대해 여러 개의 파일 객체가 있을 수 있다.
  • 각 객체들에는 여러 함수들이 들어있는 동작(operation) 객체가 멤버변수로 들어있다.

    • super_operation 객체에는 write_inode(), sync_fs() 같이 특정 파일시스템에 대한 함수가 들어있다.
    • inode_operation 객체에는 create(), link() 같이 특정 파일에 대한 함수가 들어있다.
    • dentry_operation 객체에는 d_compare(), d_delete() 같이 디렉토리에 대한 함수가 들어있다.
    • file_operation 객체에는 read(), write() 같이 열린 파일(프로세스)에 대한 함수가 들어있다. 표준 유닉스 시스템콜의 기초가 되는 익숙한 함수들이 들어있다.
  • **프로세스 관련 자료구조 **

    • 프로세스는 task_struct 구조체로 관리한다.
    • task_structfiles_struct 구조체를 멤버변수로 가지고 있는데, 여기에 열려 있는 파일(프로세스)에 대한 세부 정보가 저장된다.
    • files_struct<linux/fdtable.h>에 정의되어있다.

참고