Chinaunix首页 | 论坛 | 博客
  • 博客访问: 294191
  • 博文数量: 56
  • 博客积分: 3025
  • 博客等级: 中校
  • 技术积分: 534
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-06 17:28
个人简介

Honesty and diligence should be your eternal mates.

文章分类

全部博文(56)

文章存档

2012年(1)

2011年(27)

2010年(20)

2008年(8)

分类: LINUX

2010-11-24 16:46:52

一、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) |
给主人留下些什么吧!~~