跑道图片:linux文件的操作 流程

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 20:35:54
linux文件的操作 流程在 VFS中,用户程序(epic.)在进行文 件操作时 的过程是这样 的 :首 先调 用 open()函数 来建 立 一个和具体文 件的链接 ,这个链接首 先是通过 目录入 IZI缓 存(Denu'ycache)将一个路径转 换为特 定的 dentry的参 数。而 dentry再通过 指针和磁盘 上的 Inode节点联系(在 VFS中任何一个 已经安装的文件都有 自己的一个 对应的 Inode),从而确定要查找的 文件。为 了快速 查找 文件。IJnux中采用两级 缓冲 机制 ,一 种 是管 理层面 上的缓 冲,体现 在文 件 目录项 和记录文 件名到文件的物理 地址 的对应关 系。另一 层面 的缓冲 是软 件层面的缓冲 ,主要是为 了提高查找速度。在 VFS的安装(mount)结构中,所有安装过的文件都被串联在一个 mount—hash表中,如果有同名文件再进行 二级 hash,以便于快速地查找文件,每个 dentry都有一个 指 向其父 目录 dentry的指针 ,一个子 dentry的哈希列表,子 dentry基本上就是 目录中的文件。当一个 mount请求出现时,VFS将会为特定的文件系统调用相应的方法 。安装点的 dentry结构将会被改 为指向新文 件系统的根 Inode节点 ,当 VFS要 在一个 父 目录 中查找一个 Inode节点时调用 。若待查找的文件名在 dentry中 ,必须调用 d-add函数把 找到 的 INODE节点插入到 dentry中,haode节点 的“i count”域要加一 。若指定的 lnode节点不存在的话 ,一个 NUH 的 In0de节 点指针将被插 入到 dentry中去[2](这种情况 的 dentry被称为 negativedentry)。当VFS打开一个文 件时,它建立一个新的 struetfile结构 ,并用 Inode节点 中的“default—file—ops”来初始 化其 中的 f—op域 ,然后 对新分配 的文件结构 调用 open方法 [21。从某种意 义上来说 ,open方法 实际上届于 st:n.1etinode—operations。2.2 文件 的访 问与设备控制在 VFS中,文件 目录的访 问是完全 动态的,同一物理 空间可 以 n-tgtmt到 不同 的 目录 上。此外 ,VFS的超级块是 一个双 向链表 ,它定义 了一个文件的原型,提供 了一个信 息组 织的模型 或者 叫规 范 (作者 自己的看法 ),使其他文 件结构按要求组 织到文 件系统 中。IJnux通过 安装 一个文 件系统将该 新文 件 系统 加入 到它 的文件系统 树 中。所有文件 系统 ,不管是什么类型 ,都安装在文件 系统树的一个 目录 上并 且文件系统之上的文件将覆盖掉这个安装 目录 中原来存在的 内容。这个 目录称 之为安装 目录或安 装点 。当文件 系统被卸掉之后 ,安 装 目录的原有文件才再次可见。每一个安装 了的文 件系统都 被一个 VFSsuperbloek所表示 ,在其 信息 之 中,VFSsuperblock包 含设备(DEVICE),这是此文 件系统所依赖的块设备的设备 标识符 。例如 ,/dev/hadl,系统中的 IDE硬盘 有 一个 标识 符 0x301。inode指针 motmtedinode指针指 向这个文 件系统 的 inode。所有的 linux文件系统使用相 同的缓冲区缓 存(bufercache)机制来 缓冲来 自底层 的数据 ,这个 机制 使得文件系统对物理数据存储设备 的存取得 到加快 。这个 缓冲 区是独 立于 文件 系统的,被集 成入 IJnux核心机制 中用来分配和读 写缓 冲 区…。这个 机制 的最 大特 点是 它 的 Linux文 件 系统独 立于 底层 的物理 介质,独立于设备 的驱动程序 。当真实 的文件系统 要从底层物理设备读取数据时 ,其结果 是触 发一个块设备驱动程序向他们控制的设备发 出读物理块的请求 ,集成在设备接 El里 的就 是缓冲 区缓存。 当文件 系统读入数据块以后,它们被存放在这个全局的缓冲区缓存中,被文件系统和 Linux核心所共享。在其内的缓冲区数据通过块号码和对应于其设备 的标识符被 系统唯一标识 。因此 ,如果同样的数据经常需 要被使用 ,数据将从缓冲 区缓存 被检索而非从磁盘读入 。