操作系统概念学习笔记 第十二章 文件系统实现

文件系统提供了在线存储和访问包括数据和程序在内的文件内容的机制。

 

 

文件系统结构

  磁盘的两个特点,使其成为存储多个文件的方便媒介:

    1 可以原地重写;可以从磁盘上读一块,修改该块,并将它写回到原来的位置

    2 可以直接访问磁盘上的任意一块信息,可以方便地按顺序或随机地访问文件

  为了改善I/O效率,内存与磁盘之间的I/O转移是以块为单位而不是以字节为单位来进行的。

  为了提供对磁盘的高效且便捷的访问,操作系统通过文件系统来轻松地存储、定位、提取数据。

  文件系统本身通常由许多不同的层组成:

    1 逻辑文件系统:

      管理元数据,元数据包括文件系统的所有结构数据,不包括实际数据,逻辑文件系统根据跟定符号文件名来管理目录结构,并提供给文件组织模型所需要的信息。通过文件控制块来维护文件结构。

    2 文件组织模块:

      知道文件及其逻辑块和物理块

    3 基本文件系统:

      只需要向适合的设备驱动程序发送一般命令就可对磁盘上的物理块进行读写。

    4 I/O控制:

      由设备驱动程序和中断处理程序组成,实现内存和磁盘之间的信息转移。

 

 

文件系统实现

  概述;

    实现文件系统要使用多个磁盘和内存结构,

    磁盘结构包括:

      1 引导控制块:

        包括系统从该分区引导操作系统所需要的信息,如果没有操作系统,那么这块为空,通常为分区的第一块

        UFS称之为引导块,NTFS称之为分区引导扇区

      2 分区控制块:

        包括详细信息,如分区的块数、块的大小、空闲块地数量和指针、空闲FCB的数量和指针

        UFS(unix文件)称之为超级块,而NTFS称之为主控文件表

      3 目录结构用来组织文件

      4 FCB包括很多文件信息,如文件许可、拥有者、大小和数据块的位置。UFS称之为索引节点。NTFS将这些信息存在主控文件表中,主控文件采用关系数据库结构,每个文件一行。

    内存信息用于文件系统管理和通过缓存来提高性能。这些结构包括:

      1 内存分区表包含所有安装分区的信息

      2 内存目录结构用来保存近来访问过的目录信息

      3 系统范文的打开文件表包括每个打开文件的FCB拷贝和其他信息

      4 单个进程的打开文件表包括一个指向系统范围内已打开文件表中适合条目和其他信息的指针

  分区与安装:

    分区可是没有文件系统或者含有文件系统

    引导信息能存在各个分区中,它有自己的格式,因为在引导时系统并没有文件系统设备驱动程序,所以并不能解释文件系统格式。

    引导信息通常为一组有序块,并作为二进制文件读入内存

    根分区包括操作系统内核或其他系统文件,在引导时装入内存

  虚拟文件系统

    现代操作系统必须同时支持多个文件系统类型

    采用数据结构和子程序,可以分开基本系统调用的功能和实现细节:

      第一层:

        文件系统接口,包括open、read、write和close调用及文件描述符

      第二层:

        虚拟文件系统层,两个目的:

          1 VFS层通过定义一个清晰的VFS接口,以将文件系统通用操作和具体实现分开

          2 VFS是基于称为vnode的文件表示结构,该结构包括一个数值指定者以表示位于整个网络范围内的唯一文件

 

 

 

目录实现:

  目录分配和管理算法的选择对文件系统的效率、性能和可靠性有很大影响。

  线性列表:

    最为简单的目录实现方法是使用存储文件名和数据块指针的线性列表。

    目录条目的线性列表需要采用线性搜索来查找特定条目。编程简单但运行费时。

  哈希表:

    哈希表根据文件名得到一个值,并返回一个指向线性列表中元素的指针。降低目录搜索时间,插入和删除也较简单,不过需要一些预备措施来避免冲突。哈希表最大困难是其通常固定的大小和哈希函数对大小的依赖性。

 

 

 

分配方法:

  如何为这些文件分配空间,以便有效地使用磁盘空间和快速地访问文件。

  常用的磁盘空间分配方法有三个:连续、链接和索引

  连续分配:

    要求每个文件在磁盘上占有一组连续地块。一些问题:为新文件找到空间,外部碎片,确定一个文件需要多少空间

    修正的连续分配方案:开始分配一块连续空间,当空间不够时,另一块被称为扩展的连续空间会添加到原来的分配中。

  链接分配:

    解决了连续分配的所有问题。采用链接分配,每个文件是磁盘块的链表,磁盘块分布在磁盘的任何地方。

    目录包括文件的第一块指针和最后一块指针。

    链接分配不能有效地支持文件的直接访问。另一缺点是指针需要空间。

    常用解决方法是将多个块组成簇,并按簇而不是按块来分配

    变种:文件分配表,

  索引分配:

    把所有指针放在一起:索引块

    每个文件都有其空闲的索引块,这是一个磁盘块地址的数组。

    索引块地大小:

      1 链接方案:将多个索引块链接起来

      2 多层索引:

      3 组合方案:直接块和间接块

  性能

 

 

空闲空间管理

  空闲空间链表:记录了所有空闲磁盘空间

  位向量:

    空闲空间表实现为位图或位向量。每块用一位表示。空闲为1.分配为0

  链表:

    将所有空闲磁盘块用链表连接起来,并将指向第一空闲块地指针保存在磁盘的特殊位置,同时也缓存在内存中。

  组:

    将n个空闲块的地址存在第一个空闲块中,

  计数:

    记录第一块的地址和紧跟第一块的连续的空闲块的数量n

 

 

 

效率与性能:

  效率:

    磁盘空间的有效使用主要取决于所使用的磁盘分配和目录管理算法

  性能:

 

 

 

恢复:

  必须注意确保系统失败不会引起数据丢失和数据的不一致性。

  一致性检查:

    一致性检查程序:将目录结构数据与磁盘数据块相比较,并试图纠正所发现的不一致。

  备份与恢复:

 

 

基于日志结构的文件系统:

  面向事务的基于日志的文件系统。

    所有元数据都按顺序写到日志上。

 

 

NFS

    

    

posted @ 2013-10-06 10:44  褐色键盘  阅读(233)  评论(0)    收藏  举报