• VFS(Virtual File System)



  • VFS의 역할 및 구조


    - VFS가 지원하는 파일 시스템
      디스크 기반 파일 시스템
      : 로컬 디스크 파티션의 기억 장소 또는 디스크를 흉내내는 몇 가지 다른 장치(USB 플래시 드라이브 같은)를 관리
      : Ext2, Ext3, Ext4, MS-DOS, FAT, NTFS, SYSV 등
      네트워크 파일 시스템
      : 네트워크로 연결된 다른 컴퓨터의 파일 시스템을 쉽게 접근가능하게 함
      : NFS(Network File System), AFS(앤드류 파일 시슽엠) 등
       
     ■ 특수 파일 시스템
      : /proc 파일 시스템, /tmp 파일 시스템 등
      

  • VFS 메커니즘
    - 공통 파일 모델 (Common File Model)

     : VFS의 핵심 개념은 지원하는 모든 파일 시스템을 표현할 수 있는 공통 파일 모델을 도입 하는 것
     : 각각의 특정 파일 시스템을 구현 하려면 반드시 자신의 물리적인 구성을 VFS의 공통 모델로 변환해야 함
     -> 예를 들어 몇몇 비 유닉스 계열의 디스크 기반 파일 시스템은 각 파일의 위치를 저장한 파일 할당 테이블(FAT)를 사용 -> 이런 파일 시스템에서 디렉토리는 파일이 아님
     -> VFS의 공통 파일 모델을 따르도록 하기 위해 실행 중에 디렉토리에 대응 하는 파일을 생성, 이렇게 생성한 파일을 커널 메모리 객체에 만듦
     => 공통 파일 모델을 구현하기 위한 자료구조(object)
       : 슈퍼 블록 객체, 아이노드 객체, 파일 객체, 디엔트리 객체

    - 프로세스와 VFS 객체의 상호작용
     

    - 공통 파일 모델 객체
     ■ 슈퍼 블록 객체
      : 마운트 된 파일 시스템에 대한 정보를 저장, 전체 파일 시스템을 나타냄
     ■ 아이노드 객체
      : 특정 파일에 대한 일반 정보를 저장. 디스크에 저장한 파일 제어 블록 (FCB, 리눅스에서는 아이노드)에 대응, 각 아이노드 객체에는 아이노드 번호가 할당)
     ■ 파일 객체
      : 열린 파일과 프로세스 사이의 상호 작용과 관련한 정보를 저장. 각 프로세스가 열린 파일을 가지는 동안 커널 메모리에만 존재
     ■ 디엔트리 객체
      : 디렉토리 항목(특정 파일 이름과 아이노드)과 이에 대응하는 파일의 연결에 대한 정보를 저장.

    - VFS 디엔트리 캐시

     : 가장 최근에 사용한 디엔트리 객체를 저장하는 디스크 캐시

     ∴ 디스크 캐시?
      : 보통 디스크에 저장하는 정보 중 일부를 램에 저장하여 이후 정보에 접근할때 더 느린 디스크에 접근하지 않고 빨리 처리하도록 하는 소프트웨어 메커니즘
      : 이렇게 함으로써 파일 경로명을 공려명의 마지막 구성요소인 파일 아이노드로 변환하는 속도를 높임

     ∴ 리눅스의 디스크캐시

      : 디엔트리 캐시, 아이노드 캐시, 페이지 캐시

    - VFS의 시스템 콜 처리 루틴
     

     : 애플리케이션이 read() 시스템 콜 호출 -> 커널은 해당하는 sys read() 호출
     : 커널 메모리 안에 있는 파일 객체의 f op 필드에 타겟 파일 시스템의 해당 함수 처리 루틴이 포인터로 존재
     : read() -> sys_read() -> vfs_read() -> (file->f_op) -> MS-DOS read()

      ■ open() 시스템 콜 메커니즘

       : open() 시스템 콜 -> sys_open() 시스템 콜이 성공하면 파일 객체에 대한 포인터 배열인 current->files->fd 의 인덱스를 반환
       : sys_open() 함수의 동작
       ① fd 반환

       ② 파일 객체의 주소 반환

       ③ f_op 필드를 대응하는 아이노드 객체의 i_fop 필드 내용으로 설정 -> 파일 연산을 위한 메소드 설정 종료

       ④ 탐색된 디엔트리 객체와 마운트된 파일 시스템 객체 등으로 파일 객체 할당

       ⑤ 접근 모드 플래그를 매개변수로 경로명 탐색 시작

       ⑥ 빈 파일 디스크립터 번호를 지역 변수에 저장

       ⑦ 프로세스 주소 공간에서 파일 경로명을 읽음

     

    - VFS가 처리하는 시스템 콜
     



'Major > Linux' 카테고리의 다른 글

리눅스 - 디바이스 드라이버  (2) 2016.02.15
리눅스 - Ext4 File System  (0) 2016.02.01
리눅스 - 파일 디스크립터  (7) 2016.01.28
리눅스 - 파일 시스템  (0) 2016.01.28
리눅스 - System Call  (0) 2016.01.28

+ Recent posts