Chinaunix首页 | 论坛 | 博客
  • 博客访问: 82660
  • 博文数量: 19
  • 博客积分: 580
  • 博客等级: 中士
  • 技术积分: 187
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-25 09:03
文章分类

全部博文(19)

文章存档

2011年(9)

2010年(9)

2009年(1)

我的朋友

分类: LINUX

2011-01-12 20:29:29

虚拟文件系统(超级块)
    虚拟文件系统所隐含的思想是把表示很多不同种类文件系统的共同信息放入内核;其中有一个字段或函数来支持Linux所支持的所有实际文件系统所提供的任何操作。
    VFS描述文件系统使用超级块和inode的方式,所谓超级块就是对所有文件系统的管理机构,每种文件系统都要把自己的信息挂到super_blocks这么一个全局链表上。内核中是分成2个步骤完成:
  1. 首先每个文件系统必须通过register_filesystem函数将自己的file_system_type挂接到file_systems这个全局变量上,
  2. 然后调用kern_mount函数把自己的文件相关操作函数集合表挂到super_blocks上。每种文件系统类型的读超级块的例程(get_sb)必须由自己实现。
   
    文件系统由子目录和文件构成。每个子目录和文件只能由唯一的inode描述。inode是Linux管理文件系统的最基本单位,也是文件系统连接任何子目录、文件的桥梁。VFS inode的内容取自物理设备上的文件系统,由文件系统指定的操作函数(i_op属性指定)填写。VFS inode只存在于内存中,可通过inode缓存访问。 Linux即支持多种类型的文件系统,又保持极高的时空性能,究其原因,在于各种复杂缓存的作用。比如inode 缓存。随着文件的读入和写出,这些文件的inode构成一条链表。一般,通过对inode链表的线形搜索,可以找到任一表示某设备上一个文件或子目录的inode。从效率方面,VFS为已分配的inode构造缓存和hash表。
 
2.5 网络协议栈各部分初始化
    协议栈本身的初始化这部分在2.6早期和后期是不太一样的,早期的是通过函数直接调用的方式,后期更加依赖于使用init.h中定义的初始化宏来进行,即放入特定的代码段去执行。所以再次强调关于内核镜像研究的重要性。我们先给出初始化大致的顺序,大家记住这个顺序就对初始化有关全局的了解:
  1. core_initcall:sock_init 
  2. fs_initcall:inet_init
  3. subsys_initcall:net_dev_init
  4. device_initcall:设备驱动初始化
2.5.1 网络基础系统初始化
    core_initcall初始化宏修饰sock_init函数,这个宏指定了sock_init函数放在级别为1的代码段中,也就是说它的执行是最先进行的一部分。此函数只是分配一些内存空间,以及创建了一个sock_fs_type的文件系统。在do_basic_setup中调用sock_init先于Internet 协议注册被调用,因为基本的socket初始化必须在每一个TCP/IP成员协议能注册到socket层之前完成。
 
阅读(1228) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~