file system

§ Filesystems are a collection of files that are stored in the system in some way
§ So many file system!
 
Disk file:
§ Boot block
§ Super block
Magic number
Revision
Mount count and Maximum Mount count
Block Group number
Block size
Block per Group
Free Blocks //need sync to disk
Free inodes //need sync to disk
First inode /
§ Index(GDT)
Block bitmap
inode bitmap
Inode table
VFS:
§ abstraction layer on top of a more concrete file system
Sys_read, sys_write, sys_open,
§ interface
File_operations
Dentry
File name (sub directory), parent directory,
File tree
6 list_head:
d_vfsmnt
d_hash    dentry_hashtable
d_lru        dentry_unused
d_child patent->d_subdirs
d_subdirs sub->dentry
d_alias
Inode
Files information
File type, atime, mtime, link numer, length, ACL, location
Dentry:
§struct dentry { /*include/linux/dcache.h*/
§ atomic_t d_count;
§ unsigned int d_flags;
§ struct inode  * d_inode;  /* Where the name belongs to - NULL is negative */
§ struct dentry * d_parent; /* parent directory */
§ struct list_head d_hash; /* lookup hash list */
§ struct list_head d_lru; /* d_count = 0 LRU list */
§ struct list_head d_child; /* child of parent list */
§ struct list_head d_subdirs; /* our children */
§ struct list_head d_alias; /* inode alias list */
§ int d_mounted;
§ struct qstr d_name;
§ unsigned long d_time; /* used by d_revalidate */
§ struct dentry_operations  *d_op;
§ struct super_block * d_sb; /* The root of the dentry tree */
§ unsigned long d_vfs_flags;
§ void * d_fsdata; /* fs-specific data */
§ unsigned char d_iname[DNAME_INLINE_LEN]; /* small names */
§};
Super block:
  2   struct   super_block   {  
  3           struct   list_head   s_list;   /*   Keep   this   first   */  
  4           dev_t   s_dev;                                   /*   search   index;   _not_   kdev_t   */  
  5           unsigned   long   s_blocksize;                       // 数据块大小  
  6           unsigned   char   s_blocksize_bits;               // 块大小占用的位数  
  7           unsigned   char   s_dirt;                           // 脏位,如果该位置位,说明超级块被修改  
  8           unsigned   long   long   s_maxbytes;                  // 单个文件最大体积  
  9           struct   file_system_type   *s_type;               // 文件系统结构  
10           struct   super_operations   *s_op;                   // 超级块支持的操作
11         struct dquot_operations *dq_op;             //
12           struct   quotactl_ops   *s_qcop;                   // 用户配额限制
13         struct export_operations *s_export_op;        //
14  
15           unsigned   longs_flags;  
16           unsigned   long   s_magic;                           // 区块的 magic
17           struct   dentry   *s_root;                           // 根目录
18         struct rw_semaphore s_umount;                 //
19         struct mutex s_lock;                         //
20         int s_count;                                 //
21         int s_syncing;                                 //
22         int s_need_sync_fs;                         //
23           atomic_t   s_active;                               // 是否活动
24         void *s_security;                             //
25         struct xattr_handler **s_xattr;                //
26
27           struct   list_head   s_inodes;                      // 所有 inode  
28           struct   list_head   s_dirty;                       // inode  
29           struct   list_head   s_io;                          // 用于写回的缓存  
30           struct   hlist_head   s_anon;                       //nfs 匿名入口  
31           struct   list_head   s_files;                      // 文件链表头
32  
33           struct   block_device   *s_bdev;  
34           struct   list_head   s_instances;  
35           struct   quota_info   s_dquot;                       // 配额定制选项
36  
37           int   s_frozen;                      
38         wait_queue_head_t s_wait_unfrozen;
39  
40           char   s_id[32];                                  // 名字
41  
……
Lookup file:
§ Path_init
initialize nameidata (struct)
§ Path_walk
Calculate name hash(H), hast_table(H),
i_hash_next, i_hash_prev
Cached_lookup() hit dentry cache
real_lookup() miss dentry cache
d_alloc()
Ext2_lookup/ext3_lookup/ ……
Xxx_find_entry()
iget()
Read Record block from HDD/SDD (Buffer head)
Open/read/write….
§ Sys_open/read/write
§ Path_init/path_walk
§ Page cache list
Radix tree
Page virtual address
page cache
Struct inode > ext2/…_inode
Address_space
Clean_pages
Dirty_pages
Locked_pages
§ Virtual page
Buffer_head
§ Buffer cache
LRU
SLAB cache
Submit_bh->submit_bio
BIO
Kflushd
§ Page mapping
Mmap()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值