一、Linux下文件系统的注册、安装和卸载:
1、文件系统的注册和注销:
Linux系统支持的文件系统类型由一个单链表存放,我们要安装一个文件系统,首先应该填写一个file_system_type的数据结构,并把它加入到该单链表中,这就是文件系统的注册。文件系统只有在注册后才能被系统认识。注册一个文件系统需要用到register_filesystem()函数。注销一个文件系统则需要调用unregister_filesystem()函数。
文件系统的注册有两种方式:一是文件系统被编译成模块,在模块加载的时候,会调用初始化函数init_filesysname_fs(),该函数会调用register_filesystem()函数。二是没有被编译成模块,只能调用register_filesystem()注册。
该过程用到的数据结构:
1743 struct file_system_type {
1744 const char *name;
1745 int fs_flags;
1746 int (*get_sb) (struct file_system_type *, int,
1747 const char *, void *, struct vfsmount *);
1748 void (*kill_sb) (struct super_block *);
1749 struct module *owner;
1750 struct file_system_type * next;
1751 struct list_head fs_supers;
1752
1753 struct lock_class_key s_lock_key;
1754 struct lock_class_key s_umount_key;
1755
1756 struct lock_class_key i_lock_key;
1757 struct lock_class_key i_mutex_key;
1758 struct lock_class_key i_mutex_dir_key;
1759 struct lock_class_key i_alloc_sem_key;
1760 };
这里我们主要关心的是get_sb函数。它是一个回调函数,用以创建并设置super_block。
2、文件系统的安装:
在Linux平台,文件系统需要被安装后才能使用。根文件系统是在系统引导的时候被安装。其他的通过下列方式进行安装:
* 通过命令行安装:
mount -t filesysname 设备文件 安装点
设备文件是值包含文件系统的设备所对应的文件名路径,安装点是文件系统的挂载点。
* 通过系统调用:
可通过函数:
sys_mount()
Linux文件系统的安装其实主要做了以下工作:
1、创建了一个vfsmount数据结构。
2、创建设备的dentry和inode。
3、给vfsmount中指向根设备dentry和根安装点dentry的指针赋值。
4、创建一个superblock,并对其赋值。
3、文件系统的卸载:
使用sys_umount()卸载。
如果文件系统中的文件有被使用,则不能被卸载;如果没有被引用,则查看super_block中的标志是否为脏,如果为脏,则将super_block信息写回磁盘。
释放super_block,将vfsmount从链表中删除并释放。
阅读(998) | 评论(0) | 转发(0) |