VFS四大对象之一 struct super_block

linux虚拟文件系统四大对象:

1)超级块(super block)

2)索引节点(inode)

3)目录项(dentry)

4)文件对象(file)

现在先介绍第一个

一、super_block的含义:

超级块代表了整个文件系统,超级块是文件系统的控制块,有整个文件系统信息,一个文件系统所有的inode都要连接到超级块上,可以说,一个超级块就代表了一个文件系统。

说到inode是啥?

 1 struct super_block {
 2     struct list_head    s_list;        /* Keep this first */
 3     dev_t            s_dev;        /* search index; _not_ kdev_t */
 4     unsigned char        s_dirt;
 5     unsigned char        s_blocksize_bits;
 6     unsigned long        s_blocksize;
 7     loff_t            s_maxbytes;    /* Max file size */
 8     struct file_system_type    *s_type;
 9     const struct super_operations    *s_op;
10     const struct dquot_operations    *dq_op;
11     const struct quotactl_ops    *s_qcop;
12     const struct export_operations *s_export_op;
13     unsigned long        s_flags;
14     unsigned long        s_magic;
15     struct dentry        *s_root;
16     struct rw_semaphore    s_umount;
17     struct mutex        s_lock;
18     int            s_count;
19     atomic_t        s_active;
20 #ifdef CONFIG_SECURITY
21     void                    *s_security;
22 #endif
23     const struct xattr_handler **s_xattr;
24
25     struct list_head    s_inodes;    /* all inodes */
26     struct hlist_bl_head    s_anon;        /* anonymous dentries for (nfs) exporting */
27 #ifdef CONFIG_SMP
28     struct list_head __percpu *s_files;
29 #else
30     struct list_head    s_files;
31 #endif
32     struct list_head    s_mounts;    /* list of mounts; _not_ for fs use */
33     /* s_dentry_lru, s_nr_dentry_unused protected by dcache.c lru locks */
34     struct list_head    s_dentry_lru;    /* unused dentry lru */
35     int            s_nr_dentry_unused;    /* # of dentry on lru */
36
37     /* s_inode_lru_lock protects s_inode_lru and s_nr_inodes_unused */
38     spinlock_t        s_inode_lru_lock ____cacheline_aligned_in_smp;
39     struct list_head    s_inode_lru;        /* unused inode lru */
40     int            s_nr_inodes_unused;    /* # of inodes on lru */
41
42     struct block_device    *s_bdev;
43     struct backing_dev_info *s_bdi;
44     struct mtd_info        *s_mtd;
45     struct hlist_node    s_instances;
46     struct quota_info    s_dquot;    /* Diskquota specific options */
47
48     int            s_frozen;
49     wait_queue_head_t    s_wait_unfrozen;
50
51     char s_id[32];                /* Informational name */
52     u8 s_uuid[16];                /* UUID */
53
54     void             *s_fs_info;    /* Filesystem private info */
55     unsigned int        s_max_links;
56     fmode_t            s_mode;
57
58     /* Granularity of c/m/atime in ns.
59        Cannot be worse than a second */
60     u32           s_time_gran;
61
62     /*
63      * The next field is for VFS *only*. No filesystems have any business
64      * even looking at it. You had been warned.
65      */
66     struct mutex s_vfs_rename_mutex;    /* Kludge */
67
68     /*
69      * Filesystem subtype.  If non-empty the filesystem type field
70      * in /proc/mounts will be "type.subtype"
71      */
72     char *s_subtype;
73
74     /*
75      * Saved mount options for lazy filesystems using
76      * generic_show_options()
77      */
78     char __rcu *s_options;
79     const struct dentry_operations *s_d_op; /* default d_op for dentries */
80
81     /*
82      * Saved pool identifier for cleancache (-1 means none)
83      */
84     int cleancache_poolid;
85
86     struct shrinker s_shrink;    /* per-sb shrinker handle */
87
88     /* Number of inodes with nlink == 0 but still referenced */
89     atomic_long_t s_remove_count;
90
91     /* Being remounted read-only */
92     int s_readonly_remount;
93 };

这个数据结构十分庞大,毕竟是聚集了一个文件系统的重要信息,我们关注一些比较重要的信息就行了。

1 struct list_head    s_list;

s_list 这是第一个成员,是一个双向循环链表,把所有的super_block连接起来,一个super_block代表一个在linux上的文件系统,这个list上边的就是所有的在linux上记录的文件系统。

1 dev_t s_dev;

s_dev:设备标识符

1 unsigned char        s_dirt;
2 unsigned char        s_blocksize_bits;
3 unsigned long        s_blocksize;
4 loff_t            s_maxbytes;    /* Max file size */

s_dev:包含该具体文件系统的块设备标识符。例如,对于 /dev/hda1,其设备标识符为 0x301

s_blocksize:文件系统中数据块大小,以字节单位

s_blocksize_bits:上面的size大小占用位数,例如512字节就是9 bits

s_dirt:脏位,标识是否超级块被修改

1 loff_t            s_maxbytes;    /* Max file size */

s_maxbytes:允许的最大的文件大小(字节数)

1 struct file_system_type    *s_type;

struct file_system_type *s_type:文件系统类型(也就是当前这个文件系统属于哪个类型?ext2还是fat32)要区分“文件系统”和“文件系统类型”不一样!一个文件系统类型下可以包括很多文件系统即很多的super_block。

1 const struct super_operations    *s_op;
2 const struct dquot_operations    *dq_op;

struct super_operations *s_op:指向某个特定的具体文件系统的用于超级块操作的函数集合。

struct dquot_operations *dq_op:指向某个特定的具体文件系统用于限额操作的函数集合。

1 const struct quotactl_ops    *s_qcop;

struct quotactl_ops     *s_qcop:用于配置磁盘限额的的方法,处理来自用户空间的请求。

1 const struct export_operations *s_export_op;

struct export_operations *s_export_op:导出方法

1 unsigned long        s_flags;

s_flags:安装标识

1 unsigned long        s_magic;

s_magic:区别于其他文件系统的标识

1 struct dentry        *s_root;

s_root:指向该具体文件系统安装目录的目录项

1 struct rw_semaphore    s_umount;

s_umount:对超级块读写时进行同步

1 struct mutex        s_lock;

s_lock:锁标志位,若置该位,则其它进程不能对该超级块操作

1 int            s_count;

s_count:对超级块的使用计数

1 atomic_t        s_active;

s_active:引用计数

s_dirty:已修改的索引节点inode形成的链表,一个文件系统中有很多的inode,有些inode节点的内容会被修改,那么会先被记录,然后写回磁盘。

s_locked_inodes:要进行同步的索引节点形成的链表

s_files:所有的已经打开文件的链表,这个file和实实在在的进程相关的

s_bdev:指向文件系统被安装的块设备

u:u 联合体域包括属于具体文件系统的超级块信息

s_instances:具体的意义后来会说的!(同一类型的文件系统通过这个子墩将所有的super_block连接起来)

s_dquot:磁盘限额相关选项

Reference:

http://www.linuxidc.com/Linux/2011-02/32127.htm

http://blog.csdn.net/shanshanpt/article/details/38943731

时间: 2024-10-10 02:49:10

VFS四大对象之一 struct super_block的相关文章

VFS四大对象之三 struct dentry

继上一篇文章介绍了inode结构体:继续介绍目录项dentry: 三.dentry结构体 目录项:目录项是描述文件的逻辑属性,只存在于内存中,并没有实际对应的磁盘上的描述,更确切的说是存在于内存的目录项缓存,为了提高查找性能而设计.注意不管是文件夹还是最终的文件,都是属于目录项,所有的目录项在一起构成一颗庞大的目录树.例如:open一个文件/home/xxx/yyy.txt,那么/.home.xxx.yyy.txt都是一个目录项,VFS在查找的时候,根据一层一层的目录项找到对应的每个目录项的in

程序启动原理(四大对象)

程序启动四大对象(UIApplication,AppDelegate) 一.UIApplication 1.什么是UIApplication? •UIApplication对象是应用程序的象征 •每一个应用都有自己的UIApplication对象,而且是单例的 •通过[UIApplication sharedApplication]可以获得这个单例对象 •一个iOS程序启动后创建的第一个对象就是UIApplication对象 •利用UIApplication对象,能进行一些应用级别的操作 2.U

四大对象

四大对象: 1.UIApplication 2.AppDelegate 3.UIWindow 4.UIViewController

UI之四大对象讲解

UI程序的运行过程 1.首先进入main 函数 2.执行 UIApplicationMain 函数 * 创建UIApplication对象 * 创建UIApplication的delegate对象 3(.没有storyboard)delegate对象开始处理(监听)系统事件 * 程序启动完毕的时候, 就会调用代理的didFinishLaunchingWithOptions:方法 * 在didFinishLaunchingWithOptions:中创建UIWindow * 创建和设置UIWindo

【程序启动四大对象】UIWindow

A.UIWindow概念 1.继承UIView,是一种特殊的UIView 2.通常一个APP只有一个UIWindow 3.iOS程序启动后,创建的第一个视图就是UIWindow 4.没有UIWindow,不能显示任何东西 B.使用 1.创建一个Empty Application项目 没有了storyboard,要手动实现UIWindow的创建代码(其实这就是storyboard做的事情) 1 // 手动创建UIWindow,并加到screen上 2 self.window = [[UIWindo

info.plist、pch和四大对象(UIApplication、UIApplicationDelegate、UIWindow、UIViewController)

本文目录 1.程序配置文件info.plist,全局头文件pch 2.应用程序对象UIApplication介绍 3.UIApplicationDelegate介绍,程序启动过程 4.UIWindow对象 5.程序界面显示出来的过程 6.总结程序启动完整过程 -1.程序配置文件info.plist,全局头文件pch 1.程序配置文件info.plist,全局头文件pch 回到顶部 工程的配置中Info选项里面的内容实际上是info.plist文件里面的内容的拷贝,info.plist里面存放了许

【程序启动四大对象】UIApplicationDelegate & 程序启动过程

A.概念 1.移动app非常容易受到其他的系统.软件事件的干扰,如来电.锁屏 2.app受到干扰的时候,UIApplication会通知delegate,来代理处理干扰事件 3.delegate可以处理的事件 (1)app声明周期(启动.关闭) (2)系统事件(来电) (3)紧急事件(内存警告) B.使用 称为delegate的条件:遵守UIApplicationDelegate协议 项目开始会自动创建:AppDelegate 1.delegate方法 1 - (BOOL)application

四大对象种类

BeautifulSoup将复杂的html文档转换成一个复杂的树形结构,每个节点都是python对象,所有的对象可归纳为4种 1.tag tag是什么,通俗点讲,就是html中的一个标签例如 <title>The Dormouse's story</title> <a class='sister' herf='http://example.com/elsie' id = 'link1'>Elsie</a> 上面的title,a等等html标签加上里面包括的内

jsp四大对象

发送参数: <a href="deal.jsp?id=1&user=用户&pwd=">处理页</a> 接收参数: <% String id = request.getParameter("id"); String user = request.getParameter("user"); String pwd = request.getParameter("pwd"); String