-
文件的物理结构
文件的物理结构
- 对空闲磁盘块的管理
- 对非空闲磁盘块的管理(存放文件数据的磁盘块)
文件块、磁盘块
- 外存的分块类似我们的内存分页,我们的磁盘中的存储单元也会被分为一个个块/磁盘块/物理块,很多磁盘块的大小与内存卡,页面的大小相同
- 内存和磁盘之间的数据交换都是以块为单位进行
- 在内存管理中,进程的逻辑地址空间被分为了一个个页面,同样的,在外存的管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为了一个一个的磁盘块,于是文件的逻辑地址也可以表示为(逻辑块号,块内地址)的形式
- 用户通过逻辑地址来操作自己的文件,操作系统要负责从逻辑地址到物理地址的映射
文件的物理结构(文件的分配方式)
连续分配
- 连续分配方式要求每个文件在磁盘上占用一组连续的块
- 因为是连续分配,所以我们在我们目录项中只需要记录对应的起始块号,我们可以通过起始块号+逻辑块号==物理块号
- 因此连续分配支持顺序访问和直接访问(即随机访问)
- 随机访问:就是需要哪个逻辑块的数据,直接能得到对应的磁盘块地址
- 顺序访问:读取某个磁盘块,需要我们移动磁头,所以访问的两个磁盘块相隔太远,或导致磁头移动时间太长,连续分配的文件在读取数据的速度最快
连续分配的缺点
- 因为必须要连续的磁盘块,所以可能会产生难以利用的磁盘碎片,降低存储空间的利用率
- 由于需要连续的磁盘空间,所以文件不方便扩展
链接分配
- 链接分配采用的是离散分配的方式,可以为文件分配离散的磁盘块
隐式链接
- 对于隐式链接我们对应的目录项需要记录起始块号和结束块号,当然还需要除了文件的最后一个磁盘块之外,每个磁盘块都需要保存指向下一个盘块的指针(对用户是透明的)
- 对于一个文件,从目标项中找到起始块号,将起始块号读入内存,然后就可以知道1号逻辑块的物理块号,依次类推,如果想读第n个逻辑块,需要n+1次磁盘I/0
- 采用隐式链接方式的文件,只支持顺序访问,不支持随机访问,查找效率低
显式链接
- 把我们用于链接文件各物理块的指针显式存放在一张表中——文件分配表
- 文件分配表中存放物理块号和对应的下一块的块号
- 我们文件的目录项存储我们的物理起始块号
- 一个磁盘仅设置一张FAT,开机的时候,就将FAT读入内存,并常驻内存
- 因为FAT各个表项在物理上也是连续存储,且每个表项的长度相同,因此物理块号字段可以隐藏
- 这种文件分配表是常驻内存的,所以查询这个表不会涉及到I/O操作,如果我们想找逻辑上第N个逻辑块,我们就先从目录项中找到对应的起始块号,到对应的FAT中找对应的下一块,找寻N次也就是我们的第N个逻辑块的物理块地址
- 这种显式链接,也支持顺序访问,也支持随机访问(因为想访问i号逻辑块,并不需要依次访问前i-1个逻辑块)
链接方式总结
索引分配方式
- 索引分配方式允许文件离散的地分配在各个磁盘块中,系统为每个文件建立一个索引表(显式链接的链式分配方式中,文件分配表是一个磁盘对应一张),索引表中记录了文件的各个逻辑块对应的物理块(类似我们在内存管理中的页表——建立逻辑页面到物理页之间的映射关系)
- 索引表存放的磁盘称为索引块,文件数据存放的磁盘块称为数据块
- 我们的文件的目录项中存放对应的索引块(物理地址)
- 怎么将逻辑块号转换成物理块号
- 首先用户提出要访问的逻辑块号N,操作系统找到该文件对应的目录项(FCB)
- 从目录项中中找到索引块的地址,将索引块从外存读入内存,根据索引表和逻辑块号找到对应的物理块号
- 索引分配方式也是支持随机访问的,文件拓展也很容易实现
遇到的问题
- 如果一个磁盘1KB,一个索引项表4B,那么一个磁盘块也就是存放256个索引项,如果一个文件很大,一个磁盘块是装不下的,而且我们的索引项需要连续存储
链接方案
- 索引表太大,一个索引块装不下,可以将多个索引块链接存放起来
- 这种方式是低效的:如果我们的索引块有很大,那么也会涉及很多的I/O操作,想访问最后一个块,需要遍历前面的块
多层索引
- 类似我们的多级页表(我们的页表太大,采用多级页表,利用分割逻辑地址,获得对应的一级页表的页表项和二级页表项)
- 我们使第一层索引块指向第二层的索引块…
- 我们页目录项存放着我们的一级索引表的索引块,索引块中放着二级索引表的索引块
- 我们想要第N个逻辑块的物理块地址 一个索引表能放256个索引项 先除256 得到的数说明在第几个二级索引表,然后通过取余获得在第二级索引表的哪个位置
- N层索引说明需要N+1次磁盘I/O
混合索引
-
相关阅读:
在ubuntu(20.04)上搭建基于docker的yolov5环境(GPU:3060)
电子制造行业的数字化转型突破点在哪?精益制造是关键
[HDLBits] Exams/m2014 q4k
itk中图像2d-3d配准整理
Acwing.889 满足条件的01序列
C++文件操作
Spring Boot 技术架构图(InsCode AI 创作助手辅助)
个人课设---玩家血条(包括攻击掉血,复活重生功能)
Abbexa丨Abbexa粪便样本收集和稳定试剂盒收集程序
学习Maven Web 应用
-
原文地址:https://blog.csdn.net/qq_50985215/article/details/127698417