文件管理概述
文件——就是一组有意义的信息/数据集合
- 计算机中存放了各种各样的文件,一个文件有哪些属性?
- 文件内部的数据应该怎样组织起来?
- 文件之间又应该怎么组织起来?
- 从下往上看,操作系统应该提供哪些功能,才能方便用户、应用程序使用文件?
- 从上往下看,文件数据应该怎么存放在外存(磁盘) 上?
-
文件的属性
- 文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下不允许有重名文件,但不同目录下允许有重名,故文件名不能唯一标识一个文件
- 标识符:一个系统内的各个文件标识符唯一,对用户来说毫无可读性,是操作系统用于区分各个文件的内部名称
- 文件类型:指明文件类型,方便默认文件的打开方式
- 位置:文件的存放路径(让用户使用)、在外存中的地址(操作系统使用,对用户不可见)
- 文件大小、创 建时间、上次修改时间、所有者信息
- 保护信息:对文件进行保护访问控制信息
-
文件内部的组织
- 无结构文件(如文本文件)——由一些二进制或字符流组成,又称“流式文件”
- 有结构文件(如数据库表)——由一组相似的记录组成,又称“记录式文件”(记录实际一组相关数据项的集合——数据库表中的一条记录)
-
文件之间的组织
- 用户可以自己创建一层层目录,各层目录中存放着相应的文件。
- 目录其实也是一种特殊的有结构文件(由记录组成),如何实现文件目录是之后会重点探讨的问题。
- 所谓“目录”其实就是我们熟悉的“文件夹”
-
操作系统向上提供的功能
- 用户、应用程序会调用相关的系统调用来实现某种功能
- 常见的几个基本功能:
- 创建文件(create系统调用)
- 需要调用的参数:所需外存空间大小、文件存放路径、文件名
- 主要做两件事
- 在外存中找到文件所需空间
- 创建该文件对应的目录项
- 删除文件(delete系统调用)
- 需要调用的参数:文件存放路径、文件名
- 主要做两件事
- 找到该文件对应的目录项在外存中找到文件所需空间
- 回收文件占用的磁盘块
- 需要把文件再目录表中对应的目录项删除
- 读文件(read系统调用)
- 写文件(write系统调用)
- 打开文件(open系统调用)——读写文件之前都需要先打开文件
- 需要调用的参数:文件存放路径、文件名、要对文件的操作类型
- 主要做两件事
- 根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项,并检查该用户是否指定的操作系统
- 将目录项复制到内存中的“打开文件表”中,并将对应表目的编号返回给用户,之后用户使用打开文件表的编号来指明要操作的文件
- 关闭文件(close系统调用)——读写文件之后都需要先关闭文件
- 主要做两件事
- 将进程的打开文件表相应表项删除
- 回收分配给该文件的内存空间等资源
- 从“系统打开文件表”中将“打开计数器”减1,若count=0,则删除该表项
- 主要做两件事
- 创建文件(create系统调用)
- 可以用基本操作完成更复杂的操作:
如复制文件:先创建一个空文件,再把源文件读入内存,再将内存中的数据写到新文件中
-
操作系统向下提供的功能(物理上)
- 与内存一样,外存也是由一个个存储单元组成,每个存储单元对应一个物理地址
- 类似于内存分为一个个内存块,外存也会被分为一个个**“块/磁盘块/物理块”**
- 每个磁盘块的大小都是相等的,每块一般包含 2 的整数次幂个地址
- 操作系统同样需要将逻辑地址转换为外存的 物理地址(物理块号,块内地址) 的形式
- 块内地址的位数取绝于磁盘块的大小
- 如果磁盘块大小为1KB,此时一个文件只有10B,但他依然需要占用1KB的磁盘块
- 文件数据在磁盘中(物理上)的存放形式:
- 其他功能:
- 文件共享:使用多个用户可以共享使用一个文件
- 文件保护:如何保证不同用户对文件由不同的操作权限