发信人: liangvy()
整理人: hahalee(1999-03-26 15:07:54), 站内信件
|
(liangvy.icewolf.leon) 2。2 虚拟文件系统和v-node FreeBSD在disk上的除了ffs以外还可以操作各种各样的文件系统。主要的如 下: 。cd9660 可以对ISO9660形式的cd-rom的目录/文件构造的文件系统进行mount, locate等目录层的操作 。ms-dos 对ms-dos文件系统进行目录层次的mount,定位等操作 。mfs 通过使用虚拟内存对swap区的一部分进行unix文件系统的构造,定位 作为目录的一部分进行读写 。nfs 由nfs server提供的remote目录级进行mount,定位的目录层操作。 。null 对已经存在的目录层的使用别名 。union 对已有的目录A(上层)在下层目录B上进行重叠 (不大理解这的意思 ,大概是在下层目录里面又嫁接了上层目录的意思:译者)。文件名的查 找由上层优先进行。没有的话就转道下层。如果对下层的文件进行写操作 ,它的拷贝就在上层上进行。举例说明,作业目录在上层,但cd-rom的源 在下层,两个目录重叠,那么编译source的时候,就相当方便了。 。procfs 对于进程号的目录作成mount point。通过文件名对各个目录的进程进行 控制。 。kernfs 为了对动作中的kernel有关的信息进行参考,而作成的mount point 。fdesc 对于各个进程,用它所打开的文件柄对应的文件作成的mount point 实际上,在核心内部,为了对它们进行统一操作,就对文件系统和v-node 进行抽象化,实际的处理过程就是调用各类的文件系统的模块进行处理。
2。2。1对虚拟文件系统的操作 各个文件系统可以提供的操作的一览如下,它在struct vfsops (@sys/mount.h)里面定义: 。对文件系统进行mount的操作 。本文件系统的开始动作的操作 。本文件系统的umount操作 。表达文件系统的根的v-node的查找操作 。对一般用户的权限控制 。取得文件系统的状态 。内存内的管理信息写入介质中 。从i-node到v-node的取得操作 。v-node和nfs的文件柄的相互变换的操作 。文件系统实际的模块的初始化
对于文件系统,各个实际的操作routine在vfsops的形式提供准备工作。各个文件系 统的vfsops,在以下的表里的source进行定义:
-------------------------------------------------------------- file system vfsops的定义 source -------------------------------------------------------------- ufs ufs_vfsops ufs/ffs/ffs_vfsops.c cd9660 cd9660_vfsops isofs/cd9660/cd9660_vfsops.c msdos msdosfs_vfsops msdosfs/msdosfs_vfsops.c mfs mfs_vfsops ufs/mfs/mfs_vfops.c nfs nfs_vfsops nfs/nfs_vfsops.c null null_vfsops miscfs/nullfs/null_vfsops.c nuion union_vfsops miscfs/union/union_vfsops.c procfs procfs_vfsops miscfs/procfs/procfs_vfsops.c kernfs kernfs_vfsops miscfs/kernfs/kernfs_vfsops.c fdesc fdesc_vfsops miscfs/fdesc/fdesc_vfsops.c devfs devfs_vfsops miscfs/devfs/devfs_vfsops.c ext2fs ext2fs_vfsops gnu/ext2fs/ext2_vfsops.c lfs lfs_vfsops ufs/lfs/lfs_vfsops.c portal portal_vfsops miscfs/portal.portal_vfsops.c umap umap_vfsops miscfs/umapfs/umap_vfsops.c --------------------------------------------------------------- 这些就是文件系统的实际模块(*_vfsops.c),文件系统名称,文件系统号等等 在struct vfsconf(@sys/mount.h)里面汇总,各个模块里用宏VFS_SET()进入核 心。 根据main()(@kern/init_main.c),在kernel初始化的过程中,vfsinit() (@kern/vfs_init.c)里面有 struct vfsconf *vfsconf[MOUNT_MAXTYPE+1]; struct vfsops *vfssw[MOUNT_MAXTYPE+1]; 各种东西的设定,这些是,管理mount信息的struct mount(@sys/mount.h)的成员 mnt_vfc和mnt_op要指定所对应的文件系统的vfsconf,vfssw。还有宏VFS_操作名 (struct mount *,..)里,可以各个操作的调用。
2。2。2对v-node的操作 虚拟文件系统就是通过对i-node的抽象化之后的v-node的文件/目录进行io处理。 为了这个目的,作为对v-node的适用处理,有 。从v-node到文件名的查找,返回v-node 。打开/关闭v-node 。检查是否可能访问v-node 。得到-v-node的属性 。设定v-node的属性 。对v-node的输入/输出 。扩展v-node的硬连接和符号连接 。对v-node进行目录的作成和删除 。。。。 由这里开始,一共定义了41个。 v-node由struct vnode(@sys/vnode.h)里定义,作为类别在enum vtype 里面表示出来,一共是9种类。它包含着在各个文件系统上对各个的文件/目录(包 括特殊)文件进行统一识别的信息。为了实现这样,v-node一连串的操作就是在各 模块里通过宏VNODEOP_SET()和核心通讯。这些操作名和实现的routine只需要必要 的几个对应。在核心初始化里,vfs_opv_init()(@kern/vfs_init.c)就使从数据得 到的号码一一对应,收集了routine的地址的同一size的配列再进行组合。各个 v-node就一个一个指向这些配列。对v-node的操作在vnode_if.h里定义: 它以 VOP_操作名(v-node,...) 的统一形式记述。
下面是对v-node的操作的定义source: ------------------------------------------------------------------------ 各个v-node操作(vnodeopv) source ------------------------------------------------------------------------ cd9660_fifoop_opv_desc isofs/cd9660/cd9660_vnops.c cd9660_specop_opv_desc isofs/cd9660/cd9660_vnops.c cd9660_vnodeop_opv_desc isofs/cd9660/cd9660_vnops.c dead_vnodop_opv_desc miscfs/deadfs/dead_devfs_vnops.c devfs_vnodeop_desc miscfs/devfs/devfs_vnops.c ext2fs_fifoop_opv_desc gnu/ext2fs/ext2fs_vnops.c ext2fs_specop_opv_desc gnu/ext2fs/ext2fs_vnops.c ext2fs_vnodeop_opv_desc gnu/ext2fs/ext2fs_vnops.c fdesc_vnodeop_opv_desc miscfs/fdesc/fdesc_vnops.c ffs_fifoop_opv_desc ufs/ffs/ffs_vnops.c ffs_specop_opv_desc ufs/ffs/ffs_vnops.c ffs_vnodeop_opv_desc ufs/ffs/ffs_vnops.c fifo_nfsv2nodeop_opv_desc nfs/nfs_vnops.c fifo_vnodeop_opv_desc miscfs/fifofs/fifo_vnops.c kernfs_vnodeop_opv_desc miscfs/kernfs/kernfs_vnops.c lfs_fifoop_opv_desc ufs/lfs/lfs_vnops.c lfs_specop_opv_desc ufs/lfs/lfs_vnops.c lfs_vnodeop_opv_desc ufs/lfs/lfs_vnops.c mfs_vnodeop_opv_desc ufs/mfs/mfs_vnops.c msdosfs_vnodeop_opv_desc msdosfs/msdosfs_vnops.c nfsv2_vnodeop_opv_desc nfs/nfs_vnops.c null_vnodeop_opv_desc miscfs/nullfs/null_vnops.c portal_vnodeop_opv_desc miscfs/portal/portal_vnops.c procfs_vnodeop_opv_desc miscfs/procfs/procfs_vnops.c spec_nfsv2nodeop_opv_desc nfs/nfs_vnops.c spec_vnodeop_opv_desc miscfs/specfs/spec_vnops.c umap_vnodeop_opv_desc miscfs/umapfs/umap_vnops.c union_vnodeop_opv_desc miscfs/union/union_vnops.c ------------------------------------------------------------------------ 这个基础上,spec_vnodeop_opv_spec里描述的操作群就是device driver interface的东西!!
( 本小节完,待本岛主有空再继续:-) ) liangvy.icewolf.leen --
-- ※ 来源:.网易 BBS bbs.netease.com.[FROM: www2.dt.sanyo.co.jp]
|
|