引言
aix 5l? 是一种优秀的操作系统,它提供了出众的可伸缩性、可靠性和可管理性。它是市场上一些功能最强大的 ibm unix? 服务器的缺省操作系统。
通常,可以将文件系统 定义为一种软件,它负责对物理存储介质中的数据进行存储、组织和检索,物理存储介质包括硬盘驱动器、cd-rom 或者任何其他存储设备。从本质上说,用于进行这种数据组织的代码应该是可移植的。在现实世界中,尽管每个操作系统都提供了它自己的接口,以此请求特定的文件系统操作,并且期待软件基础部分以该操作系统所希望的格式返回结果。对于不同的操作系统,其接口也各不相同,并且需要由具体的文件系统提供,以使得特定的操作系统对该文件系统提供支持。
在本文中,您将了解 aix? 操作系统文件系统框架。您还将获得有关 io 层的概述,以及对一些重要概念的解释。本文还对在开发新的文件系统或者将现有的文件系统移植到 aix 操作系统时所使用的接口和方法进行了简单的说明。
与许多 unix 版本一样,aix 将文件系统作为一种内核扩展。本文假定您对 unix 编程和文件系统的概念有基本的了解。如果您还了解如何为 aix 编写内核扩展,那将是很有帮助的。
了解逻辑文件系统和虚拟文件系统
逻辑文件系统层是一个抽象层,用户可以通过它请求各种文件操作,如读、写、获得相关信息,等等。逻辑文件系统接口支持 unix 类型的文件访问语义。逻辑文件系统层是虚拟文件系统的超集,而后者封装了各种不同的文件系统,这些文件系统为内核提供了基础目录树的一致的视图。逻辑文件系统还负责管理内核的打开文件表和每个进程的文件描述符信息。
虚拟文件系统是基础物理文件系统的抽象。虚拟文件系统提供了一组应该支持的标准接口,以使得您的文件系统可用于 aix 操作系统。虚拟文件系统建立了不同的基础物理文件系统到逻辑文件系统之间的桥梁,为操作系统中的其他部分提供了一致的目录树层次结构。
文件系统对象的每个唯一的装入实例通过一个虚拟文件系统结构进行表示。虚拟文件系统可以为物理文件系统、网络文件系统、或者逻辑文件系统(没有物理后备存储,如 ramfs)。图 1 显示了 aix 文件系统的层次结构。
图 1. aix 文件系统层次结构
如清单 1 所示,由成员 vfs_next 指定,虚拟文件系统作为 struct vfs 的链表进行维护。
清单 1. 虚拟文件系统结构
struct vfs {
struct vfs *vfs_next;
struct gfs *vfs_gfs;
struct vnode *vfs_mntd;
struct vnode *vfs_mntdover;
struct vnode *vfs_vnodes;
int vfs_count;
caddr_t vfs_data;
unsigned int vfs_number;
int vfs_bsize;
#ifdef _sun
short vfs_exflags;
unsigned short vfs_exroot;
#else
short vfs_rsvd1;
unsigned short vfs_rsvd2;
#endif /* _sun */
struct vmount *vfs_mdata;
simple_lock vfs_lock;
};
列表中的每个条目代表一个装入的文件系统对象。
vfs_mntd vfs_mntd 表示这个文件系统在进行装入时的装入点 vnode。对于 '/' 根文件系统,这将是根的 vnode。 vfs_vnodes vfs_vnodes 是这个装入实例的所有 vnodes 组成的链表。 vfs_lock 您可以使用 vfs_lock 串行化对 vnode 的访问。 vfs_gfs vfs_gfs 指向对应的文件系统的 struct gfs 结构。
struct gfs 包含独立于这些装入实例的文件系统相关信息。它包含文件系统布局的所有常见特征,如下面的清单 2 所示。操作系统中注册的每个文件系统有且仅有一个 struct gfs、一个或多个 struct vfs,后者分别对应于每个装入实例。gfs_ops 和 gn_ops 是 struct gfs 中的重要成员,它们表示该文件系统的虚拟文件系统操作和 vnode 操作。您应该为该文件系统提供虚拟文件系统操作和 vnode 操作,以便能够得到 aix 操作系统的支持。
清单 2. gfs 结构
struct gfs {
struct vfsops *gfs_ops;
struct vnodeops *gn_ops;
int gfs_type;
char gfs_name[16">;
int (*gfs_init)(struct gfs *);
int gfs_flags;
caddr_t gfs_data;
int (*gfs_rinit)(void);
int gfs_hold;
};
vnode、gnode 和 inode
vnode 表示文件系统中打开的对象。每次试图创建或者打开一个文件时,将为该文件创建一个 vnode 对象。如果一个 vnode 已经存在,那么引用计数将递增。vnode 在虚拟文件系统中处于活动状态,直到最后的持有者离开,从而使得其引用计数变为 0。vnode 的主要任务是将路径名转换为基础文件系统中的一个物理对象。一个对象可以拥有多个路径名,如果:
文件系统使用不同的装入点进行多次装入。
存在到该对象的软链接或硬链接。
然而,试图打开匿名的路径不会创建多个 vnodes。一个 gnode 可以由多个 vnodes 引用,仅当文件系统存在多个装入实例时。对于任何给定的实例,至少有一个 vnode 引用 gnode。清单 3 显示了 vnode 结构。
清单 3. vnode 结构
struct vnode {
ushort v_flag;
ushort v_flag2;
ulong32int64_t v_count;
int v_vfsgen;
simple_lock v_lock;
struct vfs *v_vfsp;
struct vfs *v_mvfsp;
struct gnode *v_gnode;
struct vnode *v_next;
struct vnode *v_vfsnext;
struct vnode *v_vfsprev;
union v_data {
void * _v_socket;
struct vnode * _v_pfsvnode;
} _v_data;
char *v_audit;
如果喜欢开发 aix 文件系统请收藏或告诉您的好朋友.
阅读(166) | 评论(0) | 转发(0) |