文件存储空间管理
存储空间的划分与初始化
-
存储空间的划分:将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘)
例如: 安装Windows操作系统时,一个必经步骤是-- 为磁盘分区(C:盘、D:盘、E:盘等)如下图
- 存储空间的初始化:将各个文件卷划分为目录区、文件区。
目录区主要存放文件目录信息(FCB)、用于磁盘存储空间管理的信息
文件区用于存放文件数据 - 有的系统支持超大型文件,可支持由多个物理磁盘组成一个文件卷
- 存储空间的初始化:将各个文件卷划分为目录区、文件区。
存储空间管理
空闲表法 - 适用于“连续分配方式”
- 空闲盘块表
第一个空闲盘块号 | 空闲盘块数 |
---|---|
0 | 2 |
5 | 1 |
13 | 2 |
18 | 3 |
23 | 1 |
- 如何分配磁盘块:与内存管理中动态分区分配类似,为一个文件分配连续的存储空间。同样可采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间。
- 如何回收磁盘块:与内存管理中动态分区分配类似,当回收某个存储区时需要有四种情况——①回收区的前后都没有相邻空闲区;②回收区的前后都是空闲区;③回收区前面是空闲区;④回收区后面是空闲区。**总之,回收时需要注意表项的合并问题。
空闲链表法
-
空闲盘块链:以盘块为单位组成一条空闲链
操作系统保存着链头、链尾指针 如何分配:若某文件申请K个磁盘块,则从链头开始依次摘下K个盘块分配,并修改空闲链的链头指针 如何回收:回收的盘块依次挂到链尾,并修改空闲链的链尾指针 (与链表操作一致) 适用于离散分配的物理结构。为文件分配多个盘块时可能要重复多次操作。
-
空闲盘区链:以盘区为单位组成一条空闲链
连续的空闲盘块组成一个空闲盘区 空闲盘区中的第一个盘块内记录了盘区的长度、下一个盘区的指针 如何分配:某文件申请K个盘块,则可以采用首次适应、最佳适应等算法,从链头开始检索,按照算法规则找到一个符合 要求的空闲盘区, 分配给文件。若没有合适的连续空闲块,也可以将不同盘区的盘块同时分配给一个文件, 注意分配后可能要修改相应的链指针、盘区大小等数据 如何回收:若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。若回收区没有和任何空闲区相邻,将回收 区作为单独的一个空闲盘区挂到链尾。
位示图法
-
位示图——连续分配、离散分配都适用
每个二进制对应一个盘块。本例中,“0”代表盘块空闲,“1”代表盘块已分配。
位示图一般用连续的“字”来表示。如本例中一个字的字长为16位,字中的每一位对应一个盘块。因此可用(字号,位号)对应一个盘块号。盘块号与(字号,位号)相互转换的公式 本例中盘块号、字号、位号从0开始,若n表示字长,则 (字号,位号)=(i,j)的二进制位对应的盘块号b=ni+j b号盘块对应的字号i=b/n,位号j=b%n
如何分配:若文件需要K个块, ①顺序扫描位示图,找到K个相邻或不相邻的“0”; ②根据字号、位号算出对应的盘块号,将相应盘块分配给文件; ③将相应位设置为“1”。
成组链接法
文件共享
基于索引节点的共享方式(硬链接)
- 索引结点,是一种文件目录瘦身策略。由于检索文件时只需要用到文件名,因此可以将除了文件名之外的其他信息放到索引结点中。这样目录项就只需要包含文件名、索引结点指针。
- 索引结点中设置一个连接计数变量count,用于标识链接到本索引节点上的用户目录项数。
- 若某个用户决定“删除”文件,则只是把用户目录中与改文件对应的目录项删除,且索引结点的count值减1。
基于符号链的共享方式(软链接)
- 在一个Link型文件中记录共享文件的存放路径(类似于Windows中的快捷方式)
- 即使软链接指向的共享文件已被删除,Link型文件依然存在,只是通过Link型文件中的路径去查找共享文件会失败(找不到对应目录项)
- 由于用软链接的方式访问共享文件时要查询多级目录,会有多次磁盘I/O
文件保护
口令保护
为文件设置一个“口令”(如:abc1123),用户请求访问改文件时必须提供“口令”
优点:保存口令的空闲开销不多,验证口令的时间开销也小
缺点:正确的口令存放在系统内部,不够安全
加密保护
使用某个“密码”对文件进行加密,在访问文件时需要提供正确的“密码”才能对文件进行正确的解密
Eg:一个最简单的加密算法——异或加密
优点:保密性强,不需要再系统中存储“密码”
缺点:编码/译码,或者说加密/解密需要花费一定时间
访问控制
在每个文件的(FCB)中增加一个访问控制列表(ACL),该表中记录了各个用户可以对该文件执行哪些操作
实现灵活,可以实现复杂的文件保护功能
文件系统的层次结构
磁盘结构
磁盘、磁道、扇区
-
磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据
-
磁盘的盘面被划分为一个个磁道。一个“圈”就是一个磁道
-
一个磁道又被划分成一个个扇区,每个扇区就是一个“磁盘块”。各个扇区存放的数据量相同。
-
最内侧的磁道上的扇区面积最小,因此数据密度最大
在磁盘中读/写数据
- 需要把“磁头”移动到想要读/写的扇区所在的磁道
- 磁盘会转起来,让目标扇区从磁头下面划过,才能完成对扇区的读/写操作
盘面/柱面的概念
- 磁盘有多个盘片“摞”起来,每个盘片有两个盘面
- 所有盘面中相对位置自相同的磁道组成柱面
磁盘的物理地址
- 可用**(柱面号,盘面号,扇区号)**来定位任意一个“磁盘块”。
磁盘的分类
根据磁头是否可移动
- 活动头磁盘
磁头可以移动的称为活动头磁盘,磁臂可以来回伸缩来带动磁头定位磁道 - 固定头磁盘
磁头不可移动的称为固定头磁盘。这种磁盘中每个磁道有一个磁头
根据盘片是否可更换
- 固定盘磁盘
- 可换盘磁盘
磁盘调度算法
一次磁盘读/写操作需要的时间
- 寻找时间(寻道时间)Ts:在读/写数据之前,将磁头移动到指定磁道所花的时间
① 移动磁头臂 是需要时间的。假设耗时为s;
② 移动磁头也是需要时间的。假设磁头是匀速移动,每跨越一个磁道耗时为m,总共需要跨越n条磁道。则:
寻道时间Ts=s+m*n - 延迟时间Tr:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。设磁盘转速为r(单位:转/秒,或转/分),则平均所需的延迟时间Tr=(1/2)*(1/r)=1/2r
- 传输时间Tt:从磁盘读出或向磁盘写入数据所经历的时间,假设磁盘转速为r,此次读/写的字节数为b,每个磁道上的字节数为N。则:
传输时间Tt=(1/r)*(b/N)=b/(rN)