文件系统基础

初识文件系统

img

文件是以硬盘位载体存储在计算机上的信息集合,在系统运行时,计算机以进程为基本单位进行资源的调度与分配而在用户进行的输入、输出中,则以文件为基本单位。这就需要操作系统有一个文件管理系统。

操作系统的文件管理系统需要关心以下内容:

  • 计算机中存放了各种各样的文件,一个文件有哪些属性?
  • 文件内部的数据应该怎样组织起来?
  • 文件之间又应该又应该怎么组织起来?
  • 从下往上看,OS应提供哪些功能,才能方便用户、应用程序使用文件?
  • 从上往下看,文件数据应该怎么存放在外存(磁盘)上?

下面我们来依次探讨这些问题

文件的属性

一个文件应该具有如下属性:

  • 文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下不允许有重名文件
  • 标识符:一个系统内的各文件标识符唯一,对用户来说毫无可读性,因此标识符只是操作系统用于区分各个文件的一种内部名称。
  • 类型:指明文件的类型,打开不同类型的文件时,操作系统要做不同的处理
  • 位置:文件存放的路径(让用户使用);在外存中的地址(操作系统使用,对用户不可见)
  • 大小:指明文件大小
  • 创建时间、上次修改时间、文件所有者信息
  • 保护信息:对文件进行保护的访问控制信息

文件的逻辑结构

img

按文件是否有结构分类,可以分为无结构文件、有结构文件两种。

  • 无结构文件:文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。如:Windows 操作系统中的 .txt 文件。由于无结构文件没有结构,所以对记录的访问只能通过穷举搜索的方式,因而这种文件形式对很多应用不合适。

  • 有结构文件:由一组相似的记录组成,又称“记录式文件”每条记录由若干个数据项组成。如:数据库表文件。一般来说,每条记录有一个数据项可作为关键字。根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录和可变长记录两种。

有结构文件的组织形式可以分为顺序文件、索引文件、索引顺序文件

顺序文件

img

文件中的记录一个接一个地顺序排列,记录可以是定长记录或变长记录。顺序文件中记录的排列有两种结构:①串结构,各记录之间的顺序与关键字无关,通常是按存入的先后时间进行排列,检索时必须从头开始顺序依次查找,比较费时;②顺序结构,所有记录按关键字顺序排列,对于定长记录的顺序文件,检索时可采用折半查找,效率较高。

在对记录进行批量操作,即每次要读或写一大批记录时,顺序文件的效率是所有逻辑文件中最高的。此外,对于顺序存储设备(如磁带),也只有顺序文件才能被存储并能有效地工作。在经常需要查找、修改、增加或删除单个记录的场合,顺序文件的性能较差。

索引文件

img

另外,也可以使用不同的数据项建立多个索引表,如学号和姓名各建立一张索引表

索引顺序文件

索引顺序文件是顺序文件和索引文件的结合。最简单的索引顺序文件只使用了一级索引,先将变长记录顺序文件中的所有记录分为若干组,然后为文件建立一张索引表,并为每组中的第一个记录建立一个索引项,其中包含该记录的关键字和指向该记录的指针。

如图4.5所示,主文件包含姓名和其他数据项,姓名为关键字,记录按姓名的首字母分组,同一个组内的关键字可以无序,但是组与组之间的关键字必须有序。将每组的第一个记录的姓名及其逻辑地址放入索引表,索引表按姓名递增排列。检索时,首先查找索引表,找该记录所在的组,然后在该组中使用顺序查找,就能很快地找到记录。

img

img

直接文件和散列文件

给定记录的键值或通过散列函数转换的键值直接决定记录的物理地址。 散列文件具有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值可能相同。 复习了数据结构的读者读到这里时,会有这样的感觉:有结构文件逻辑上的组织,是为在文件中查找数据服务的(顺序查找、索引查找、索引顺序查找、哈希查找)。

img

文件逻辑结构和物理结构的对比

img

img

总而言之,逻辑结构是用户需要关心的,完成对数据的组织。而物理结构是操作系统需要关心的,完成从逻辑地址到物理地址的映射和存储的管理

作者:AH20

出处:https://www.cnblogs.com/AH20/p/18486543

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   AH20  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示