文件的物理结构(文件分配方式)

文件的物理结构(文件分配方式)

image


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

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

image

一、顺序分配(连续分配)

重点:

  • 连续分配同时支持顺序访问直接访问(随机访问)
  • 连续分配的文件在顺序读/写时速度最快
  • 物理上采用连续分配的文件不方便扩展
  • 物理上采用连续分配,存储空间利用率低,会产生难以利用的磁盘碎片(可以用紧凑来处理碎片,但是需要耗费很大的时间代价)

image

image

image

image

二、链接分配

(一)隐式链接

理解:说白了就是普通的单向链表

重点:

  • 方便文件扩展
  • 所有的空闲磁盘块都可以被利用,不会有碎片问题,外存利用率高
  • 只支持顺序访问不支持随机访问查找效率低
  • 指向下一个盘块的指针也需要耗费少量的存储空间

image

转换过程:

  1. 用户给出要访问的逻辑块号 i,操作系统1找到该文件对应的目录项(FCB)。
  2. 从目录项中找到起始块号(0号逻辑块),将其读入内存,然后像链表一样逐步向下将每一块读入内存。

最后,读入 i 号逻辑块,总共需要 i+1 次磁盘 I/O

(二)显式链接

引入 FAT 文件分配表 File Allocation Table,把用于链接文件各物理块的指针显示地存放在一张表中

重点:

  • 同时支持顺序访问随机访问(想访问 i 号逻辑块时,并不需要依次访问之前的 0~i-1号逻辑块)

理解:隐式和显式在转换的区别,就在于:

隐式在顺序读取逻辑块的过程中要将每一块都放入内存(这里会执行磁盘 I/O ),才能知道下一块是哪块

显式在加载时会将 FAT 常驻内存,只是一张表,在内存里的这张表上进行一步步向下查找,到了需要的那一块的记录项后才将对应的块读入内存,只对最终需要读取的块进行了磁盘 I/O

  • 不会产生外部碎片,外存利用率高
  • 方便文件扩展
  • 文件分配表的需要占用一定的存储空间

image

转换过程:

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

考试题目中遇到未指明隐式/显式的“链接分配”,默认指的是隐式链接的链接分配(普通链表那个)。

三、索引分配

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

  • 索引块:索引表存放的磁盘块。
  • 数据块:文件数据存放的磁盘块。

——索引表与文件分配表 FAT 的区别:

FAT 是一个磁盘对应一张。索引表是一个文件对应一张。

重点:

  • 支持随机访问
  • 方便文件扩展(只需要给文件分配一个空闲块,并增加一个索引表项即可)

image

转换过程:

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

上述这种最基本的索引分配和显示链接的链接分配比较像。

——引申问题:

若每个磁盘块 1KB ,一个索引表项 4B ,则一个磁盘块只能存放 256 个索引项。如果一个文件的大小超过了 256 块,那么一个磁盘块是装不下文件的整张索引表的,如何解决这个问题?

(一)链接方案

image

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

(二)多层索引

image

image

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

(三)混合索引

顶层索引表的结构更为复杂

image

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

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/853471.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Adobe Animate 2024下载与安装教程】

1、安装包 我用夸克网盘分享了「Animate 2024」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。 链接:下载地址2、安装教程(建议关闭杀毒软件和系统防护) 1) 下载并解压下载的安装包,右击装载2) 双击Setup.exe安装…

jsp前端页面识别不了后端传过来的model-${user.id}

调试: controller 成功接收到参数。并且给model传入数据。界面也跳转了 jsp文件中使用 ${user.id} 获取数据 但是处理的依然是 ${user.id} 而不是传入来的数据。 原因: 默认创建的web,其配置文件 web.xml文件是使用 2.3版本 <!DOCTYPE web-app PUBLIC"-//Sun Micros…

基于ESP32的桌面小屏幕实战[4]:硬件设计之PCB Layout

1. PCB Layout 步骤生成PCB确定PCB layout规范绘制板框尺寸布局 布局规范:按电气性能合理分区,一般分为:数字电路区(即怕干扰、又产生干扰)、模拟电路区(怕干扰)、功率驱动区(干扰源); 完成同一功能的电路,应尽量靠近放置,并调整各元器件以保证连线最为简洁; 对于质…

【C#脚本】C#调用Python脚本的方式(一),以PaddleOCR-GUI为例

以下文章来源于mingupup的学习记录 ,作者DotNet学习交流 前言 每种语言都有每种语言的优势,Python由于其强大的生态,很多任务通过调用包就可以实现,那么学会从C#项目中调用Python脚本完成任务就很重要。C#调用Python代码有多种方式,如果Python那边内容比较多,可以考虑起一…

Derby 数据库介绍(1)--简介

Apache Derby 是 Apache DB 的一个子项目,是一个完全用 Java 实现的开源关系数据库,采用 Apache License 2.0 许可;本文主要介绍其基本概念及安装。 1、Derby 特点 Derby 体积小——基础引擎和嵌入式 JDBC 驱动程序约 3.5MB。Derby 基于 Java、JDBC 和 SQL 标准。Derby 提供…

参数占位符 #{xx} 和 ${xx} 的区别

#{xx} :带有#{}的SQL会采用SQL预编译技术,预编译后的SQL中 #{} 被替换为 “?”,这里的 “?”叫变量占位符,在实际执行SQL时会用“xx”的实际值替换变量占位符,效率更高,可以防止SQL注入SQL预编译:MySQL执行SQL有几个步骤,“查缓存->[语法分析->优化->编译-&…

三文带你轻松上手鸿蒙的 AI 语音 01-实时语音识别

三文带你轻松上手鸿蒙的 AI 语音 01-实时语音识别 前言 HarmonyOSNext中集成了强大的 AI 功能。Core Speech Kit(基础语音服务)是它提供的众多 AI 功能中的一种。 Core Speech Kit(基础语音服务)集成了语音类基础 AI 能力,包括文本转语音(TextToSpeech)及语音识别(Spee…

【原创】ARM64 实时linux操作系xenomai4(EVL)构建安装简述

本文简要记录在瑞芯微RK3588(ARM64)构建安装实时linux操作系统xenomai4的过程,以及实时性测试,希望对你有所帮助!目录0 环境说明1 内核构建2 库编译方式1 交叉编译方式2 本地编译3 测试单元测试hectic:EVL 上下文切换latmus:latency测试4 RK3588 xenomai4实时性能5 总结 本…

最新版chrome如何下载和安装?附安装包

前言 大家好,我是小徐啊。我们在Java开发应用的时候,经常是需要用到浏览器来帮助我们开发的。而浏览器中,谷歌浏览器chrome当属功能最强大的浏览器。今天小徐就来介绍下如何安装chrome。文末附获取方式。 如何安装chrome 首先,双击chrome的安装包,开始安装。然后,可以看到…

[笔记]均分纸牌问题

Index链形均分纸牌每次仅可交换\(1\)张 每次可交换多张环形均分纸牌每次仅可交换\(1\)张 每次可交换多张拓展性很强的贪心问题。或许能推广到树之类的结构上,或者拓展到方案计数问题之类,不过目前还没想好啦。 链形均分纸牌 每次仅可交换\(1\)张 最基础的例题是这样的:有\(n…

掌握PageRank算法核心!你离Google优化高手只差一步!

0 前言 98年前的搜索引擎体验不好:返回结果质量不高:搜索结果不考虑网页质量,而通过时间顺序检索易被钻空:搜索引擎基于检索词检索,页面中检索词出现的频次越高,匹配度越高,这样就会出现网页作弊的情况。有些网页为了增加搜索引擎的排名,故意增加某个检索词频率当时Goo…

ApacheDirectoryStudio如何安装和使用?附安装包

前言 大家好,我是小徐啊。ldap数据库是我们Java开发中,经常会用到的一种数据库。这种数据库是树形结构的,和平常的mysql等数据库还不太一样。但目前对应连接ldap数据库的连接工具比较少,且功能也不强大。今天,小徐就来介绍下一款比较好的连接ldap数据库的连接功能,那就是…