操作系统(六)-文件系统与I/O

1. 文件系统基础

1.1 文件和文件系统

  1. 文件系统:
  • 在系统运行时,计算机以进程为基本单位进行资源的调度与分配;而在用户进行的输入、输出中,则以文件为基本单位。用户将文件用于应用程序的输入、输出时,还希望可以访问文件、修改文件和保存文件等,实现对文件的维护管理,这就需要系统提供一个文件管理系统,操作系统中的文件系统就是用于实现用户的这些管理需求的。
  • 文件系统的管理对象:文件,目录,磁盘(磁带)存储空间。
  • 核心部分:对对象操纵和管理的软件集合
    ①对文件存储空间的管理
    ②对文件目录的管理
    ③用于将文件的物理地址转换为逻辑地址的机制
    ④对文件的读和写的管理
    ⑤对文件的共享与保护,等功能
  1. 文件的结构:
  • 数据项。是文件系统中最低级的数据组织形式。可分为
    ①基本数据项,用于描述一个对象的某种属性的一个值;②组合数据项,多个基本数据项组成。
  • 记录。一组相关数据项的集合,用于描述一个对象在某方面的属性。
  • 文件。创建者所定义的一组相关信息的集合,逻辑上可分为
    无结构文件:被视为一个字符流(如二进制文件或字符文件),又称流式文件。
    有结构文件:文件由一组相似的记录组成,又称记录式文件。
  • 在操作系统中,通常将程序和数据组织成文件。文件可以是数字、字母或二进制代码,基本访问单元可以是字节、行或记录。文件长期存储在硬盘或二级存储器中。
  1. 文件的类型(了解)
  • 按用途分类
    ①系统文件。②用户文件。③库文件
  • 按文件中数据的形式分类
    ①源文件。②目标文件。③可执行文件。
  • 按存取控制属性分类
    ①只执行文件。②只读文件。③读写文件。
  • 按组织形式和处理方式分类
    ①普通文件。②目录文件。③特殊文件。
  1. 文件属性可以包括但不限于:(了解)
  • 文件类型
  • 文件长度(字、字节、块)
  • 文件的物理位置(物理位置对用户不可见,逻辑位置即文件的路径/文件名,用户可见)
  • 文件的建立时间
  1. 文件的基本操作
  • 创建文件
  • 删除文件
  • 读文件
  • 写文件
  • 设置文件的读/写位置(I/O Control)
  • 截断文件(允许文件所有的属性不变,并删除文件内容)
  1. 文件的“打开”和“关闭”操作
  • 打开(open)。是指系统将指明文件的属性从外存拷贝到内存打开文件表的一个表目中,并将该表目的编号(索引号)返回给用户。即在用户和指定文件之间建立一个连接。
  • 关闭(close)。如果用户已不再需要对该文件实施相应的操作。可利用close系统调用来关闭此文件,即断开此连接,OS会把该文件从打开文件表的表目上删除掉。
  1. 文件的其他操作
    如对文件属性的操作,有关目录的操作

1.2 文件的逻辑结构

  1. 逻辑结构和物理结构
  • 逻辑结构。文件由一系列逻辑记录组成,是用户可以直接处理的数据及其结构。
  • 物理结构。又称文件的存储结构,指系统将文件存储在外存上所形成的一种存储组织形式,用户不可见。
  1. 文件逻辑结构的类型
  • 无结构文件(流式文件)
    是最简单的文件组织形式,将数据按顺序组织称记录并积累、保存,是有序相关信息项的集合,以字节(Byte)为单位。
    对记录的访问只能通过穷举搜索的方式,适用性弱。
  • 有结构文件(记录式文件)
    有结构文件按记录的形式可分为如下几种:
    顺序文件。文件中的记录顺序排列,记录通常是定长的,有以下两种结构:
    (1)串结构,记录的顺序通常按存入时间的先后顺序。
    (2)顺序结构,文件中的所有记录按关键字顺序排列。
    优/缺点:对记录进行批量操作效率最高,但在交互应用的场合如对单个记录的查找修改操作时比较困难。
    平均查找次数:(n+1)/2次
    索引文件。查找第i条记录,可直接计算得到第i条记录相对于第一条记录的位置,记录是可变长的。变长记录只能顺序查找,开销较大,因此建立一张索引表以加快检索速度。(索引表本身是定长记录的顺序文件)
    索引顺序文件
    是顺序和索引两种组织形式的结合。索引顺序文件将顺序文件中的所有记录分为若干组,为顺序文件建立一张索引表,在索引表中为每组中的第一条记录建立一个索引项,其中含有该记录的关键字值和指向该记录的指针。
    平均查找次数:√n次
  1. 直接文件和哈希(Hash)文件
  • 直接文件。可根据给定的关键字直接获得记录的物理地址,关键字本身就决定了物理地址。
  • 哈希文件。利用Hash函数(或散列函数)可将关键字转换为相应记录的地址。

1.3 文件目录

  1. 对文件目录的管理要求
    ①实现“按名存取”。②提高对目录的检索速度。③文件共享。④允许文件重名。

  2. 文件控制块FCB

  • 用来存放控制文件需要的各种信息的数据结构。
  • FCB的有序集合称为文件目录,一个FCB就是一个目录项。创建一个新文件,系统将分配一个FCB并存放在文件目录中称为目录项。
  • FCB主要包括以下信息:
    ①基本信息。文件名、物理位置、逻辑结构、物理结构等。
    ②存取控制信息。文件存取权限等。
    ③使用信息。文件建立时间、修改时间等。
  1. 索引结点
  • UNIX等系统采用文件名和文件描述信息分开的方法,文件描述信息单独形成一个称为索引结点的数据结构,简称i结点。在文件目录中的每个目录项仅由文件名和指向该文件所对应的i结点的指针构成。
  • 引入索引结点后,大大节省了系统开销。
  1. 磁盘索引结点
  • 存放在磁盘上,存目录中的文件的信息。
  • 文件被打开时,磁盘索引结点复制到内存的索引结点中,增加一系列的内容便于使用。
  1. 目录操作
    ①创建目录。②删除目录。③改变目录。④移动目录。⑤链接(Link)操作。⑥查找。

  2. 目录结构

  • 单级目录结构
    在整个文件系统中只建立一张目录表。
    实现了“按名存取”,但存在查找速度慢,不允许文件重名,不便于文件共享等缺点。
  • 两级目录结构
    将文件目录分成主文件目录和用户文件目录。
    可以解决多用户之间的文件重名问题,可以在目录上实现访问限制,但是两级目录结构缺乏灵活性,不能对文件分类。
  • 多级目录结构(树形目录结构)
    相关概念:相对路径、绝对路径、当前路径、路径名
    用文件的路径名标识文件,相对路径由从当前目录出发到所找文件通路上所有目录名与数据文件名用分隔符“/”链接而成。
    方便对文件进行分类,层次结构清晰,更有效的进行文件的管理和保护。但是影响查询速度,增加了磁盘访问次数。
  1. 目录查询技术
  • 线性检索法(顺序检索法)
    系统利用用户提供的文件名(或包括多级路径),用顺序查找法直接从文件目录中找到指定文件的目录项。
    对于使用模式匹配通配符的文件名,只能使用线性检索法进行查找。
  • Hash方法
    建立一张Hash索引文件目录,利用Hash方法进行查询,即系统将用户提供的文件名变为文件目录的索引值进行查找,显著的提高检索速度。

1.4 文件共享

  1. 基于索引结点的共享方式(硬链接
  • 文件属性信息放在索引结点中
  • 索引结点中有一个链接计数count,表示链接到本索引结点(文件)上的用户目录项的数目。
  • count≠0时,文件不可删除。
  1. 利用符号链接实现文件共享(软链接
  • 系统创建一个LINK类型的新文件,其中只包含被连接文件的路径名。
  • 文件的拥有者把一个共享的文件删除后,其他用户通过符号链接去访问时会失败,会删除符号链,不产生影响。建立符号链接时,count值直接复制。

2. 文件系统实现

2.1 文件分配方式(外存的组织方式)

文件是存放在磁盘上的,而磁盘是以盘块为基本的分配单位的,那么一个文件是怎么存放在磁盘上的呢,这就是外存的组织方式,主要有以下三种:

  1. 连续分配
  • 为每一个文件分配一组相邻接的(也就是连续的)盘块
  • 优点:实现简单,存取速度快
  • 缺点:文件长度不宜动态增加,增加需要大量移动盘块;反复增删文件后会产生外部碎片;只适用于长度固定的碎片
  1. 链接分配
  • 每个文件分配不连续的磁盘空间,通过链接指针将一个文件的所有盘块链接在一起,由此形成链式文件结构
  • 消除了外部碎片,显著提高了磁盘空间的利用率,便于随机访问,对文件的增删改非常方便。
  • 又分为两种形式:
    隐式链接
    隐式链接的目录项需要包含文件的第一个盘块和最后一个盘块号,每一个盘块都有一个指向下一块盘块的指针(最后一个盘块除外)
    缺点:只能顺序查找,无法直接访问盘块;稳定性差,任一指针丢失或损坏都可能导致文件的丢失。
    在这里插入图片描述
    显式链接
    用于链接文件各物理块的指针显式地存放在内存的一张链接表中,该表在整个磁盘中仅设置一张。而文件第一个盘块号作为文件的物理地址存放在FCB中。
    这个链接表则叫做文件分配表(FAT)
    在这里插入图片描述
  1. 索引分配
  • 引入原因:
    ①链接分配不能支持高效的直接存取(进行大文件存取需在FAT中顺序地查找许多盘块号);
    ②FAT需占用较大内存空间,由于盘块号在FAT随机分布,只能将FAT全部调入内存;
    ③在打开某个文件时,只需要把该文件占用的盘块号的编号调入内存即可,完全没有必要把整个FAT调入内存。
  • 实现:
    ①将每个文件的所有的盘块号都集中放在一起构成索引块(表)
    ②每个文件分配一个索引块(表),再把分配给该文件的所有盘块号都记录在该索引块中,因而该索引块就是一个含有许多磁盘块号的数组。
    ③在建立一个文件时,只需要在为之建立的目录项中填上指向该索引块的指针(单级索引)。
  • 解决索引块过小无法处理大文件:
    ①链接方案。一个索引块通常对应一个磁盘块,处理大文件可以将多个索引块链接起来。
    多层索引。第一层的索引块指向第二层的索引块。
    ③混合索引。多种索引分配方式相结合的分配方式。
    在这里插入图片描述
  1. 三种分配方式的比较
分配方式 访问第n条记录 优点 缺点
连续分配 需访问磁盘1次 顺序存取时速度快,文件定长时可根据文件起始地址及记录长度进行随机访问 文件存储要求连续的存储空间,会产生碎片,不利于文件的动态扩充
链接分配 需访问磁盘n次 可解决外存碎片问题,提高外存空间利用率,动态增长较方便 只能按照文件的指针链顺序访问,查找效率低,指针信息存放消耗外存空间
索引分配 m级需访问磁盘m+1次 可以随机访问,文件易于增删 索引表增加存储空间的开销,索引表的查找策略对文件系统效率影响较大

2.2 文件存储空间管理

在上面的外存组织方式中,为一个文件分配空闲盘块,就需要知道哪些盘块是空闲的,记录磁盘有哪些空闲盘块有以下方法:

  1. 空闲表法
  • 为外存上所有区域建立一张空闲表,每个空闲区对应于一个空闲表项,空闲表项里面有表项的序号、空闲区的第一个盘块号、空闲盘块数等信息。
  • 空闲表法属于连续分配方式,对于空闲表法的空间分配和回收跟内存空间的动态分区分配类似,同样可以采用首次适应、最佳适应等算法,回收时,也会考虑回收区间相邻的空间,进行适当的拼接。
    在这里插入图片描述
  1. 空闲链表法
  • 将所有空闲盘块区拉成一条空闲链。
  • 这种方法对分配和回收一个空闲盘块比较简单,但是空闲盘块链可能会很长。
  1. 位示图法
  • 利用磁盘空间的每一位来表示磁盘一个盘块是否空闲,位示图法的分配和回收就是把相应的位置为0或者1,这种方法占用的空间小,适合保存在内存中,就不需要每次都访问磁盘。
  • 通常用mn个位数来表示,mn等于盘块总数。
    在这里插入图片描述
  1. 成组链接法
  • 前三者都不适用于大型文件系统
  • UNIX系统中采用的是成组链接法

3. 磁盘组织与管理

   提高磁盘I/O速度的途径第一就是利用磁盘高速缓存技术,这里是指在内存中为盘块设置一个缓冲区,这个缓冲区保存某些盘块的副本。内存会优先查看这里。

   还有提前读、延迟写、优化物理块分布和虚拟盘(用内存模拟磁盘,RAM盘)等。

   这里引出一种非常有用的设计思想:如果使用一个组件对性能的改进受到了很大的限制,那么可通过使用多个相同的组件来获得性能的大幅度提高。

   一个典型代表就是廉价磁盘冗余阵列RAID(Redundant Array of Inexpensive Disk)。

  这个系统使用了很多台磁盘驱动器来组成一个大磁盘系统。不仅增加了磁盘容量,也提高了磁盘I/O速度和可靠性。

  因为有多个磁盘驱动器,所以可以将每一个子盘块的数据分别存储到各个不同磁盘中的相同位置,读取时可以采用并行传输方式输入内存。这就是并行交叉存取。

  同时因为有了多个磁盘,所以可以使用冗余数据和各种校验技术来保证磁盘的可靠性。RAID有很多级别,不同级别对应着不同性能。RAID0是最快速的,但没有冗余校验功能,所以不够可靠。RAID1采用镜像复制,提高了安全性,但降低了磁盘利用率。其余的也有各自的容错技术。

  提高磁盘可靠性的技术
  影响文件安全性的因素有:人为因素、系统因素和自然因素。

  针对这三种因素分别有:存取控制机制、磁盘容错技术和建立“后备系统”的方式来防止危险。

  磁盘容错技术就是通过增加冗余的磁盘驱动器、控制器等方法来提高可靠性。也被称为系统容错技术SFT,可分为三个级别:

  第一级是低级容错技术,主要用于防止因磁盘表面缺陷造成的数据丢失,包含双份目录、双份FAT以及写后读校验(在将数据写入磁盘后,立马再读出来与内容缓冲区在写后仍保留的数据对比,一致则认为写入成功,否则写入失败进行重写)。

  第二级是中级容错技术,主要用于防止磁盘驱动器和磁盘控制器故障。  使用磁盘镜像(一条通道,一个控制器,两个驱动器)和磁盘双工(两条通道,两个控制器和驱动器。)

 第三级是基于集群技术的容错功能。

3.1 磁盘的结构

  1. 磁盘:是由表面涂有磁性物质的金属或塑料构成的圆形盘片,通过一个称为磁头的导体线圈从磁盘读取数据。
  2. 数据的组织和格式。
    磁盘设备可包括一个或多个物理盘片,每个磁盘片分一个或两个存储面(Surface),每个盘面上有若干个磁道(Track),磁道之间留有必要的间隙(Gap)。为使处理简单起见,在每条磁道上可存储相同数目的二进制位。 这样,磁盘密度即每英寸中所存储的位数,显然是内层磁道的密度较外层磁道的密度高。每条磁道又被逻辑上划分成若干个扇区(sectors),软盘大约为 8~32 个扇区,硬盘则可多达数百个,图中显示了一个磁道分成 8 个扇区。一个扇区称为一个盘块(或数据块),常常叫做磁盘扇区。各扇区之间保留一定的间隙。
    在这里插入图片描述
  3. 磁盘的类型
  • 固定头磁盘。在每条磁道上都有一读/写磁头,所有的磁头都被装在一刚性磁臂中。这种结构的磁盘主要用于大容量磁盘上。
  • 移动头磁盘。每一个盘面仅配有一个磁头,也被装入磁臂中。为能访问该盘面上的所有磁道,该磁头必须能移动以进行寻道。广泛应用于中小型磁盘设备中,在微型机上配置的温盘和软盘都采用移动磁头结构。
  1. 磁盘访问时间。
  • 寻道时间 Ts,这是指把磁臂(磁头)移动到指定磁道上所经历的时间。
  • 旋转延迟时间 Tr,这是指定扇区移动到磁头下面所经历的时间。
  • 传输时间 Tt,这是指把数据从磁盘读出或向磁盘写入数据所经历的时间。

3.2 磁盘调度算法

磁盘调度:根据用户磁盘I/O指令指定的柱面位置,来决定请求执行顺序的调度
目标:尽可能减少寻道时间,即减少移动臂的移动距离

  1. 先来先服务(FCFS)
    优点:对各进程公平,最简单的调度算法
    缺点:在性能上接近于随机调度,平均寻道距离大

  2. 最短寻道时间优先(SSTF)
    与当前磁头所在磁道最近的磁道
    优点:与FCFS相比,系统设备吞吐量高,响应时间低
    缺点:会产生“饥饿”现象,不能保证平均寻道时间最短

  3. 扫描(SCAN)算法(电梯算法)
    在当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下次服务的对象
    优点:消除饥饿现象,吞吐量大,平均响应时间小。
    缺点:不利于远离磁头的一端的访问请求

  4. 循环扫描(CSCAN)算法
    优点:对扫描策略的改进,消除对两端磁道请求的不公平

4. 输入输出系统

猜你喜欢

转载自blog.csdn.net/qq_43681073/article/details/111539712