가장 많이 본 글

2014년 10월 6일 월요일

리눅스 커널 심층 분석 - 13장, 가상 파일시스템

VFS(Virtual File system) 
    크게 가지로 구분됨 
    • Disk-based filesystems 
    • Network filesystems 
      • NFS, SMB  
    • Special filesystems (also called virtual filesystems) 
      • /proc /dev 같은  
  • The first Virtual Filesystem was included in Sun Microsystems's SunOS in 1986. Since then, 
most Unix filesystems include a VFS. 
  • linux 모든 종류의 file system 지원하지만 빌드 config 세팅을 해줘야 . 
VFS 객체와 자료구조 
  • file system 
    • data 특정 구조체에 담는 계층적인 저장소로, tree 구조임. 
    • 통상적으로 생성, 삭제, 마운트를 . 
    • 유닉스의 file system namespace라는 전역 계층 구조에 mount. 
    • 윈도우는 드라이브(ex. C:\) 나뉜 namespce 파일을 저장함. --> 방법은 HW 세부 사항이 드러나 추상화를 없음! 
  • struct file 
    • byte 정렬된 문자열 
    • 번째 byte 파일의 시작, 마지막 byte 파일의 끝을 나타냄. 
    • 파일 동작은 읽기/쓰기, 생성/삭제가 있음. 
    • open() 호출시 생성, close() 호출시 소멸 
    • 메모리에 생성 
    • 다수 생성 가능. 
  • directory 
    • linux에서는 일종의 file 취급함. 
    • super block/ inode 등의 data 정보를 disk 따로 보관함. 
VFS 객체와 자료구조 
  • 추상적인 개념 가지: file system 객체지향적임 
    • super block struct 
      • 마운트된 파일시스템을 표현, file system 전체에 대한 정보를 담고 있는 자료 구조. 
      • mount, kernel 디스크에 연결 고리를 만들어 주는 것을 말함. 
      • 하드디스크를 물리적으로 연결하면 /dev/sdb라고 디바이스가 연결된다. 하지만 것은 디바이스에 물리적으로 접근한다는 것이지 파일 시스템을 본다는 것이 아니다. 그래서 mount 하면 file system으로 인식을 하게 되는 것이다. 
      • sysfs 같은 디스크가 아닌 파일 시스템의 경우에는 가상으로 실시간으로 슈퍼블록을 생성해서 메모리에 저장함. 
      • 수퍼 블록 구조체의 연결 관계는 다음과 같다. 
      • 이미지
      • <linux/fs.h> struct super_block 
      • 멤버인 struct super_operations s_op 

    • inode struct: 
      • file 관련 정보 
      • <linux/fs.h> struct inode 
      • 멤버인 struct inode_operations 
      • inode 파일 시스템의 파일을 나타낸다. 
      • inode 객체를 생성하면 memory에서만 생성됨. 
      • 디스크에 저장된 file system 정보를 갖는다. 
      • dev_t i_rdev: [12bit(주번호), 20bit(부번호)] 

    • dentry struct 
      • 파일을 포함한 경로를 구성하는 요소. 디렉토리는 아니고 파일의 특별한 형태임 
      • <linux/dcache.h> struct dentry 멤버인 struct dentry_operations d_op 
      • 디스크 상에 저장하지 않는다. 대신 inode 해당하는 dentry 메모리에 생성됨. 
      • 사용자가 접근하면 캐시에 넣어두고 나중에 접근할 것을 대비해 폐기하지 않는다. 
      • open() syscall 존재하지 않는 dir 지속적으로 호출하면 메모리 확보를 위하여 폐기함. 
      • dentry 다음과 같이 엮여있다 
      • 이미지
      • task_struct fs file system 말하는 것이고 files task open file descriptor. 
      • 예를 들면 다음 /dev/SK 호출하는 과정이다. 
      • 이미지
      • inode kmem_cache 이용하여 할당함. 
    • file struct 
      • 프로세스가 사용하는 열린 파일 표현, open 해야 생김. 
      • struct inode 멤버 struct file_operations i_fop 
  • 이미지
  • 유닉스 시스템은.. 
    • 접근 권한, 크기, 생성시간 등의 파일 관련 정보(메타데이터) inode(index node)라는 자료구조에 따로 보관함. 
  • 주요 struct 
    • file_system_type: 등록된 파일 시스템 
    • vfsmount: 마운트 지점 
    • fs_struct 
    • file 
수퍼블록 객체 / operations 
참고사항 

댓글 없음: