建议收藏!操作系统基础:文件系统实现【上】

简介: 建议收藏!操作系统基础:文件系统实现【上】



⚔️1 文件系统的层次结构

🔧1.1 总览

🔧1.2 例子

⚔️2 文件系统的全局结构

🏹2.1 物理格式化(低级格式化)

磁盘在物理格式化后被划分出许多扇区,同时也可能包含坏扇区,磁盘会用备用扇区替代坏扇区,如图。

当操作系统访问到坏扇区时,磁盘会将实际访问的扇区替换成备用扇区,因此坏扇区对于操作系统来说是透明的

🏹2.2 逻辑格式化(高级格式化)

每个分区对应的信息使用分区表来记录

对于UNIX系统来说,磁盘在逻辑格式化后,其内部结构会如图所示

(1)引导块:类似于Windows下的BIOS,负责开机时初始化系统

(2)超级块:操作系统可以通过此块快速找到空闲的磁盘地址

(3)空闲空间管理:里面存储了与空间管理相关的数据结构(比如位视图)

(4)i结点区:里面存储了各文件的索引结点,结点连续存放。索引节点的大小都是相同的,因此可以迅速定位到任何一个索引结点

(5)根目录:任何文件的存储都必须在根目录下

(6)其他文件:在格式化后为空

🏹2.3 文件系统在内存当中的结构

⚗️2.3.1 结构示意图

⚗️2.3.2 外存

存放文件以及文件目录

⚗️2.3.3 内核区

(1)目录缓存

操作系统会将近期访问过的文件目录复制一份放在内核区中,这样当需要再次访问时就不需要再次去外存中寻找了,可以提高访问速度。

(2)系统打开文件表与用户打开文件表

参考之前的笔记

⚗️2.3.4 用户区

(1)文件描述符/文件句柄

当我们打开一个文件时,操作系统会放回一个句柄(类似于指针),方便我们对文件进行操控(联想C语言的文件操作)

Fp = file.open(“./test.txt”)

⚔️3 虚拟文件系统与文件挂载

🦯3.1 普通的文件系统

不同的文件介质,他们提供的文件调用接口可能不一样,如图所示。所以程序员在对文件进行操作时,还需要考虑文件存储在什么地方,这显然非常不方便。

🦯3.2 虚拟文件系统

📡3.2.1 什么是虚拟文件系统

为了解决普通文件系统的缺点,操作系统引入虚拟文件系统,如图所示。它提供了标准的接口,程序员在进行文件调用时只需要使用同一个标准函数,而这些函数具体到不同文件系统中的实现就有虚拟文件系统来完成。

📡3.2.2 虚拟文件系统的特点

(1)提供标准接口

(2)标准函数具体到不同文件系统中的实现是由虚拟文件系统提供的,因此必须确保文件系统有虚拟文件系统提供给的功能。因此:

(3)不同文件系统中对于文件的表示可能也不一样,FAT文件系统、UFS文件系统的表示方式分别如图。

因此,虚拟文件在打开一个文件后,都会创建一个同一的VNode结构,里面存放了各种要求的信息,如图。注意:VNode只在主存中存在。

这是虚拟文件系统的第三个特点:

注意到VNode中有一个函数功能指针,这相当于是C语言文件操作中和fopen(“test.txt”)时放回的文件对象。方便程序员对文件进行各种操作。

🦯3.3 文件系统挂载

📡3.3.1 解释

📡3.3.2 文件系统挂载要做的事情

⚔️4 文件存储空间管理

🧪4.1 总览

探讨的对象:空闲的存储空间

🧪4.2 存储空间的划分和初始化

4.2.1 文件卷

在系统初始化的过程中,需要将存储空间划分为C盘、D盘。这些就是文件卷(逻辑盘、逻辑卷)。

4.2.2 目录区与文件区

每个文件卷都会被进一步划分为目录区与文件区。其中:

目录区:

文件区:

4.2.3 注意

一个文件卷是可以由多个物理磁盘组成的

🧪4.3 存储空间管理方法——空闲表法

🔭4.3.1 基本概念

使用一张表记录空闲的存储空间。它一般适用于连续分配方式。

🔭4.3.2 例子

那么此时系统内的空闲表的内容为:

🔭4.3.3 分配空间的方法

(1)首次适应

系统从空闲表的初始点开始寻找,找到第一个可以满足要求的空闲表项,分配空间并修改空闲表

(2)最佳适应

找到一个可以满足要求、且空闲盘块数最小的空闲表项。

(3)最坏适应

找到一个可以满足要求、且空闲盘块数最大的空闲表项。

🔭4.3.4 回收空间的方法

总体与内存管理中的动态分配类似。

(1)回收区的前后都没有相邻空闲区

新增空闲表项

(2)回收区的前后都是空闲区

合并空闲表项

(3)回收区前面是空闲区

修改前面的空闲表项

(4)回收区的后面是空闲区

修改后面的空闲表项

🧪4.4 存储空间管理方法——空闲链表法

🔭4.4.1 分类

空闲盘块链:

空闲盘区链:

🔭4.4.2 空闲盘块链

操作系统需要保存盘块链的链头指针和链尾指针

(1)分配存储空间

(2)回收存储空间

(3)注意

在分配的时候要从链头一个一个摘下磁盘块,所以为文件分配盘块可能重复多次操作

🔭4.4.3 空闲盘区链

(1)分配存储空间

(2)回收存储空间

(3)注意

因为它可以一次为文件分配许多空间,不像空闲盘块链一次只可以分配一个块。

🧪4.5 存储空间管理——位示图法

🔭4.5.1 基本概念

使用一个二进制位表示一个盘块,为1时代表有数据,为0时代表空闲。

🔭4.5.2 注意

①一般来说为了方便管理,位视图一般采用连续的字来表示。比如一台主机的字长为16,则16个盘块的位视图被存储在一个字内。如图所示。

②由盘块号推出(字号、位号)

注意起始位置是从0开始还是从1开始

③由(字号、位号)推出盘块号

🔭4.5.3 分配存储空间

🔭4.5.4 回收存储空间

🧪4.6 存储空间管理方法——成组链接法

UNIX系统采用的方法,适合大型系统

🧪4.7 总结

⚔️5 总结

本文PDF文件下载链接:提取码:ikun

操作系统,如默默守护的守夜者,无声地管理硬件与软件的交流,为计算机创造和谐秩序。

它是无形的引导者,让复杂的任务变得井然有序,为用户提供无忧体验。

操作系统的巧妙设计,让计算机变得更加智能高效,让人与科技之间的交流更加顺畅。

在每一次启动中,它如信任的伙伴,带领我们进入数字世界的奇妙旅程。

渴望挑战操作系统的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多操作系统的奇迹吧。我们推出了引领趋势的💻OS专栏:《OS从基础到进阶》 ,旨在深度探索OS的实际应用和创新。🌐🔍

相关文章
|
Web App开发 Windows
【Windows】 chrome 如何下载网站在线预览PDF文件,保存到本地
【Windows】 chrome 如何下载网站在线预览PDF文件,保存到本地
1384 0
|
5月前
|
机器学习/深度学习 存储 人工智能
算力资源选择指南:如何匹配你的开发需求?
本文作者结合七年分布式计算经验,深入剖析算力卡与服务器的本质区别及其选型策略。从硬件架构看,算力卡专注高性能计算,如A100/H100在矩阵运算效率上提升显著,但文件读写较弱;服务器则是全能型系统,适合多任务场景。在应用场景中,算力卡适用于机器学习训练等浮点密集任务,而服务器在部署和服务支持上更具优势。成本模型显示,算力卡三年TCO更低但运维成本更高,需根据实际需求权衡。最后,作者提供选型决策树,建议根据任务类型、生态需求和负载特征选择合适方案。
200 8
|
6月前
|
消息中间件 存储 Kafka
10倍降本、10倍无损弹性!Kafka Serverless 基础版与专业版重磅发布!
云消息队列 Kafka 版基于 Apache Kafka 构建,提供高吞吐量与高可扩展性的分布式消息队列服务,广泛应用于日志收集、监控数据聚合、流式数据处理及在离线分析等场景,是 AI 与大数据时代企业数据处理体系的核心组件。
|
12月前
|
Web App开发 前端开发 算法
对浏览器内核的理解
【10月更文挑战第10天】
鸿蒙NEXT-HMRouter,在使用router后无法跳转问题解决
作者在使用HMRouter搭建鸿蒙三层架构App时,遇到登录页跳转首页后无法继续跳转的问题。经排查发现,错误原因是在onVisibleAreaChange中直接跳转导致页面生命周期冲突。解决方案是将跳转逻辑移至页面生命周期回调如aboutToAppear中执行,从而确保路由状态正常,成功修复Bug。
204 0
|
7月前
|
监控 JavaScript 前端开发
MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例
MutationObserver 是一个非常强大的 API,提供了一种高效、灵活的方式来监听和响应 DOM 变化。它解决了传统 DOM 事件监听器的诸多局限性,通过异步、批量的方式处理 DOM 变化,大大提高了性能和效率。在实际开发中,合理使用 MutationObserver 可以帮助我们更好地控制 DOM 操作,提高代码的健壮性和可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例
|
8月前
|
JSON 供应链 API
京东工业平台商品列表 API 接口(京东工业 API 系列)
京东工业平台的商品列表API助力企业数字化转型,提供商品名称、价格、规格等信息,支持按分类、品牌、价格范围、关键词等筛选条件精准获取商品数据。接口采用HTTP GET/POST请求,返回JSON格式数据,包含商品基本信息、价格、库存和销售情况,适用于市场调研、竞品分析及采购计划制定。示例代码展示了如何使用Python的requests库调用该API。
|
10月前
|
机器学习/深度学习 计算机视觉
深度学习在图像识别中的应用与挑战
本文深入探讨了深度学习技术在图像识别领域的应用及其面临的挑战。通过分析深度学习模型如卷积神经网络(CNN)的工作原理,我们揭示了这些模型如何有效地处理和识别图像数据。同时,文章也指出了当前深度学习在图像识别中遇到的一些主要问题,包括过拟合、数据集偏差和模型解释性等,为读者提供了对这一领域全面而深入的理解。
|
11月前
|
监控 数据可视化 数据挖掘
ThingWorx 是如何实现数据可视化的
ThingWorx通过其强大的数据可视化工具,将复杂的数据转化为直观的图表和仪表板,帮助用户快速理解并分析数据,支持定制化视图以满足不同需求,提升决策效率。
276 12
|
存储 缓存 监控
JVM中G1垃圾收集器:原理、过程和参数配置深入解析
JVM中G1垃圾收集器:原理、过程和参数配置深入解析