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

在这里插入图片描述

在这里插入图片描述

🌈个人主页:godspeed_lucip
🔥 系列专栏:OS从基础到进阶

🏆🏆本文完整PDF源文件请翻阅至文章底部下载。🏆🏆


  • ⚔️1 文件系统的层次结构
    • 🔧1.1 总览
    • 🔧1.2 例子
  • ⚔️2 文件系统的全局结构
    • 🏹2.1 物理格式化(低级格式化)
    • 🏹2.2 逻辑格式化(高级格式化)
    • 🏹2.3 文件系统在内存当中的结构
      • ⚗️2.3.1 结构示意图
      • ⚗️2.3.2 外存
      • ⚗️2.3.3 内核区
      • ⚗️2.3.4 用户区
  • ⚔️3 虚拟文件系统与文件挂载
    • 🦯3.1 普通的文件系统
    • 🦯3.2 虚拟文件系统
      • 📡3.2.1 什么是虚拟文件系统
      • 📡3.2.2 虚拟文件系统的特点
    • 🦯3.3 文件系统挂载
      • 📡3.3.1 解释
      • 📡3.3.2 文件系统挂载要做的事情
  • ⚔️4 文件存储空间管理
    • 🧪4.1 总览
    • 🧪4.2 存储空间的划分和初始化
      • 4.2.1 文件卷
      • 4.2.2 目录区与文件区
      • 4.2.3 注意
    • 🧪4.3 存储空间管理方法——空闲表法
      • 🔭4.3.1 基本概念
      • 🔭4.3.2 例子
      • 🔭4.3.3 分配空间的方法
      • 🔭4.3.4 回收空间的方法
    • 🧪4.4 存储空间管理方法——空闲链表法
      • 🔭4.4.1 分类
      • 🔭4.4.2 空闲盘块链
      • 🔭4.4.3 空闲盘区链
    • 🧪4.5 存储空间管理——位示图法
      • 🔭4.5.1 基本概念
      • 🔭4.5.2 注意
      • 🔭4.5.3 分配存储空间
      • 🔭4.5.4 回收存储空间
    • 🧪4.6 存储空间管理方法——成组链接法
    • 🧪4.7 总结
  • ⚔️5 总结


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

🔧1.1 总览

image1

🔧1.2 例子

image2

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

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

磁盘在物理格式化后被划分出许多扇区,同时也可能包含坏扇区,磁盘会用备用扇区替代坏扇区,如图。
image1
当操作系统访问到坏扇区时,磁盘会将实际访问的扇区替换成备用扇区,因此坏扇区对于操作系统来说是透明的

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

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

对于UNIX系统来说,磁盘在逻辑格式化后,其内部结构会如图所示
image3
(1)引导块:类似于Windows下的BIOS,负责开机时初始化系统
(2)超级块:操作系统可以通过此块快速找到空闲的磁盘地址
(3)空闲空间管理:里面存储了与空间管理相关的数据结构(比如位视图)
(4)i结点区:里面存储了各文件的索引结点,结点连续存放。索引节点的大小都是相同的,因此可以迅速定位到任何一个索引结点
(5)根目录:任何文件的存储都必须在根目录下
(6)其他文件:在格式化后为空

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

⚗️2.3.1 结构示意图

image4

⚗️2.3.2 外存

存放文件以及文件目录

⚗️2.3.3 内核区

(1)目录缓存
操作系统会将近期访问过的文件目录复制一份放在内核区中,这样当需要再次访问时就不需要再次去外存中寻找了,可以提高访问速度。
(2)系统打开文件表与用户打开文件表
参考之前的笔记

⚗️2.3.4 用户区

(1)文件描述符/文件句柄
当我们打开一个文件时,操作系统会放回一个句柄(类似于指针),方便我们对文件进行操控(联想C语言的文件操作)
Fp = file.open(“./test.txt”)

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

🦯3.1 普通的文件系统

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

🦯3.2 虚拟文件系统

📡3.2.1 什么是虚拟文件系统

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

📡3.2.2 虚拟文件系统的特点

(1)提供标准接口
image3
(2)标准函数具体到不同文件系统中的实现是由虚拟文件系统提供的,因此必须确保文件系统有虚拟文件系统提供给的功能。因此:
image4
(3)不同文件系统中对于文件的表示可能也不一样,FAT文件系统、UFS文件系统的表示方式分别如图。
image5
因此,虚拟文件在打开一个文件后,都会创建一个同一的VNode结构,里面存放了各种要求的信息,如图。注意:VNode只在主存中存在。
image6
这是虚拟文件系统的第三个特点:
image7

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

🦯3.3 文件系统挂载

📡3.3.1 解释

image8

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

image9

⚔️4 文件存储空间管理

🧪4.1 总览

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

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

4.2.1 文件卷

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

4.2.2 目录区与文件区

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

4.2.3 注意

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

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

🔭4.3.1 基本概念

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

🔭4.3.2 例子

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

🔭4.3.3 分配空间的方法

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

(2)最佳适应
找到一个可以满足要求、且空闲盘块数最小的空闲表项。

(3)最坏适应
找到一个可以满足要求、且空闲盘块数最大的空闲表项。

🔭4.3.4 回收空间的方法

总体与内存管理中的动态分配类似。
(1)回收区的前后都没有相邻空闲区
新增空闲表项

(2)回收区的前后都是空闲区
合并空闲表项

(3)回收区前面是空闲区
修改前面的空闲表项

(4)回收区的后面是空闲区
修改后面的空闲表项

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

🔭4.4.1 分类

image6

空闲盘块链:
image7

空闲盘区链:
image8

🔭4.4.2 空闲盘块链

操作系统需要保存盘块链的链头指针和链尾指针
(1)分配存储空间
image9
(2)回收存储空间
image10
(3)注意
image11
在分配的时候要从链头一个一个摘下磁盘块,所以为文件分配盘块可能重复多次操作

🔭4.4.3 空闲盘区链

(1)分配存储空间
image12
(2)回收存储空间
image13
(3)注意
image14
因为它可以一次为文件分配许多空间,不像空闲盘块链一次只可以分配一个块。

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

🔭4.5.1 基本概念

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

🔭4.5.2 注意

①一般来说为了方便管理,位视图一般采用连续的字来表示。比如一台主机的字长为16,则16个盘块的位视图被存储在一个字内。如图所示。
image15
②由盘块号推出(字号、位号)
注意起始位置是从0开始还是从1开始
image16
③由(字号、位号)推出盘块号
image17

🔭4.5.3 分配存储空间

image18

🔭4.5.4 回收存储空间

image19

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

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

🧪4.7 总结

image20

⚔️5 总结

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

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

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

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

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

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

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《动手学深度学习(PyTorch版)》笔记7.3

注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过&…

25.云原生ArgoCD高级之app of apps模式

文章目录 app of apps 模式介绍app如何管理apphelm方式管理kustomize方式管理 app of apps 模式介绍 通过一个app来管理其他app,当有多个项目要发布创建多个app比较麻烦,此时可以创建一个管理app,管理app创建后会创建其他app。比较适合项目环…

Windows显示空的可移动磁盘的解决方案

123  大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式…

stack_queue:三个关键注意事项解析

一、stack与容器 template<class T, class Container> class stack { private:Container _con; };Container 为容器&#xff0c;在实例化创建对象时&#xff0c;我们可以传 vector<T> 或 list<T> 等作为栈的底层。 举例&#xff1a; int main() {stack<i…

【css】css国际色标卡卡板-收藏

CSS3 国际标准色卡板 - 踏得网

C++——位图与布隆过滤器

目录 一&#xff0c;位图 1.1 关于大量数据的问题 1.2 位图概念 1.3 位图模拟实现 1.4 位图的应用 1.5 位图优缺点 二&#xff0c;布隆过滤器 2.1 一些场景 2.2 布隆过滤器概念 2.3 布隆过滤器模拟实现和测试 2.4 布隆过滤器查找 2.5 布隆过滤器删除 2.6 布隆过滤器优…

Arduino 串口绘图仪简单使用

1、工具所在位置 串口绘图仪实际上是从预设的串口获取值并将其绘制在xy轴图每获取到一组数据向左滑动一个单位&#xff0c;读取数据的速度起快&#xff0c;滑动就越快。 Y轴代表来自串口的值&#xff0c;可以是单个也可以是一组 。在读取串口数据时遇到"\n"&#xf…

Redis缓存过期淘汰策略详讲

前言 查看redis最大占用内存 1&#xff09;命令查看 config get memory2&#xff09;进入redis配置文件&#xff0c;查看maxmemory vim /myredis/redis.conf3&#xff09;redis默认内存多少可用 如果不设置最大内存大小或者设置最大内存大小为0&#xff0c;在64位操作系统…

【开源】SpringBoot框架开发高校学生管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生管理模块2.2 学院课程模块2.3 学生选课模块2.4 成绩管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学院课程表3.2.3 学生选课表3.2.4 学生成绩表 四、系统展示五、核心代码5.1 查询课程5.2 新…

牛客——牛可乐的翻转游戏(状压,dfs)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 牛可乐发明了一种新型的翻转游戏&#xff01; 在一个有 nnn 行 mmm 列的棋盘上&#xff0c;每个格子摆放有一枚棋子&#xff0c;每一枚棋子的颜色要么是黑色&#xff0c;要么是白色。…

CentOS 8 安装配置 Hadoop3.3.6 伪分布式安装方式(适用于开发和调试)

1.配置服务器ssh免密登录&#xff0c;否则后面启动会报错&#xff1a;尝试通过SSH连接到主机出现认证错误的提示 配置服务器ssh免密登录&#xff1a; 1.生成SSH密钥对&#xff08;如果尚未生成&#xff09;&#xff1a; 执行下面的命令生成密钥对&#xff0c;一直回车即可 ssh…

Intellij Idea的数据库工具 DataGrip

DataGrip DataGrip&#xff1a; IDEA自带&#xff0c;非常好用。智能提示很强大&#xff0c;快捷键跟IDEA自身一致。 如果下载不了 DataGrip&#xff0c;也可以直接用 IDEA 自带的。 常用的快捷键 alt8&#xff1a; 打开数据库Service ctrlshiftF10&#xff1a;打开常用的数…

记一次CPU有规律飙高的线上问题排查过程

一、背景 最近在计费系统模块和灰度发布相关的功能已经基本交付,在这个间隙中,领导说有个线上问题需要排查下, 问题的场景比较有意思,排查过程中也有一些成长,这里记录一下。 二、排查过程 2.1 查看pinpoint 监控 首先根据领导的反馈看pinpoint中的JVM的CPU日志: CP…

基于Vue2用keydown、setTimeout事件实现连续按键(连击)任意键(或组合键)3秒触发自定义事件(以F1键为例)

核心代码 <template></template> <script> export default {created() {//监听弹起快捷键addEventListener("keyup", this.keyup);},destroyed(d) {//移除监听弹起快捷键removeEventListener("keyup", this.keyup);},methods: {keyup(…

ES节点故障的容错方案

ES节点故障的容错方案 1. es启动加载逻辑1.1 segment和translg组成和分析1.2 es节点启动流程1.3 es集群的初始化和启动过程 2. master高可用2.1 选主逻辑2.1.1 过滤选主的节点列表2.1.2 Bully算法2.1.2 类Raft协议2.1.3 元数据合并 2.2 HA切换 3. 分片高可用3.1 集群分片汇报3.…

2.0 Zookeeper 安装配置

Linux 安装 zookeeper 下载地址为: Apache ZooKeeper。 选择一稳定版本&#xff0c;本教程使用的 release 版本为3.4.14&#xff0c;下载并安装。 打开网址 https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz&#xff0c;看到如下界…

HTTP1.1、HTTP2、HTTP3

HTTP1.1 HTTP/1.1 相比 HTTP/1.0 性能上的改进&#xff1a; 使用长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。支持管道&#xff08;pipeline&#xff09;网络传输&#xff0c;只要第一个请求发出去了&#xff0c;不必等其回来&#xff0c;就可以发第二个请求出去&…

函数的连续与间断【高数笔记】

【连续】 分类&#xff0c;分几个&#xff1f;每类特点&#xff1f; 连续条件&#xff0c;是同时满足还是只需其一&#xff1f; 【间断】 分类&#xff0c;分几个大类&#xff0c;又分几个小类&#xff1f;每类特点&#xff1f; 间断条件&#xff0c;是同时满足还是只需其一&am…

Msql-数据库死锁

实验案例 CREATE TABLE t1_deadlock ( id int(11) NOT NULL, name varchar(100) DEFAULT NULL, age int(11) NOT NULL, address varchar(255) DEFAULT NULL, PRIMARY KEY (id), KEY idx_age (age) USING BTREE, KEY idx_name (name) USING BTREE ) ENGINEInnoDB DEFAULT CHARS…

Unity类银河恶魔城学习记录1-14 AttackDirection源代码 P41

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili PlayerPrimaryAttackState.cs using System.Collections; using System.Co…