基本概念
为什么不定义为指针,是因为这是要写入文件的数据,如果你在程序运行的时候构建了这个链表,计算出了当前next的地址(实际上是主存的地址)然后写入辅存,可能下次把这些数据调入主存的时候就不在这个地址了。
文件管理的要求
用户视角:使用逻辑文件,即内容是什么
操作系统视角:组织和管理物理文件,即怎么存
按逻辑结构分:有结构文件(由记录组成,分为定长记录、可变长记录)、无结构文件(由二进制流或字符流组成,无明显的逻辑结构)
按文件中物理结构分:顺序文件、链接文件、索引文件
目录
也是文件,是由文件说明索引组成的用于文件检索的特殊文件,文件目录的内容是文件访问和控制的信息(不包括文件内容)。
内容
基本信息:文件名
文件类型:
有/无结构(记录文件,流式文件);
内容(二进制,文本)
用途(源代码,目标代码,可执行文件,数据)
属性attribute(如系统,隐含等)
文件组织(如顺序,索引等)
地址信息:存放位置、文件长度
- 访问控制信息:文件所有者、访问权限
- 使用信息:创建时间、最后一次读/写访问的时间和用户
分类
单级目录
两级目录
多级目录
实现方法
文件控制块
基本信息
- 文件名:字符串,通常在不同系统中允许不同的最大长度,可修改
- 物理位置;
- 文件逻辑结构:有/无结构(记录文件,流式文件)
- 文件物理结构:(如顺序,索引等)
访问控制信息
- 文件所有者(属主):通常是创建文件的用户,或者改变已有文件的属主;
- 访问权限(控制各用户可使用的访问方式):如读、写、执行、删除等;
使用信息
创建时间,上一次修改时间,当前使用信息等。
文件物理结构
顺序/连续结构
容易出现磁盘碎片,适用于变化不大的文件
串联/链接文件
随机存取效率太低,如果访问文件的最后的内容,实际上是要访问整个文件。
可靠性问题,如指针出错;
链接指针占用一定的空间
索引结构
一个文件的信息存放在若干个不连续物理块中。系统为每个文件建立一个专用数据结构:索引表,并将这些物理块的块号存放在该索引中。索引表就是磁盘块地址数组,其中第i个条目指向文件的第i块
索引表可放在文件目录中、文件的开头等
索引文件在存储区中占两个区:索引区和数据区。索引区存放索引表,数据区存放数据文件本身。
访问索引文件需要两步操作:
- 读取文件索引区,由逻辑块号查得物理块号
- 访问物理块号而获得所需信息
优点:
- 保持了链接结构的优点,又避免了其缺点
- 即能顺序存取,又能随机存取
- 满足了文件动态增长、插入删除的要求
- 能充分利用外存空间
缺点:
索引表本身带来了系统开销,如:内外存空间,存取时间
索引表的组织
- 链接模式:一个盘块一个索引表,多个索引表链接起来
- 多级索引(间接索引):将一个大文件的所有索引表(二级索引)的地址放在另一个索引表(一级索引)中
- 综合模式:直接索引方式与间接索引方式结合
目录的实现
目录项的内容
- 直接法:目录项=文件名+文件控制块(属性信息、在外存上的存放位置)。如MS-DOS/Windows;
- 间接法:目录项=文件名+文件控制块的地址(索引号)。如Unix(inode)
不管是何种方法,给定一个文件名,即可返回相应的文件信息
长文件名问题
方法1:在目录项中,将文件名的长度固定为255个字符。缺点:浪费空间,很少文件用很长的名字;
方法2:每个目录项的长度可变,分为三部分:目录项长度、文件的属性信息(此两项长度固定)、文件名(长度可变)。缺点:文件被删除后,该目录项所占用的空间不太好回收利用;
方法3:目录项本身的长度固定,把长度可变的文件名统一放在目录文件的末尾。
目录的搜索方法
顺序查寻法
Hash方法/散列法
便于共享的目录组织
硬链接:多个文件名指向同一inode,一个文件拥有多个有效路径名
软连接/符号链接:一个文件实际上是一个文本文件,包含了另一个文件的位置信息(路径名)
保护文件的方法
建立副本
定时转储(unix采用):每隔一定时间把文件转储到其他存储介质上,当文件发生故障,就用转储的文件来复原,把有故障的文件恢复到转储时刻文件的状态
规定文件的权限
文件系统的性能问题
块高速缓存