操作系统
四、文件
1. 初识文件管理
- 文件:就是一组有意义的信息/数据集合
- 计算机中存放了各种各样的文件,一个文件有哪些属性?
- 文件名:由创建文件的用户决定文件名
- 标识符:一个系统内的各文件标识符唯一
- 类型:指明文件的类型
- 位置:文件存放的路径(让用户使用)
- 大小:指明文件大小
- 保护信息:对文件进行保护的访问控制信息
- 文件内部的数据应该怎样组织起来?(文件的逻辑结构)
- 无结构文件(如文本文件):由一系列二进制或字符流组成,又称“流式文件”
- 有结构文件(如数据库表):由一组相似的记录组成,又称“记录式文件”
- 文件之间又应该怎么组织起来?(目录结构)
- 根目录
- 各层目录中存取相应的文件。
- 操作系统应该向上提供哪些功能?
- 可以“创建文件”,点击新建后,图形化交互进程在背后调用了"create”系统调用
- 可以“读文件”,将文件数据读入内存,才能让CPU处理,双击后,“记事本”应用程序通过操作系统提供的“读文件”功能,即read系统调用,将文件数据从外存读入内存,并显示在屏幕上
- 可以“写文件”,将更改过的文件数据写回外存(我们在“记事本”应用程序中编辑文件内容,点击“保存”后,“记事本”应用程序通过操作系统提供的“写文件”功能,即write系统调用,将文件数据从内存写回外存)
- 删除文件
- 打开文件
- 关闭文件
- 从上往下看,文件应如何存放在外存?(文件的物理结构)
- 操作系统如何管理外存中的空闲块(存储空间的管理)
- 其他需要由操作系统实现的文件管理功能
- 文件共享:使多个用户可以共享使用一个文件
- 文件保护:如何保证不同的用户对文件有不同的操作权限
2. 文件的逻辑结构
- 逻辑结构:指在用户看来,文件内部的数据应该是如何组织起来的
- 物理结构:指在操作系统看来,文件的数据是如何存放在外存中的
- 按文件是否有结构分类:
- 无结构文件:“流式文件”,Windows操作系统中的.txt文件
- 有结构文件:“记录式文件”,数据库表文件
- 顺序文件
- 串结构(链式存储):记录之间的顺序与关键字无关
- 顺序结构(顺序存储):记录之间的顺序按关键字顺序排列
- 索引文件
- 索引顺序文件
- 顺序文件
3. 文件目录
4. 文件的物理结构(文件分配方式)
- 即:文件数据应该怎样存放在外存中?
- 操作系统为文件分配存储空间都是以块为单位的。
- 用户通过逻辑地址来操作自己的文件,操作系统要负责实现从逻辑地址到物理地址的映射。
- 读取某个磁盘块时,需要移动磁头。访问的两个磁盘块相隔越远,移动磁头所需时间就越长。
- 结论:
- 连续分配的文件在顺序读/写时速度最快。
- 物理上采用连续分配的文件不方便拓展。
- 物理上采用连续分配,存储空间利用率低,会产生难以利用的磁盘碎片。可以用紧凑来处理碎片,但是需要耗费很大的时间代价。
- 连续分配方式要求每个文件在磁盘上占有一组连续的块。
- 优点:支持顺序访问和直接访问(即随机访问);连续分配的文件在顺序访问时速度最快
- 缺点:不方便文件拓展:存储空间利用率低,会产生磁盘碎片
- 若此时要拓展文件,则可以随便找一个空闲磁盘块,挂到文件的磁盘块链尾,并修改文件的FCB
- 结论:采用隐式链接的链接分配方式,很方便文件拓展。
- 另外,所有的空闲磁盘块都可以被利用,不会有碎片问题,外存利用率高。
- 链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。
- 隐式链接:除文件的最后一个盘块之外,每个盘块中都存有指向下一个盘块的指针。文件目录包括文件第一块的指针和最后一块的指针。
- 优点:很方便文件拓展,不会有碎片问题,外存利用率高。
- 缺点:只支持顺序访问,不支持随机访问,查找效率低,指向下一个盘块的指针也需要耗费少量的存储空间。
- 如何实现文件的逻辑块号到物理块号的转变?
- 用户给出要访问的逻辑块号i,操作系统找到该文件对应的目录项(FCB)
- 从目录项中找到起始块号,若i>0,则查询内存中的文件分配表FAT,往后找到i号逻辑块对应的物理块号。逻辑块号转换成物理块号的过程不需要读磁盘操作。
- 结论: 采用链式分配(显式链接)方式的文件,支持顺序访问,也支持随机访问(想访问i号逻辑块时,并不需要依次访问之前的0~i-1号逻辑块),由于块号转换的过程不需要访问磁盘,因此相比于隐式链接来说,访问速度快很多。
- 显然,显式链接也不会产生外部碎片,也可以很方便地对文件进行拓展。
- 显式链接:把用于链接文件各物理块的指针显式地存放在一张表中,即文件分配表(FAT,File Allocation Table)。一个磁盘只会建立一张文件分配表。开机时文件分配表放入内存,并常驻内存。
- 优点:很方便文件拓展,不会有碎片问题,外存利用率高,并且支持随机访问。相比于隐式链接来说,地址转换时不需要访问磁盘,因此文件的访问效率更高。
- 缺点:文件分配表需要占用一定的存储空间。
- 如何实现文件的逻辑块号到物理块号的转变?
- 用户给出要访问的逻辑块号i,操作系统找到该文件对应的目录项(FCB)
- 从目录项中可知索引表存放位置,将索引表从外存读入内存,并查找索引表即可知道i号逻辑块在外存中的存放位置。
- 可见,索引分配方式可以支持随机访问。文件拓展也很容易实现(只需要给文件分配一个空闲块,并增加一个索引表项即可)。但是索引表需要占用一定的存储空间。
- 若每个磁盘块1KB,一个索引表项4B,则一个磁盘块只能存放 256 个索引项。如果一个文件的大小超过了256块,那么一个磁盘块是装不下文件的整张索引表的,如何解决这个问题?
- 链接方案,多层索引,混合索引
- 链接方案,多层索引,混合索引
- 索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表——建立逻辑页面到物理页之间 的映射关系)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
- 若文件太大,索引表项太多,可以采取以下三种方法解决:
- ①链接方案:如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。缺点:若文件很大,索引表很长,就需要将很多个索引块链接起来。想要找到 i 号索引块,必须先依次读入 0~i-1 号索引块,这就导致磁盘I/O次数过多,查找效率低下。
- ②多层索引:建立多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块。还可根据文件大小的要求再建立第三层、第四层索引块。采用 K 层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要 K + 1 次读磁盘操作。缺点:即使是小文件,访问一个数据块依然需要 K+1 次读磁盘。
- ③混合索引:多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)。 优点:对于小文件来说,访问一个数据块所需的读磁盘次数更少。
5. 文件存储空间管理
6. 文件的基本操作
7. 文件共享
- 操作系统为用户提供文件共享功能,可以让多个用户共享地使用同一个文件
- 多个用户共享同一个文件,意味着系统中只有“一份”文件数据。并且只要某个用户修改了该文件的数据,其他用户也可以看到文件数据的变化。
- 如果是多个用户都“复制”了同一个文件,那么系统中会有“好几份”文件数据。其中一个用户修改了自己的那份文件数据,对其他用户的文件数据并没有影响。
8. 文件保护
- 保护文件数据的安全
- 口令保护
- 加密保护
- 访问控制
9. 文件系统的层次结构
- 假设某用户请求删除文件"D:/工作目录/学生信息.xlsx“的最后100条记录
- 用户接口
- 用户需要通过操作系统提供的接口发出上述请求
- 文件目录系统(文件目录)
- 由于用户提供的是文件的存放路径,因此需要操作系统一层一层地查找目录,找到对应的目录项
- 存取控制模块(文件保护)
- 不同的用户对文件有不同的操作权限,因此为了保证安全,需要检查用户是否有访问权限
- 逻辑文件系统与文件信息缓冲区(文件逻辑结构)
- 验证了用户的访问权限之后,需要把用户提供的”记录号“转变为对应的逻辑地址
- 物理文件系统(文件物理结构)
- 知道了目标记录对应的逻辑地址后,还需要转换成实际的物理地址
- 辅助分配模块
- 删除这些记录后,会有一些盘块空闲,因此要将这些空闲盘块回收
- 设备管理模块
- 要删除这条记录,必定要对磁盘设备发出请求
10. 磁盘的结构
11. 磁盘调度算法
12. 减少磁盘延迟时间的方法
- 读取地址连续的磁盘块时,采用(柱面号,盘面号,扇区号)的地址结构可以减少磁头转动消耗的时间
13. 磁盘的管理