当前位置: 首页 > news >正文

文件的物理结构(连续分配,链接分配,索引分配)

1.文件块,磁盘块

类似于内存分页,磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。
很多操作系统中,磁盘块的大小与内存块、页面的大小相同

内存与磁盘之间的数据交换(即读/写操作、磁盘I/O)都是以“块”为单位进行的。
即每次读入一块,或每次写出一块。
在这里插入图片描述

  • 在内存管理中,进程的逻辑地址空间被分为一个一个页面。
  • 在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为了一个一个的文件“块”
  • 文件的逻辑地址也可以表示为(逻辑块号,块内地址)的形式。
  • 操作系统为文件分配存储空间都是以块为单位的。
  • 用户通过逻辑地址来操作自己的文件,操作系统要负责实现从逻辑地址到物理地址的映射。

2.连接分配

连续分配方式要求每个文件在磁盘上占有一组连续的块

在这里插入图片描述

1.地址转换

  1. 用户给出要访问的逻辑块号,操作系统找到该文件对应的目录项(FCB)
  2. 物理块号=起始块号+逻辑块号
  3. 当然,还需要检查用户提供的逻辑块号是否合法(逻辑块号≥长度就不合法)

在这里插入图片描述

2.优点

  • 可以直接算出逻辑块号对应的物理块号,因此连续分配支持顺序访问和直接访间(即随机访问)
  • 连续分配的文件在顺序读/写时速度最快(读取某个磁盘块时,需要移动磁头。访问的两个磁盘块相隔越远,移动磁头所需时间就越长。)

3.缺点

1.不便于拓展

在这里插入图片描述

  1. 若此时文件A要拓展,需要再增加一个磁盘块(总共需要连续的4个磁盘块)。
  2. 由于采用连续结构,因此文件A占用的磁盘块必须是连续的。
  3. 因此只能将文件A全部“迁移”到绿色区域。

结论:物理上采用连续分配的文件不方便拓展

2.产生磁盘碎片

在这里插入图片描述
结论:物理上采用连续分配,存储空间利用率低,会产生难以利用的磁盘碎片

可以用紧凑来处理碎片,但是需要耗费很大的时间代价。

3.链接分配

链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。

1.隐式链接

  1. 用户给出要访问的逻辑块号i,操作系统找到该文件对应的目录项(FCB)
  2. 从目录项中找到起始块号(即0号块),
  3. 将号逻辑块读入内存,由此知道1号逻辑块存放的物理块号,
  4. 于是读入1号逻辑块,再找到2号逻辑块的存放位置…以此类推。
  5. 因此,读入i号逻辑块,总共需要i+1次磁盘I/O。

在这里插入图片描述

结论(缺点):采用链式分配(隐式链接)方式的文件,只支持顺序访问,不支持随机访问,查找效率低。
另外,指向下一个盘块的指针也需要耗费少量的存储空间。

1.文件的拓展

若此时要拓展文件,则可以随便找一个空闲磁盘块,挂到文件的磁盘块链尾,并修改文件的FCB。

结论(优点):采用隐式链接的链接分配方式,很方便文件拓展
另外,所有的空闲磁盘块都可以被利用,不会有碎片问题,外存利用率高

2.显示链接

把用于链接文件各物理块的指针显式地存放在一张表中。
即文件分配表(FAT,File Allocation Table)

1.例题

假设某个新创建的文件“aaa”依次存放在磁盘块2→5→0→1,
假设某个新创建的文件“bbb”依次存放在磁盘块4→23→3

在这里插入图片描述
注意:一个磁盘仅设置一张FAT
开机时,将FAT读入内存,并常驻内存
FAT的各个表项在物理上连续存储,且每一个表项长度相同,因此“物理块号”字段可以是隐含的。

2.地址转换
  1. 用户给出要访问的逻辑块号i,操作系统找到该文件对应的目录项(FCB)
  2. 从目录项中找到起始块号,若i>0,则查询内存中的文件分配表FAT
  3. 往后找到i号逻辑块对应的物理块号。
  4. 逻辑块号转换成物理块号的过程不需要读磁盘操作

结论(优点):采用链式分配(显式链接)方式的文件,支持顺序访问,也支持随机访问(想访问i号逻辑块时,并不需要依次访问之前的0~ i-1号逻辑块),
由于块号转换的过程不需要访问磁盘,因此相比于隐式链接来说,访问速度快很多。

显然,显式链接也不会产生外部碎片,也可以很方便地对文件进行拓展

3.缺点

文件分配表的需要占用一定的存储空间。

注意:考试题目中遇到未指明隐式/显式的“链接分配”,默认指的是隐式链接的链接分配。

4.索引分配

索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表
索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表――建立逻辑页面到物理页之间的映射关系)。

索引表存放的磁盘块称为索引块
文件数据存放的磁盘块称为数据块

1.例题

假设某个新创建的文件“aaa”的数据依次存放在磁盘块2→5 →13→>9 。
7号磁盘块作为“aaa”的索引块,索引块中保存了索引表的内容。

在这里插入图片描述

注:在显式链接的链式分配方式中,文件分配表FAT是一个磁盘对应一张。
而索引分配方式中,索引表是一个文件对应一张。

索引表中的“逻辑块号”是可以隐含的。

2.地址转换

  1. 用户给出要访问的逻辑块号i,操作系统找到该文件对应的目录项(FCB)
  2. 从目录项中可知索引表存放位置,将索引表从外存读入内存,并查找索引表即可只i号逻辑块在外存中的存放位置。

3.优缺点

  • 优点:索引分配方式可以支持随机访问文件拓展也很容易实现(只需要给文件分配一个空闲块,并增加一个索引表项即可)
  • 缺点:索引表需要占用一定的存储空间

4.大文件存储问题

若文件太大,索引表项太多,可以采取以下三种方法解决:

1.链接方案

如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。

在这里插入图片描述

  1. 假设磁盘块大小为1KB,一个索引表项占4B,则一个磁盘块只能存放256个索引项。
  2. 若一个文件大小为256*256KB =65,536 KB= 64MB
  3. 该文件共有256256个块,也就对应256256个索引项,也就需要256个索引块来存储,这些索引块用链接方案连起来。
  4. 若想要访问文件的最后一个逻辑块,就必须找到最后一个索引块(第256个索引块),而各个索引块之间是用指针链接起来的,因此必须先顺序地读入前255个索引块

缺点:若文件很大,索引表很长,就需要将很多个索引块链接起来。想要找到i号索引块,必须先依次读入0~i-1号索引块,这就导致磁盘I/O次数过多,查找效率低下

2.多层索引

建立多层索引(原理类似于多级页表)。
使第一层索引块指向第二层的索引块。
还可根据文件大小的要求再建立第三层、第四层索引块。

在这里插入图片描述

  1. 假设磁盘块大小为1KB,一个索引表项占4B,则一个磁盘块只能存放256个索引项。
  2. 若某文件采用两层索引,则该文件的最大长度可以到2562561KB= 65,536 KB = 64MB
  3. 可根据逻辑块号算出应该查找索引表中的哪个表项。
  4. 如:要访问1026号逻辑块,则1026/256 = 4,1026%256=2
  5. 因此可以先将一级索引表调入内存,查询4号表项,
  6. 将其对应的二级索引表调入内存,再查询二级索引表的2号表项即可知道1026号逻辑块存放的磁盘块号了。
  7. 访问目标数据块,需要3次磁盘I/O

若采用三层索引,则文件的最大长度为256256256*1KB=16GB
类似的,访问目标数据块,需要4次磁盘I/O

总结:采用K层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要K+1次读磁盘操作。

缺点:即使是小文件,访问一个数据块依然需要K+1次读磁盘。

3.混合索引

多种索引分配方式的结合。
例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)。

在这里插入图片描述
对于小文件,只需较少的读磁盘次数就可以访问目标数据块。(一般计算机中小文件更多)

优点:对于小文件来说,访问一个数据块所需的读磁盘次数更少。

在这里插入图片描述

相关文章:

文件的物理结构(连续分配,链接分配,索引分配)

1.文件块,磁盘块 类似于内存分页,磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。 很多操作系统中,磁盘块的大小与内存块、页面的大小相同。 内存与磁盘之间的数据交换(即读/写操作、磁盘I/O)都是以“块”为…...

vue2 解密图片地址(url)-使用blob文件-打开png格式图片

一、背景 开发中需要对加密文件进行解码,如图片等静态资源。 根据后端给到的url地址,返回的是图片文件,但是乱码的,需要解码成png图片进行展示 二、请求接口 将后端返回的文件转为文件流,创建Blob对象来存储二进制…...

cuda PyTorch

1. GPU对应的CUDA版本 nvidia-smi CUDA Version: 12.2 GPU diver 大于cuda toolkit, pytorch 版本根据cuda toolkit 2. 查看nvcc的版本(即cuda toolkit 版本) nvcc --version Cuda compilation tools, release 12.2, V12.2.91 Build cud…...

vue视频直接播放rtsp流;vue视频延迟问题解决;webRTC占cpu太大卡死问题解决;解决webRTC播放卡花屏问题:

播放多个视频 <div class"video-box"><div class"video"><iframe style"width:100%;height:100%;" name"ddddd" id"iframes" scrolling"auto" :src"videoLeftUrl"></iframe>&l…...

leetcode_2316 统计无向图中无法互相到达点对数

1. 题意 给定一个无向图&#xff0c; 统计无法互相到达的点对数。 统计无法互相到达点对数 2. 题解 其实还是求联通块&#xff0c;求联通块可以使用搜索进行标记。还要求得联通块中元素的大小。 联通块其实也就是不相交集合&#xff0c;也可以用并查集来做。 每求得一个联…...

数据结构知识点总结

一、常见的数据结构 数组&#xff0c;栈&#xff0c;队列&#xff0c;链表&#xff0c;散列表&#xff0c;二叉树&#xff0c;堆&#xff0c;跳表&#xff0c;图&#xff0c;树。 1. 数组&#xff1a; 数组的元素在内存中存储是连续存放的&#xff0c;占有连续的存储单元&am…...

【经济研究】数字技术创新与中国企业高质量发展—来自企业数字专利的证据

数据简介&#xff1a;在当前数字经济时代&#xff0c;数字技术创新已成为驱动中国经济发展的核心要素&#xff0c;中国经济由高速增长转向高质量发展的“新常态”发展阶段&#xff0c;开启了革新经济增长方式&#xff0c;优化产业结构&#xff0c;寻找新的经济增长动能关键期。…...

Windows运维相关经验技巧

常用工具 在线PS Photoshop在线 FAQ 电脑能上网&#xff0c;浏览器上不了网 # 错误原因&#xff1a; 设置了网络代理&#xff0c;浏览器无法通过网络代理上网# 解决办法 关闭网络代理 &#xff08;1&#xff09;wini&#xff0c;打开设置 &#xff08;2&#xff09;网络和I…...

AYIT嵌入式实验室2023级C语言训练1-4章训练题

文章目录 前言1. 判断闰年2.(ab-c)*d的计算问题3.计算三角形的周长和面积4.牛牛的等差数列5.判断字母6.网购7. 牛牛的通勤8.获得月份天数9.大小写转换10.KiKi说祝福语11.小乐乐求和12.奇偶统计13.KiKi求质数个数14.乘法表15.牛牛学数列16.牛牛学数列217.数位之和18.魔法数字变换…...

trino tpcds测试

先下载tpcds-kit&#xff08;有Linux和macOS&#xff09;&#xff0c;根据其文档生成数据和查询的sql。 然后hive-testbench&#xff0c;在ddl-tpcds/text/alltables.sql中有建表语句&#xff08;用hive建表&#xff09;。 建完表后LOAD DATA local INPATH "/Users/ding…...

SpringCloud学习笔记(上):服务注册与发现:Eureka、Zookeeper、Consul+负载均衡服务调用:Ribbon

壹、零基础 一、微服务架构零基础理论入门 SpringCloud分布式微服务架构的一站式解决方案&#xff0c;是多种微服务架构落地技术的集合体&#xff0c;俗称微服务全家桶。 二、从2.2.x和H版开始说起 springboot版本选择&#xff1a; git源码地址&#xff1a;https://github.…...

JavaPTA练习题 7-3 身体质量指数(BMI)测算

体重是反映和衡量一个人健康状况的重要标志之一&#xff0c;过胖和过瘦都不利于健康&#xff0c;BMI&#xff08;身体质量指数&#xff09;计算方法&#xff1a;体重&#xff08;以千克为单位&#xff09;除以身高&#xff08;以米为单位&#xff09;的平方。中国成人正常的BMI…...

类的属性和方法(java)

类和对象的使用 创建类&#xff0c;设计类的成员创建类的对象通过“对象.属性”或“对象.方法”调用对象的结构 代码 public class Per {public static void main(String[] args) {// TODO Auto-generated method stub//创建Person类的对象Person p1 new Person();//Scanne…...

C++模拟实现——list

一、成员变量及其基本结构 1.基本结构模型 本质是一个带头双向循环列表&#xff0c;将节点进行封装&#xff0c;并且为了方便使用&#xff0c;进行重定义 2.节点的封装定义 template<class T>//定义节点struct list_node{list_node<T>* _prev;list_node<T>…...

FPGA的音乐彩灯VHDL流水灯LED花样,源码和视频

名称&#xff1a;FPGA的音乐彩灯VHDL流水灯LED 软件&#xff1a;Quartus 语言&#xff1a;VHDL 代码功能&#xff1a; &#xff08;1&#xff09;设计一彩灯控制电路&#xff0c;按要求控制8路&#xff08;彩灯由发光 二极管代替&#xff0c;受实验箱限制&#xff0c;多路同…...

企业知识库软件,快速构建企业知识分享与团队协同的软件

企业知识库是一种特殊的在线协同文档工具&#xff0c;支持包括FAQ、文档、视频、知识图谱等。从本质上讲&#xff0c;它是基于企业知识库软件从而实现内部或外部知识的沉淀、集合、更新、共享等&#xff0c;能为员工或客户提供常见问题的标准回答。 今天我就基于HelpLook &…...

Java,输出一个10行的杨辉三角

据图可以发现&#xff0c;杨辉三角是每行的首元素和末元素都为1&#xff0c;中间的元素都是等于它上面的元素加上左上角的元素。 首先&#xff0c;先完成二数组的创建和初始化&#xff0c;第一行的长度为一&#xff0c;第二行的长度为二……以此类推。所以&#xff0c;外元素的…...

Java版Http请求post和get两种调用实现

在实际项目中常涉及到相互调用&#xff0c;对于http接口的调用&#xff0c;需要经过建立连接&#xff0c;拼接参数&#xff0c;调用等步骤&#xff0c;记录下来&#xff0c;方便查看。 第一步、引入jar包 pom中引入apache的httpclient包 <dependency><groupId>c…...

yjs demo: 多人在线协作画板

基于 yjs 实现实时在线多人协作的绘画功能 支持多客户端实时共享编辑自动同步&#xff0c;离线支持自动合并&#xff0c;自动冲突处理 1. 客户端代码&#xff08;基于Vue3&#xff09; 实现绘画功能 <template><div style"{width: 100vw; height: 100vh; over…...

虹科分享 | 赋能物流机器人:CANopen通信如何发挥重要作用?

现代物流领域迅速融入了技术进步&#xff0c;特别是随着自主机器人的兴起&#xff0c;这一趋势越发明显。确保这些机器人在复杂的仓库环境中精确运行的一个关键方面是CANopen通信协议。该协议集成了各种组件&#xff08;电机、传感器、摄像头和先进的电池系统&#xff09;&…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中&#xff0c;提供了一系列静态方法用于操作数组&#xff08;如排序、搜索、填充、比较等&#xff09;。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序&#xff08;sort&#xff09; 对数组进行升序…...

ubuntu中安装conda的后遗症

缘由: 在编译rk3588的sdk时&#xff0c;遇到编译buildroot失败&#xff0c;提示如下&#xff1a; 提示缺失expect&#xff0c;但是实测相关工具是在的&#xff0c;如下显示&#xff1a; 然后查找借助各个ai工具&#xff0c;重新安装相关的工具&#xff0c;依然无解。 解决&am…...