操作系统学习笔记之——文件管理

文件管理

1、文件的概念

通过自底向上的方法定义:

  1. 数据项。数据项是文件系统中最低级的数据组织形式,可分为以下两种:

    基本数据项用于描述一个对象的某种属性的一个值。是数据中可命名的最小逻辑单元,即原子数据

    组合数据项由多个基本数据项组成

  2. 记录。记录是指一组相关数据项的集合,用于描述一个对象在某方面的属性。

  3. 文件。文件是指由创建者所定义的一组相关信息的集合,逻辑上可分为有结构文件和无结构文件两种。有结构文件中,文件由一组相似的记录组成,又称为记录式文件;而无结构文件则被视为一个字符流,又称流式文件

1.1、文件的属性

所有文件的信息都保存在目录结构中,而目录结构保存在外存上。文件信息在需要时调入内存。通常,目录条目包含文件名称及其唯一的标识符,而标识符定位其他属性的信息

1.2、文件的基本操作

文件属于抽象数据类型。操作系统提供系统调用,它对文件进行创建、写、读、重定位、删除和截断等操作。

  1. 创建文件。两股步骤:(1)在文件系统中为文件找空间;(2)在目录中为新文件创建条目;
  2. 写文件。执行一个系统调用。系统维护一个写指针。
  3. 读文件。系统维护一个读位置的指针。
  4. 文件的重定位(文件寻址)。
  5. 删除文件。先从目录中找到要删除的文件目录项,然后再回收文件所占的存储空间。
  6. 截断文件。

1.3、文件的打开与关闭

系统在首次使用文件的时候,使用系统调用 open 将指明文件的属性(包括该文件在外存上的物理位置)从外存复制到内存打开文件表的一个表目中并将该表目的编号(也称索引)返回给用户操作系统维护一个包含所有打开文件信息的表(打开文件表)。当用户需要一个文件操作时,可通过该表的一个索引指定文件,因此省略了搜索环节。

大多数操作系统要求在文件使用之前就被显式地打开。操作 open 会根据文件名搜索目录,并将目录条目复制到打开文件表。若调用 open 的请求得到允许,则进程就打开文件,而 open 则返回一个指向打开文件的一个条目的指针。通常通过指针(而非)文件名进行所有的 I/O 操作

每个打开的文件都有如下的信息:

  • 文件指针。系统跟踪上次的读写位置作为当前文件位置的指针,这种指针对打开文件的某个进程来说是唯一的,因此必须与磁盘文件属性分开保存。
  • 文件打开计数。
  • 文件磁盘位置。
  • 访问权限。

2、文件的逻辑结构

按逻辑结构,文件可划分为无结构文件和有结构文件:

  • 无结构文件(流式文件)

    无结构文件将数据按顺序组织成记录并积累、保存,它是有序相关信息项的集合,以字节为单位。遍历无结构文件,只能通过穷举的方式。

  • 有结构文件(记录式文件)

    有结构文件按记录的组织形式可以分为如下几种:

    • 顺序文件。文件中的记录一个接一个地顺序排列,记录通常是定长的,可以顺序存储或以链表的形式存储。
    • 索引文件。
    • 索引顺序文件。
    • 直接文件或散列文件。

3、目录结构

3.1、文件控制块

与进程管理一样,为实现目录管理,操作系统引入了文件控制块的数据结构。

  • 文件控制块

    文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现 “按名存取”。FCB 的有序集合称为文件目录一个 FCB 就是一个文件目录项为了创建一个新文件,系统将分配一个 FCB 并存放在文件目录中,称为目录项

    FCB 主要包含以下信息

    • 基本信息。如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等;
    • 存取控制信息。如文件的存取权限等;
    • 使用信息。如文件的创建时间等。
  • 索引结点

    在检索目录文件时,只用到了文件名,仅当找到一个目录项(查找文件名与目录项中文件名匹配)时,才需要从该目录项中读取文件的物理地址。也就是说,在检索目录时,文件的其他描述信息都不会用到,也不要调入内存。因此,有的系统采用了文件名和文件描述信息分开的方法文件描述信息单独形成一个称为索引结点的数据结构,称为 i 结点。在文件目录中的每个目录项仅由文件名和指向该文件所对应的 i 结点的指针组成

3.2、目录结构

  • 单级目录结构

    在整个文件系统中只建立一张目录表,每个文件占一个目录项。但查找速度慢、文件不允许重名、不便于文件共享;

  • 两级目录结构

    将文件目录分为主文件目录和用户文件目录。但缺乏灵活性,不便于文件分类。

  • 多级目录结构(树形目录结构)。类似于 Linux 的目录树结构。绝对路径和相对路径。

  • 无环图目录结构

3.3、文件共享

  • 硬链接
  • 软链接

4、文件系统的实现

4.1、文件系统的层次结构

在这里插入图片描述

4.2、目录实现

目录的实现是为了查找

  • 线性目录
  • 哈希表

4.3、文件实现

4.3.1、文件分配方式(对磁盘非空闲块的管理)

怎么实现 目录项结构 优点 缺点
顺序分配 为文件分配的必须是连续的磁盘块 起始块号、文件长度 顺序存取速度快、支持随机访问 会产生碎片,不利用文件扩展
隐式链接 除文件的最后一个盘块之外,每个盘块中都存在指向下一个盘块的指针(单链表) 起始块号、结束块号 可解决碎片问题,外存利用率高,文件扩展实现方便 只能顺序访问
显式链接 建立一张文件分配表(FAT),显式记录盘块的先后顺序(开机后 FAT 常驻内存) 起始块号 还可以通过查询内存中的 FAT 实现随机访问 FAT 需要一定的内存空间
索引分配 为文件数据块建立索引表。若文件过大,可采用链接方案、多层索引、混合索引 链接方案记录的是第一个索引块的块号,多层/混合索引记录的是顶级索引块的块号 支持随机访问,易于文件的扩展 索引表需要占用一定的内存空间。访问数据之前需要先读入索引快。若采用链接方案,查找索引块时可能需要多次读磁盘操作

4.3.2、文件存储空间的管理(对磁盘空闲块的管理)

  • 空闲表法
  • 空闲链表法
  • 位示图法
  • 成组链表法

5、磁盘组织与管理

5.1、磁盘的结构

磁盘盘面上的数据存储在一组同心圆中,称为磁道磁道又划分为几百个扇区,每个扇区固定存储大小 512Bytes一个扇区又称为一个盘块所有盘片上相对位置相同的磁道组成柱面,扇区是磁盘寻址的最小单位,磁盘地址用 “柱面号·盘面号·扇区号(或块号)” 表示

5.2、磁盘调度算法

  • 先来先服务算法
  • 最短寻找时间优先算法
  • 扫描算法
    512Bytes**,一个扇区又称为一个盘块所有盘片上相对位置相同的磁道组成柱面,扇区是磁盘寻址的最小单位,磁盘地址用 “柱面号·盘面号·扇区号(或块号)” 表示

5.2、磁盘调度算法

  • 先来先服务算法
  • 最短寻找时间优先算法
  • 扫描算法
  • 循环扫描算法(C-SCAN 或 LOOK),改进的 C-LOOK 算法

猜你喜欢

转载自blog.csdn.net/qq_36879493/article/details/107998659