一、初识文件管理

文件系统中,数据项是最低级的数据组织方式,分为两种类型:

  • 基本数据项:用于描述一个对象的某种属性的字符集,又称为字段;
  • 组合数据项:是由若干个基本的数据项组成,简称组项。

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

文件是由创建者定义的、具有文件名的一组相关元素的集合,分为结构文件和无结构文件两种。

文件属性包括:

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

几个问题:

1.文件内部的数据应该怎么样组织起来?

2.文件之间应该怎样组织起来?

3.操作系统应该向上提供哪些功能?

4.文件应如何存放在外存?

5.文件共享和文件保护

文件共享:使多个用户可以共享使用一个文件。
文件保护:如何保证不同的用户对文件有不同的操作权限。

总结

二、文件系统的层次结构

文件系统的层次结构

用一个例子来辅助记忆文件系统的层次结构:
假设某用户请求删除文件“D:/工作目录/学生信息.xlsx”的最后 100 条记录。

  1. 用户需要通过操作系统提供的接口发出上述请求---用户接口
  2. 由于用户提供的是文件的存放路径,因此需要操作系统一层一层地查找目录,找到对应的目录项---文件目录系统
  3. 不同的用户对文件有不同的操作权限,因此为了保证安全,需要检查用户是否有访问权限---存取控制模块(存取控制验证层)
  4. 验证了用户的访问权限之后,需要把用户提供的“记录号”转变为对应的逻辑地址---逻辑文件系统与文件信息缓冲区
  5. 知道了目标记录对应的逻辑地址后,还需要转换成实际的物理地址---物理文件系统
  6. 要删除这条记录,必定要对磁盘设备发出请求---设备管理程序模块
  7. 删除这些记录后,会有一些盘块空闲,因此要将这些空闲盘块回收---辅助分配模块

三、文件的逻辑结构

1. 按文件结构分

文件的逻辑结构分为:无结构文件、有结构文件。

无结构文件:文件内部的数据就是一-系列二进制流或字符流组成。又称“流式文件”。如:Windows 操作系统中的。txt 文件。

有结构文件:由一组相似的记录组成,又称“记录式文件”。每条记录又若干个数据项组成。如:数据库表文件。一般来说,每条记录有一个数据项可作为关键字(作为识别不同记录的 ID)

2. 按组织方式分

顺序文件

顺序文件:文件中的记录一个接一个地顺序排列(逻辑。上),记录可以是定长的或可变长的。各个记录在物理上可以顺序存储或链式存储。

顺序文件的排列方式

顺序文件的特性及优缺点

索引文件

索引表本身是定长记录的顺序文件。因此可以快速找到第 i 个记录对应的索引项。
可将关键字作为索引号内容,若按关键字顺序排列,则还可以支持按照关键字折半查找。
每当要增加/删除一个记录时,需要对索引表进行修改。由于索引文件有很快的检索速度,因此主要用于对信息处理的及时性要求比较高的场合

另外,可以用不同的数据项建立多个索引表。如:学生信,息表中,可用关键字“学号”建立一张索引表。也可用“姓名”建立一张索引表。这样就可以根据“姓名”快速地检索文件了。(Eg:SQL 就支持根据某个数据项建立索引的功能)

索引顺序文件

索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是:并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项

若一个顺序文件有 10000 个记录,则根据关键字检索文件,只能从头开始顺序查找(这里指的并不是定长记,录、顺序结构的顺序文件),平均须查找 5000 个记录
若采用索引顺序文件结构,可把 10000 个记录分为 V10000=100 组,每组 100 个记录。则需要先顺序查找索引表找到分组(共 100 个分组,因此索引表长度为 100,平均需要查 50 次),找到分组后,再在分组中顺序查找记录(每个分组 100 个记录,因此平均需要查 50 次)。可见,采用索引顺序文件结构后,平均查找次数减少为 50+50=100 次
同理,若文件共有 106 个记录,则可分为 1000 个分组,每个分组 1000 个记录。根据关键字检索一个记录,平均需要查找 500+500=1000 次。这个查找次数依然很多,如何解决呢?

多级索引文件

为了进一步提高检索效率,可以为顺序文件建立多级索引表。例如,对于一个含 106 个记录的文件,可先为该文件建立一张低级索引表, 每 100 个记录为- -组,故低级索引表中共有 10000 个表项( 即 10000 个定长记录),再把这 10000 个定长记录分组,每组 100 个, 为其建立顶级索引表,故顶级索引表中共有 100 个表。

总结

四、文件目录

目录本身就是一种有结构文件,由一条条记录组成。每条记录对应一一个在该放在该目录下的文件。

目录文件中的一条记录就是一个“文件控制块(PCB)”。

FCB 的有序集合称为“文件目录”,一个 FCB 就是一个文件目录项
FCB 中包含了文件的基本信息(文件名、物理地址、逻辑结构、物理结构等),存取控制信息(是否可读/可写、禁止访问的用户名单等),使用信息(如文件的建立时间、修改时间等)。最重要,最基本的还是文件名、文件存放的物理地址。

需要对目录进行哪些操作?
搜索:当用户要使用一一个文件时,系统要根据文件名搜索目录,找到该文件对应的目录项
创建文件:创建- 一个新文件时,需要在其所属的目录中增加一一个目录项
删除文件:当删除-一个文件时,需要在目录中删除相应的目录项
显示目录:用户可以请求显示目录的内容,如显示该目录中的所有文件及相应属性
修改目录:某些文件属性保存在目录中,因此这些属性变化时需要修改相应的目录项(如:文件重命名)

单级目录

单级目录实现了“按名存取”,但是不允许文件重名。
在创建一个文件时, 需要先检查目录表中有没有重名文件,确定不重名后才能允许建立文件,并将新文件对应的目录项插入目录表中。

早期的多用户操作系统,采用两级目录结构。分为主文件目录(MFD, Master File Directory)和用户文件目录(UFD,User Flie Directory)。

树形结构目录

现在 OS 中,最通用且实用的文件目录无疑是树形结构目录,也叫多级目录结构。

用户(或用户进程)要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。各级目录之间
用“/”隔开。从根目录出发的路径称为绝对路径
例如:自拍.jpg 的绝对路径是“/照片/2015-08/ 自拍.jpg”
系统根据绝对路径一层一层地找到下一-级目录。刚开始从外存读入根目录的目录表;找到“照片”目录的存放位置后,从外存读入对应的目录表;再找到“2015-08”目录的存放位置,再从外存读入对应目录表;最后才找到文件“自拍 jpg”的存放位置。整个过程需要 3 次读磁盘 I/O 操作

很多时候,用户会连续访问同一目录内的多个文件(比如:接连查看“2015-08" 目录内的多个照片文件),
显然,每次都从根目录开始查找,是很低效的。因此可以设置一个“当前目录”。例如,此时已经打开了“照片’的目录文件,也就是说,这张目录表已调入内存,那么可以把它设置为“当前目录”。当用户想要访问某个文件时,可以使用从当前目录出发的“相对路径

树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但
是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构”。

无环图目录结构

可以用不同的文件名指向同一个文件,甚至可以指向同一个目录(共享同一目录下的所有内容)。
需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点。用户提出删除结点的请求时,只是删除该用户的 FCB、并使共享计数器减 1,并不会直接删除共享结点。只有共享计数器减为 0 时,才删除结点
注意:共享文件不同于复制文件。在共享文件中,由于各用户指向的是同一个文件,因此只要其中一个
用户修改了文件数据,那么所有用户都可以看到文件数据的变化

索引结点

其实在查找各级目录的过程中只需要用到“文件名”这个信息,只有文件名匹配时,才需要读出文件的其他信息。因此可以考虑让目录表“瘦身”来提升效率。除了文件名之外的信息都存在索引节点中。

思考有何好处?
假设一个 FCB 是 64B,磁盘块的大小为 1KB,则每个盘块中只能存放 16 个 FCB。若-一个文件目录中共有 640 个目录项,则共需要占用 640/16= 40 个盘块。因此按照某文件名检索该目录,平均需要查询 320 个目录项。平均需要启动磁盘 20 次(每次磁盘 I/0 读入一块)

使用索引结点机制,文件名占 14B,索引结点指针站 2B,则每:个盘块可存放 64 个目录项,那么按文件名检索目录平均只需要读入 320/64=5 个磁盘块。显然,这将大大提升文件检索速度

总结

五、文件共享

基于索引结点的共享方式(硬链接)

知识回顾:索引结点,是一种文件目录瘦身策略。由于检索文件时只需用到文件名,因此可以将除
了文件名之外的其他信息放到索引结点中
。这样目录项就只需要包含文件名、索引结点指针。

索引结点中设置一个链接计数变量 count,用于表示链接到本索引结点上的用户目录项数
若 count= 2,说明此时有两个用户目录项链接到该索引结点上,或者说是有两个用户在共享此文件。
若某个用户决定“删除”该文件,则只是要把用户目录中与该文件对应的目录项删除,且索引结点的 count 值减 1。

若 count>O,说明还有别的用户要使用该文件,暂时不能把文件数据删除,否则会导致指针悬空。
当 count=0 时系统负责删除文件。

基于符号链的共享方式

允许一个文件或子目录有多个父目录,但仅用一个作为主目录,其他的几个父目录都是通过链接的方式与之相链接的。

当 User3 访问“cc”时,操作系统判断文件“cc”属于 Link 类型文件,于是会根据其中记录的路径层层查找目录,最终找到 User1 的目录表中的“aa”表项,于是就找到了文件 1 的索引结点。


标题:(7)文件管理——计算机操作系统复习笔记
作者:AlgerFan
地址:https://www.algerfan.cn/articles/2020/01/03/1578043732844.html
版权声明:本文为博主原创文章,转载请附上博文链接!

添加新评论