• 第 10 章 文件系统及实现


      文件系统由两个部分组成:文件集合,每个文件存储相关数据;目录结果,用于组织系统内的所有文件并提供文件信息。

    10.1 文件概念

      操作系统对存储设备的物理属性加以抽象,从而定义逻辑存储单位,即文件(file)。文件由操作系统映射到物理设备上。

    文件属性

      因操作系统而异。通常包括:名称、标识符、类型、位置、尺寸、保护、时间、用户标识。

    文件操作

      创建、写入、读取、重定位、删除、截断(删除文件内容,但保留属性)

    文件类型

      ...

    10.2 访问方法

      顺序访问

      直接访问

    10.3 目录与磁盘的结构

      文件系统的每个设备都有内容的卷表或设备的目录,以列出设备上文件的位置。另外,创建目录允许组织文件。

      单级目录:容易导致命名问题,因为每个文件必须具有唯一的文件名称。

      两级目录:通过为每个用户创建单独的目录以包含文件。

      树形目录:允许用户创建子目录,来组织文件。

      无环图目录:允许共享子目录和文件,但是是的搜索和删除变得更为复杂。

      ...

    10.4 文件系统结构

      文件系统提供高效和便捷的磁盘访问,以便允许轻松存储、定位、提取数据。文件系统永久驻留在外存上。

      文件系统通常按分层或模块化结构来实现。较低层处理存储设备的物理属性,较高层处理文件的符号名称和逻辑属性,中间层将逻辑文件概念映射到物理设备属性。

      ...

    10.5 分配方法

      如何为这些文件分配空间,以便高效快速的使用和访问文件。磁盘空间分配的三个主要常用方法:连续、链接、索引。

    10.5.1 连续分配

      要求每个文件在磁盘上占有一组连续的块。磁盘地址为磁盘定义了一个线性排序。有了这个排序,假设只有一个作业正在访问磁盘,在块 b 之后访问块 b+1 通常不用移动磁头。当需要磁头移动时(从一个柱面的最后扇区移动到下一个柱面的第一个扇区),只需要移动一个磁道。

      因此,用于访问连续分配文件的所需寻道数量最小,在确实需要寻道时所需的寻道时间也最小。

      但也有问题,一个难题是为新文件寻找空间。会有外部碎片产生。

    10.5.2 链接分配

      解决了连续分配的所有问题。采用链接分配,每个文件是磁盘块的链表,磁盘块可以散布在磁盘的任何地方。目录包括文件第一块和最后一块的指针。每一块都有下一块的指针。  

      要创建一个新文件,只需在目录中增加一个新的条目。采用链接分配,每个目录条目都有文件首个磁盘块的一个指针,初始值为null,大小字段为0。写文件导致空闲空间管理系统找到一个空闲块,这个块会被写入并链接到文件的尾部。读文件只需按照链接指针来读块。

      没有外部碎片。缺点是,主要问题它只能有效用于顺序访问文件。磁盘寻道时间增大。不能支持文件的直接访问。另一个是可靠性,当指针丢失或损坏时,会产生错误。

      它的一个重要变种是文件分配表(File-Allocation Table,FAT)。在该表中,每个磁盘块都有一个条目,并且可按块号来索引。FAT的使用和链表系统。可能导致大量的寻道时间,优点是改善了随机访问时间。

    10.5.3 索引分配

      索引分配通过将所有指针放在一起,即索引块,解决了链接分配必须按序读取的问题。

      每个文件都有自己的所有块,整数一个磁盘块地址的数组。索引块的第 i 个条目指向文件的第 i 个块。目录包含索引块的地址。当查找和读取第 i 个块时,采用第 i 个索引块的第 i 个索引块条目的指针。类似分页方案。

            

      索引分配支持直接访问,并没有外部碎片问题。然而却浪费空间,索引块指针的开销通常大于链接分配的指针开销。

      这里有一个问题:索引块应该多大。

    •  链接方案
    • 多级索引
    • 组合方案

      

  • 相关阅读:
    swift对比object-c
    Swift : missing argument label 'xxx' in call
    Swift: missing argument label 'xxx' in call
    Swift 闭包(六)
    求教贴,一个可能很白痴的问题,有时间又很闲的大神给解决下
    Swift “ambiguous use of operator '>'”
    swift 之嵌套的理解 func chooseStepFunction(backwards: Bool) -> (Int) -> Int
    苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类
    苹果新的编程语言 Swift 语言进阶(六)--函数和闭包
    触摸板PCB制作-TM12
  • 原文地址:https://www.cnblogs.com/astonc/p/12157201.html
Copyright © 2020-2023  润新知