文件管理

5.1 文件系统概述

5.1.1 文件的概念

文件概念

文件是具有符号名的,在逻辑上具有完整意义的一组相关信息项的序列

文件的命名:<文件名>.<扩展名>

文件名用于设别文件,扩展名用于识别文件特性

引入文件的优点

  1. 用户使用方便:实现了==按名存取==,知道文件名就可存取信息。
  2. 文件安全可靠:通过文件系统实现对文件的访问
  3. 文件可备份:文件可以组织转储或备份
  4. 文件可共享:文件可共享,提高利用率

5.1.2 文件系统及其功能

文件系统

文件系统是操作系统中负责存取和管理信息的模块,它用统一的方式管理用户和系统信息的存储、检索、更新、共享和保护,并为用户提供一整套方便有效的文件使用和操作方法

功能:

  • 文件的按名存取
  • 文件的共享和保护
  • 文件的操作和使用

5.2 文件的组织

5.2.1 文件的存储

卷和块

  • 文件存储介质:磁带、光盘和磁盘
  • ==卷==:存储介质的物理单位,对应于一盘磁盘、一块软盘、一个光盘片、一个硬盘分区
  • ==块==:存储介质上连续信息所组成的一个区域,也叫物理记录
    • 是主存储器和辅助存储器进行数据交换的物理单位,每次交换一块或整数块信息
    • 存储文件的设备一般都是块设备
  • 块的大小和用户使用方式数据传输效率存储设备类型相关
    • 外围设备中相邻块之间必须留有间隙:启停机械动作识别不同块的要求=》需要时间
      • 磁盘

存取存储方式

顺序存取存储设备
  • 磁带机(同心圆)、光盘(螺旋线)都是一种顺序存取存储设备
  • 严格依赖信息的物理位置次序进行定位和读写的存储设备
  • 磁带机
    • 存储容量大、稳定可靠、卷可装卸和便于保存,广泛用作存档
    • 磁带的块长的变化范围可以较大,没有限制
直接存取存储设备
  • ==磁盘==是一种直接(随机)存取存储设备
  • 移臂+旋转 来定位,存储速度高,存取任意一个物理块所需时间几乎不依赖于信息的位置

5.2.2 文件的逻辑结构

逻辑文件

==逻辑文件==:又称文件的逻辑结构

  • 独立于物理环境的,用户概念中的抽象信息组织方式
  • 用户能观察到的,并加以处理的数据集合

分为两种形式:1、流式文件;2、记录式文件

流式文件

文件内的数据不再组成记录,只是由一串依次的字节组成的信息流序列,常常按长度来读取所需信息。

记录式文件

  • 记录式文件:有结构的文件,若干逻辑记录信息所组成的记录流文件
  • 逻辑记录是文件中按信息在逻辑上的独立含义所划分的信息单位
  • 例如:每个职工的工资信息构成一个逻辑信息,所有职工的工资信息便组成了记录式文件。

和数据库之间的区别:

  1. 数据库中的记录之间可以通过数据冗余构成某种联系
  2. 数据库管理系统支持基于联系的数据查询
  3. 数据库支持事务管理

5.2.3 记录组成与分解

上课没讲

5.2.4 文件的物理结构

  • 文件的物理结构和组织是指文件在物理存储空间中的存放方法和组织关系
  • 文件的存储结构涉及块的划分、记录的排列、索引的组织、信息的搜索等许多问题,其优劣直接影响文件系统的性能

顺序文件

顺序(连续)文件:将一个文件中逻辑上连续的信息存放到存储介质的依次相邻的块中的文件

例如:磁带文件、光盘文件

  • 优点:顺序存取记录时速度较快
  • 缺点:
    • 建立文件前需要预先确定文件长度以分配存储空间
    • 修改、插入增加文件记录有困难

连接文件

  • 连接(串联)文件:使用连接字来表示文件中各个物理块之间的先后次序
  • 输入井和输出井都使用此类文件
连接文件

优点:易于对文件记录做增、删、改,易于动态增长记录;不必预先确知文件长度;存储空间利用率高。

缺点:存放指针需要额外的存储空间;需要通过缓冲区获得连接字后才能找到下一物理块地址,仅适用于顺序存取。

直接文件

又称散列文件,通过计算记录的关键字建立与物理存储地址之间的对应关系(散列表,可能出现冲突)

索引文件

索引文件为每个文件都建立了一张索引表,其中,每个表目包含一个记录的键(或逻辑记录号)及其存储地址。索引表的地址可由文件目录指出,查阅索引表先找到相应记录键(或逻辑记录号),然后获得数据存储地址。

索引文件

访问方式:1、查找索引表;2、获得记录的物理地址

优点:克服了连接文件只能顺序存取的缺点,具有直接读写任意一个记录的能力,便于文件的增、删、改。

缺点:增加了索引表的空间开销和查找时间。

==多级索引==

优点:节省inode的存储空间(使得inode号容量尽可能大);对小文件有较高的性能

多级索引

第一列的13个地址为:10个直接地址的索引+1个一级间接索引+1个二级间接索引+1个三级间接索引

5.3 文件目录

5.3.1 文件目录结构

文件目录

  • 文件目录是实现文件按名存取的关键数据结构
  • 文件目录的建立维护和检索是文件系统的基本功能之一
  • 文件目录需要永久保存,组织成文件放在磁盘中,称为目录文件

一级目录结构

构造一张线性表,每个文件的相关属性占用一个目录项,构成一级目录结构

容易重名,不利于记忆

二级目录结构

第一级为主文件目录,管理所有用户文件目录,目录项登记了系统接受的用户的名字该用户文件目录的地址

第二级为用户的文件目录,目录项登记一个文件的相关属性,每个用户只能查看自己的文件目录。

二级目录结构

优点:通过主文件目录使得用户文件私密性得到保证,实现了对文件的保密和保护;不同用户可以具有同名文件,不会混乱。

缺点:同一个用户还是存在文件多、易重名问题。

树形目录结构

  • 层次文件目录结构通常使用 树形目录结构
  • 可以较好地反映现实世界中具有层次关系的数据集合较确切地反映系统内部文件的组织结构
  • 易于规定不同层次或子树中文件的不同存取规格,便于文件的保护、保密和共享。
  • 只要不位于同一末端的子目录中,不同文件可以重名
树形目录结构

5.4 文件的共享、保护与保密

5.4.1 文件的安全与保护

  • 文件共享:不同用户共同使用某些文件
  • 文件保护:防止文件被破坏
  • 文件保密:防止文件及其内容被其他用户窃取
    • 隐蔽文件目录
    • 设置口令
    • 使用密码

5.4.2 文件的保护

  • 文件副本:防止软硬件故障、保存信息完整性的能力
    • 动态多副本技术:在多个介质上维护同一内容的文件,并保持同步更新
    • 转储、备份与恢复:定时把文件复制转储到其他介质上,当某介质出现故障时,复原转储文件
      • 一定时间间隔或一个单位处理结束后,系统自动复写更新过的文件和数据
      • 二是每天或每周把文件信息全部复写一遍
  • 文件存取矩阵与文件存取表:系统为每个用户设置访问每个文件对象的存取属性组成的二维矩阵
    • 文件存取矩阵是稀疏矩阵 =》存取控制表
    • 用户、文件、存取属性
    • 存取控制表仅登记对文件拥有存取属性的部分
    • 存取属性:访问、读、写、执行、创建、删除、授权等
  • 文件属性
    • 用户分类:属主、合作者、其他
    • 文件属性:读、写、执行;放在文件目录项中
    • 用户使用文件时,通过核对文件属性,实现保护

5.5 补充内容

如何在线性地址空间实现非线性层次目录结构——按名存取

按名存取——按号存取(存在一个数据结构保存:名和号的映射关系)

(含路径的文件名)名——目录项【名 | indoe号】——inode号

文件的存取方法

  • 顺序存取
  • 直接存取
  • 索引存取:索引文件

文件系统的实现层次

Inode

Linux系统的FCB中的文件名和其他管理信息分开,其他信息单独组成一个数据结构,称为索引节点inode,由inode号标识。

FCB结构

文件系统中的每个文件都有一个磁盘inode与之对应,这些inode被集中存放在磁盘上的inode区

为了避免不断来回于内外存引用磁盘inode表,在内存区开辟一张活动inode表,磁盘inode反映文件静态特性,活动inode表反映文件动态特性

层次目录结构

Linux和Windows层次目录结构
  • 纯树型目录结构:每个文件都只有一个父目录
  • 有向无环图目录:允许文件有多个父目录而破坏树的特性

Linux支持多父目录,但其中一个是主父目录,它是文件拥有者,文件被物理存放在该目录下,其他父目录通过link的方式来连结和引用文件,允许任一父目录删除共享文件。(Windows中的快捷方式)

文件系统的实现

文件系统的磁盘结构

  • 超级块:占用1#号块;存放文件系统结构和管理信息,既有盘位示图的功能,又记录整个文件卷的控制数据
  • 索引节点区:2#—k+1#块;存放在inode表
  • 数据区:k+2#—n#块:文件内容保存在这个区域中

重要数据结构

  • 用户打开文件表
  • 系统打开文件表:为了解决多用户进程共享文件、父子进程共享文件而设置的,通过此表项将 用户打开文件表的表项文件活动inode表的表项 联接起来,以实现数据的访问和信息的共享。
  • 主存活动inode表

文件系统调用

1
2
3
4
fd = create(file_name_p, mode);
unlink(file_name_p);
fd = open(file_name_p, mode);
close(fd);
  • f_count:反映不同进程通过同一个系统打开文件表项共享一个文件的情况
  • i_count:反映不同进程通过不同系统打开文件表项共享同一个文件的情况
1
2
read(fd, buf, count);
write(fd, buf, count);

文件共享

  • 静态共享

    • linke(old_name_p, new_name_p)
    • 找到old_name_p所指向的文件索引节点inode编号,检索到new_name_p所指文件的父目录文件,把以存在文件的索引节点inode编号和别名构成一个新的目录项,放在该目录文件中去,以存在文件索引节点inode的连接计数i_link1
  • 动态共享

    • 使用同一位移指针的文件共享:先打开文件,再fork

    • 使用不同位移指针的文件共享:先fork,再打开文件

  • 符号链接共享:符号链接又称软链接,是一种只有文件名,不指向inode的文件,通过名称引用文件。通过名称查找可以实现链接计算机系统中不同文件系统的文件。

磁盘空闲空间管理

  • 位示图:1表示块已占用,0表示块空闲
  • 空闲区表:(类似于存储管理中的可变分区存储管理)
  • 空闲链表:将所有空闲块链接在一起

主存映射文件

将文件映射到进程地址空间,使得进程可以通过读写虚存内容来实现文件读写操作

相关习题

  • 文件目录的主要作用是 按名存取
  • 在文件系统中,文件的不同物理结构有不同的优缺点。在下列文件的物理结构中, 索引结构 具有直接读写文件任意一个记录的能力,又提高了文件存储空间的利用率
  • 在文件系统中,位示图可用于 磁盘空间的管理
  • Unix系统中,通过 目录项 实现文件系统的按名存取功能

文件管理
http://example.com/2023/02/13/nju-course-review-notes/os/file-management/
作者
zhc
发布于
2023年2月13日
许可协议