文件管理详解:从逻辑结构到物理存储
文件管理详解:从逻辑结构到物理存储
文件管理是计算机系统中的核心功能之一,涉及文件的逻辑结构、物理存储、基本操作、共享方式以及保护机制等多个方面。本文将系统地介绍这些概念和实现方法,帮助读者深入理解计算机系统中的文件管理机制。
一. 文件的逻辑结构
文件的逻辑结构是指在用户看来,文件内部的数据应该是如何组织起来的。
1- 无结构文件
文件内部的数据就是一系列二进制流或字符流组成,又称流式文件,如.txt文件
2- 有结构文件
由一组相似的记录组成,又称记录式文件。每条记录由若干个数据项组成,每条记录有一个数据项作为关键字。
a-顺序文件(默认各记录在物理上顺序存储)
文件中的记录一个接一个地顺序排列,记录可以是定长的或可变长的。各个记录在物理上可以顺序存储或链式存储。
顺序存储:逻辑上相邻的记录物理上也相邻
链式存储:逻辑上相邻的记录物理上不一定相邻
串结构:记录之间的顺序与关键字无关(通常按照记录存入的时间决定记录的顺序)
顺序结构:记录之间的顺序按关键字顺序排列
b-索引文件
建立一张索引表以加快文件检索的速度。每条记录对应一个索引项,索引表本身是定长记录的顺序文件。
c-索引顺序文件
建立一张索引表,但与索引文件不同的是,并不是每个记录对应一个索引项,而是一组记录对应一个索引项(例如:查字典)
3- 文件目录
一个文件对应一个FCB(文件控制块),一个FCB就是一个文件目录项,多个FCB组成文件目录。FCB的有序集合称为文件目录。FCB中包括文件的物理位置信息,但不包括FCB的物理位置信息。
目录结构
a-单级目录结构
按名存取
缺点:不允许文件重名。
b-两级目录结构
主文件目录:记录用户名及相应用户文件目录的存放位置
用户文件目录:记录用户文件的FCB
允许不同用户的文件重名
缺点:不能对文件分类
c-多级目录结构
用文件路径名标识文件
从根目录出发的路径称为绝对路径。
从当前目录出发的路径称为相对路径。
缺点:不便于实现文件共享
d-无环图目录结构
在多级目录结构的基础上,增加一些指向同一节点的有向边。
索引结点
二. 文件的物理结构
文件的物理结构是指在操作系统看来,文件的数据是如何存放在外存中的。
1- 对非空闲磁盘块的管理
类似于内存分页,磁盘中的存储单元也会被分为一个个磁盘块。通常,磁盘块的大小与内存块、页面的大小相同。
a- 连续分配
每个文件在磁盘上占有一组连续的块
物理块号 = 起始块号 + 逻辑块号
优点:支持随机访问,在顺序访问时速度最快
缺点:不方便文件拓展,存储空间利用率低,会产生磁盘碎片
b- 链接分配
为文件分配离散的磁盘块,然后用指针链接。
隐式链接
除了文件的最后一个磁盘块之外,每个磁盘块中都会保存指向下一个盘块的指针,指针对用户透明。
优点:很方便文件拓展,不会有碎片问题,外存利用率高
缺点:不支持随机访问
显式链接
文件分配表(FAT):把用于链接文件各物理块的指针显式地存放在一张表中。
一个磁盘只会建立一张FAT。FAT常驻内存。
优点:很方便文件拓展,不会有碎片问题,外存利用率高,支持随机访问,比隐式链接访问效率高。
缺点:FAT需要占用一定的存储空间。
c- 索引分配
为文件分配离散的磁盘块,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块。索引表存放的磁盘块称为索引块,文件数据存放的磁盘块称为数据块。
一个文件对应一张索引表
如何解决一个磁盘块装不下一个文件的整张索引表?
①链接方案
如果索引表太大,一个索引块装不下,那么可以将其拆分,用指针链接即可
②多层索引
建立多层索引类似于多级页表
采用k层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要k+1次读盘操作
③混合索引
多种索引分配方式的结合
2- 对空闲磁盘块的管理
a- 文件卷(逻辑卷)概念
将物理磁盘划分为一个个文件卷,文件卷分为目录区和文件区
b- 目录区与文件区
目录区存放FCB、空闲表、位示图、超级块等用于文件管理的数据
文件区存放文件数据
c- 管理方法
①空闲表法
与内存管理中的动态分区分配类似
②空闲链表法(空闲盘块链、空闲盘区链)
空闲盘块链:适用于离散分配
空闲盘块链:离散连续都适用
③位示图法
每个二进制位对应一个盘块,0代表盘块空闲,1代表盘块已分配。
若盘号、字号、位号从0开始,字长为n
(字号 i , 位号 j )的二进制位对应的盘块号为b = n * i + j
b号盘块对应的字号 i = b / n,位号 j = b % n
离散和连续分配都适用
④成组链接法
超级块中记录了下一组的空闲盘块数和下一组的空闲盘块号
三. 文件的基本操作
1- 创建文件
Create系统调用
①参数
所需的外存空间大小
文件存放路径
文件名
②过程
在外存中找到文件所需的空间
根据文件存放的路径信息找到该目录对应的目录文件,在目录中创建该文件对应的目录项
2- 删除文件
Delete系统调用
①参数
文件存放路径
文件名
②过程
根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项
回收文件占用的磁盘块
3- 读文件
Read系统调用
读指针指向外存,将用户指定大小的数据读入用户指定的内存区域中(从外存读入内存)
4- 写文件
Write系统调用
将文件数据从内存写出外存
5- 打开文件
Open系统调用
①参数
文件存放路径
文件名
对文件的操作类型(rw)
②过程
根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项,检查该用户是否有指定的操作权限
将目录项复制到内存中的打开文件表中
6- 关闭文件
Close系统调用
①过程
将进程的打开文件表相应表项删除
回收分配给该文件的内存空间等资源
系统打开文件表的打开计数器count减1,若count = 0 ,则删除对应的表项
四. 文件共享
共享与复制:
①多个用户共享一个文件,意味着系统只有一份文件数据。并且只要某个用户修改了该文件的数据,其他用户也可以看到文件数据的变化。
②多个用户都复制了同一个文件,系统中会有多份文件数据。其中一个用户修改了自己的文件数据,其他用户并不会看到文件数据的变化。
1- 基于索引结点的共享方式(硬链接)
索引结点中设置一个链接计数变量count,用于表示链接到本索引结点上的用户目录项数。当count = 0 时系统负责删除文件。
2- 基于符号链的共享方式(软链接)
在一个Link型的文件中记录共享文件的存放路径,类似于快捷方式
五. 文件保护
保护文件数据的安全
1- 口令保护
用户请求访问该文件时必须提供口令
2- 加密保护
使用某个密码对文件进行加密,在访问文件时需要提供正确的密码才能对文件进行正确的解密。
3- 访问控制
在每个文件的FCB中增加一个访问控制列表,该表中记录了各个用户可以对该文件执行哪些操作。
一些注意:
对一个文件的访问常由用户访问权限和文件属性共同限制。
从用户的观点看,操作系统中引入文件系统的目的是实现按名存取
一个文件系统可以存放的文件数量受限于文件控制块的数量
一个文件系统可以放在多个磁盘上
成组链接法需要使用空闲盘块号栈