VFS 의 인덱스 노드

5413 단어 linuxvfs
파일 시스템 처리 파일 에 필요 한 모든 정 보 는 색인 노드 라 는 데이터 구조 에 놓 여 있 습 니 다.파일 이름 은 수시로 변경 할 수 있 지만 색인 노드 는 파일 에 유일한 것 이 며 파일 의 존재 에 따라 존재 합 니 다.색인 노드 를 사용 하 는 이 유 는 다음 장 에서 더 소개 할 것 입 니 다. 여 기 는 주로 한 가 지 를 강조 합 니 다. 구체 적 인 파일 시스템 의 색인 노드 는 디스크 에 저 장 된 것 이 고 정적 구조 입 니 다. 이 를 사용 하려 면 메모리 에 넣 고 VFS 의 색인 노드 를 작성 해 야 합 니 다. 따라서 VFS 색인 노드 는 동적 노드 라 고도 부 릅 니 다.VFS 색인 노드 의 데이터 구조 inode 는 / includ / fs / fs. h 에서 다음 과 같이 정의 합 니 다 (2.4. x 버 전).
 
 struct inode
{
   /**********              ****************/
 struct list_head        i_hash;  /*         */
 struct list_head        i_list;  /*           */
 struct list_head        i_dentry;/*          */
     
 struct list_head        i_dirty_buffers;
 struct list_head        i_dirty_data_buffers;
 /**********        ****************/  
   unsigned long   i_ino;            /*     */
   kdev_t      i_dev;           /*      */
  umode_t      i_mode;         /*           */
  nlink_t      i_nlink;         /*             */
   uid_t       i_uid;            /*        */
   gid_t       i_gid;             /*            */
      kdev_t          i_rdev;           /*       */
   off_t       i_size;            /*     (      )*/
   unsigned long   i_blksize;        /*   */
   unsigned long   i_blocks;         /*       */
  time_t       i_atime;          /*         */
   time_t      i_mtime;         /*         */
   time_t      i_ctime;          /*       */ 
   unsigned long   i_version;        /*   */
  struct semaphore   i_zombie;   /*          */
 
/***********          *****************/
struct inode_operations  *i_op;  /*       */
struct super_block   *i_sb;     /*              */
    atomic_t     i_count;     /*           。   0,
               */
  struct file_operations  *i_fop;  /*          */
 
   unsigned char      i_lock;            /*        ,       */  
 struct semaphore     i_sem;            /*              */    
 wait_queue_head_t   *i_wait;         /*             */              
 unsigned char           i_dirt;         /*           ,     ,
                                     */
struct file_lock        *i_flock;      /*           */
struct dquot            *i_dquot[MAXQUOTAS]; /*         */
/************        **********************************/ 
struct address_space    *i_mapping; /*              */
     struct address_space    i_data;   
 
/**********           ****************************************/
   struct list_head        i_devices;   /*         */
   struct pipe_inode_info  i_pipe;     /*      */
   struct block_device     *i_bdev;   /*          */
   struct char_device      *i_cdev; /*           */
 
/*************************   ***************************************/
unsigned long           i_dnotify_mask; /* Directory notify events */
struct dnotify_struct   *i_dnotify; /* for directory notifications */
 
unsigned long           i_state;    /*         */
unsigned int            i_flags;    /*         */
unsigned char           i_sock;     /*           */
atomic_t                i_writecount; /*        */
unsigned int            i_attr_flags; /*      */
__u32                   i_generation  /*        */
/*************************             ********************/
union;                             /*            ,             fsname_inode_info     */                                                                             
}

 
inode 데이터 구조 에 대한 추가 설명
·      파일 마다 inode 가 있 습 니 다. inode 마다 색인 절 포인트 i 가 있 습 니 다.ino。같은 파일 시스템 에서 모든 색인 절 점 호 는 유일 하 며, 커 널 은 색인 절 점 호의 해시 값 에 따라 inode 구 조 를 찾 을 때 도 있 습 니 다.
·      모든 파일 에는 파일 주인 이 있 습 니 다. 최초의 파일 주 는 이 파일 을 만 든 사용자 이지 만 나중에 바 꿀 수 있 습 니 다.모든 사용 자 는 하나의 사용자 그룹 이 있 고 특정한 사용자 그룹 에 속 하기 때문에 inode 구조 에 해당 하 는 i 가 있 습 니 다.uid,i_gid, 파일 주인의 신분 을 가리 키 기.
·      inode 장치 번호 가 두 개 있 습 니 다. idev 와 irdev。우선, 특수 파일 을 제외 하고 모든 노드 가 특정한 장치 에 저장 되 어 있 습 니 다. 이것 이 바로 i 입 니 다.dev。그 다음 에 색인 노드 가 대표 하 는 것 이 일반적인 파일 이 아니 라 특정한 장치 라면 장치 번호 가 있어 야 합 니 다. 이것 이 바로 i 입 니 다.rdev。
·      파일 이 접근 할 때마다 시스템 은 이 파일 의 inode 에 시간 표 시 를 기록 해 야 합 니 다. 이것 이 바로 inode 에서 시간 과 관련 된 몇 개의 도 메 인 입 니 다.
·      모든 색인 노드 는 파일 이 사용 하 는 디스크 블록 과 같은 디스크 색인 노드 에 포 함 된 데 이 터 를 복사 합 니 다.하면, 만약, 만약...stat e 역 의 값 은 IDIRTY, 이 색인 노드 는 '더러 운' 것 입 니 다. 즉, 해당 하 는 디스크 색인 노드 는 반드시 업데이트 되 어야 합 니 다.i_stat e 역 의 기타 값 은 ILOCK (이 색인 노드 대상 에 잠 금 이 추가 되 었 음 을 의미 합 니 다), IFREENG (이 색인 노드 대상 이 풀 려 나 고 있 음 을 의미 합 니 다).모든 색인 노드 대상 은 다음 순환 양 방향 링크 의 특정한 링크 에 나타 납 니 다.
(1) 색인 노드 링크 를 사용 하지 않 았 습 니 다.변수 inodeunused next 도 메 인  prev 필드 는 각각 이 링크 의 첫 번 째 요소 와 끝 요 소 를 가리 키 고 있 습 니 다.이 링크 는 메모리 캐 시 로 사용 된다.
(2) 색인 노드 링크 를 사용 하고 있 습 니 다.변수 inodein_use 는 이 링크 의 첫 번 째 요소 와 끝 요 소 를 가리킨다.
(3) 더러 운 색인 노드 링크.해당 슈퍼 블록 의 sdirty 도 메 인 은 이 링크 의 첫 번 째 요소 와 끝 요 소 를 가리 키 고 있 습 니 다.
이 세 개의 링크 는 모두 색인 노드 를 통과 하 는 i 이다.list 도 메 인 이 연결 되 어 있 습 니 다.
·      '사용 중' 또는 '더러 운' 링크 에 속 하 는 색인 노드 대상 도 inode 라 고 합 니 다.hashtable 링크 중.해시 표 는 색인 노드 대상 에 대한 검색 을 가속 화 시 켰 다. 전 제 는 시스템 커 널 이 색인 절 번호 와 해당 하 는 파일 시스템 의 슈퍼 블록 대상 의 주 소 를 알 아야 한 다 는 것 이다.해시 기술 이 충돌 을 일 으 킬 수 있 기 때문에 색인 노드 대상 은 i 를 설정 합 니 다.hash 도 메 인 은 앞 과 뒤로 두 개의 지침 을 포함 하고 같은 주소 로 흩 어 진 앞의 색인 노드 와 뒤의 색인 노드 를 가리킨다.이 도 메 인 은 이 색인 노드 로 구 성 된 양 방향 링크 를 만 들 었 습 니 다.
 
    색인 노드 와 관련 된 방법 도 색인 노드 조작 이 라 고 하 는데 inodeoperations 구조 로 설명 합 니 다. 이 구조의 주 소 는 i 에 저 장 됩 니 다.p 도 메 인 에서 이 구 조 는 파일 작업 방법 을 가리 키 는 지침 도 포함 되 어 있 습 니 다 (다음 절 '파일 대상' 참조).

좋은 웹페이지 즐겨찾기