[操作系统] 文件系统的实现(二)

操作系统大实验二:简单文件系统的实现 出于简单起见,该文件系统是基于内存的,以下是各个文件:   1、内存资源管理(Disk.h, Disk.cpp) 2、文件读写接口(File.h, File.cpp) 3、主程序(main.cpp, my_shell.cpp) 目录项数据结构:   一个目录项包含了文件名和文件类型,当文件为目录时,起始盘块指示了目录表所在的盘块号,当文件为文件时,起始盘块指示了FCB所在的盘块号。 目录表数... 阅读详情

文件系统的实现(二)



1. 共享文件

一个文件同时出现在属于不同用户的不同目录下,即为共享文件,目录与共享文件的联系称为连接。如果目录中包含磁盘地址,当连接文件时,必须把该共享文件原目录中的磁盘地址复制到新的得到该共享文件的目录中。如果随后又往该文件中添加新的数据块,那么另一方并不会知道,违反了共享的目的。

为了解决这个问题可以使用两种方法

  1. 磁盘块不列入目录,而是列入i节点中,目录指向i节点。

    缺点:

    • 假如文件原所有者为C,现在B想要得到这个共享文件。当B连接到这个共享文件时,i节点中记录的文件所有者仍然为C,然后i节点需要将自身的连接计数+1,以让操作系统直到当前文件被多少目录共享。

      但是当C想要删除该文件时,如果直接删除文件并清除i结点,那么B中会出现一个无效i节点,如果以后这个i节点分配给其他文件了,B中就会连接一个错误文件。

      所以,此时只能删除C中该文件的目录项,但是保留i结点,并让i节点自身连接计数-1。只有等到计数为0时,才会真的删除该文件。

  2. 让系统建立一个类型为LINK的新文件,并把该文件放在想要得到共享文件的目录下。新的文件中只包含了它所连接的文件的路径名。当读该连接文件时,操作系统发现该文件为LINK类型,则找到该文件实际的位置,并去读那个实际文件,该方法称为符号连接。

    缺点:

    • 需要额外开销,必须读取包含路径的文件,然后一步步的扫描路径直到找到i结点,会造成额外的磁盘存取。并且每个符号连接都需要额外的i节点,以及额外的磁盘块用于存储路径。

另外,如果允许连接,文件就会有两个或多个路径,查找文件时,有可能多次定位到被连接的文件。

2. 日志结构文件系统

CPU的运行速度越来越快,RAM内存容量变得更大,同时磁盘高速缓存也在迅速增加。进而,不需要磁盘访问操作,就有可能满足直接来自文件系统高速缓存的很大一部分读请求。从而推测出,未来多数磁盘访问为写操作,所以提前读机制并不能获得更好的性能。

由此,日志结构文件系统(LFS)被开发出来。其基本思想是将整个磁盘结构化为一个日志。每隔一段时间,或有特殊需要时,被缓存在内存中的所有未决的写操作都被放在一个单独的段中,作为在日志末尾的一个邻接段写入磁盘。

在LFS中,同样存在i节点,但是i节点分布在整个日志中。所以要想快速找到i节点,必须维护一个由i节点编号索引组成的i节点图。

总而言之,所有的写操作最初都缓冲在内存中,然后周期性地把所有已缓冲的写作为一个单独的段,在日志的末尾写入磁盘。要打开一个文件,则首先需要从i节点图中找到文件的i节点。一旦i节点定位之后就可以找到相应的块的地址。

为了避免日志将磁盘占满,需要一个清理线程,周期性地扫描日志进行磁盘压缩。该线程首先读日志中的第一个段的摘要,检查有哪些i节点和文件。然后该线程查看当前i节点图,判断该i节点是依然有效以及文件块是否让在使用。如果没有,则丢弃。

3. 日志文件系统

保存一个记录系统下一步要做什么的日志,当系统在完成即将完成的任务前崩溃时,重新启动后,可以查看日志,获取崩溃前计划做的任务,并完成他们。

例如,删除文件的操作需要三个步骤

  1. 在目录中删除文件。
  2. 释放i结点。
  3. 将所有占用磁盘块归还。

如果在操作系统完成第一步后,系统崩溃,那么文件已经在目录中被删除,但是i节点和磁盘块将永远无法被归还造成了浪费。

在日志文件系统中,先写一个日志项,列出这三个动作,并将日志写入磁盘。只有当这步完成后,才能进行接下来真正的删除操作。如果顺利完成,则擦除日志项,如果遇到崩溃,系统恢复后,可以通过检查日志来查看是否有未完成操作。

这就意味着被写入日志的操作必须是幂等操作,简单来说就是可以执行多次而不会对结果造成破坏。有些文件系统还引入原子事务的概念,即这一组事务只有完成和未完成两种状态,而不会存在其他中间状态。

4. 虚拟文件系统

为了将多种文件系统整合到一个统一的结构中,抽象出所有文件系统共有的部分,并将这部分代码放在单独的一层,这一层调用底层的实际文件系统来管理数据。

虚拟文件系统

对文件相关的系统调用首先指向虚拟文件系统,再由虚拟文件系统选择实际的文件系统完成任务。



参考书目:现代操作系统第三版

操作系统课程设计(二)简单文件系统实现 #include #include #include #define DIR_LENGTH  1024     /*路径最长可达100字节*/ #define MAX_WRITE 1024*128    /*写入文字可达128k字节*/       #define MEM_D_SIZE 1024*1024    /*1M磁盘空间*/ #define DISKSI 阅读详情

相关推荐

操作系统 实验十 简单文件系统的实现

今日作业: 参考教程:https://www.write-bug.com/article/1714.html 实验原理 在内存中开辟一个虚拟磁盘空间作为文件存储分区,在其上实现一个简单的基于多级目录的单用户单任务系统中的文件系统。在推出该文件系统的使用时,应将虚拟磁盘上的内容以一个文件的方式保存到磁盘上,一遍下次可以将它恢复到内存的虚拟磁盘中 文件物理结构可采用显式链接或其他结构 空闲磁盘空间的管理可选择FAT表、位示图或其他办法 文件目录结构采用多级目录结构。为简单起见,可以不使用索引结点,每个目录

拔牙不打麻药 1万+

操作系统(十一)文件系统实现

操作系统 文件系统实现文件系统实现1.文件系统结构2。文件系统实现虚拟文件系统 VFS目录实现4.分配方法连续分配 文件系统实现 1.文件系统结构 分层设计的文件系统 应用程序:利用系统调用的请求文件操作 open() read() 逻辑文件系统:管理元数据,管理目录结构。元数据包括文件系统的所有结构数据,而不包括内容数据。逻辑文件系统通过给定的文件符号名,来管理目录结构,通过文件控制块(FCB),来维护文件结构。 文件组织模块:指导文件的逻辑块和物理块。将逻辑块地址转换为物理块地址。 基本文件系统:只需要

greatcoder的博客 2657

现代操作系统 第四章 文件系统 习题

Chapter04 第四章 文件系统 习题 知识点小记 文件类型: ①普通文件:包含有用户信息的文件,分为ASCII文件和二进制文件。 ②目录:管理文件系统结构的系统文件; ③字符特殊文件(UNIX):与输入/输出有关,用于串行I/O类设备,如终端、打印机、网络等。 ④块特殊文件(UNIX):用于磁盘类设备。 文件访问方式:顺序访问、随机访问。 绝对路径名:由从根...

睡不醒的关耳丹三郎 9462

操作系统:文件系统的实现

目录一、文件系统结构二、文件系统实现1.概述2.虚拟文件系统三、目录实现1.线性列表2.哈希表四、磁盘空间的分配方法1.连续分配2.链接分配3.索引分配五、磁盘空闲空间的管理1.位向量2.链表3.组4.计数六、文件系统的性能和效率七、文件系统的恢复 一、文件系统结构 磁盘的逻辑单元为块,内存和磁盘之间的I/O传输以块为单位执行。 磁盘的特点 可以原地重写,可以从磁盘上读一块儿,修改该块,并将它写回到原来的位置 可以直接访问磁盘上的任意一块。因此,可以方便地按顺序或随机访问文件 文件系统需要提供高效快捷磁

偶滴博客 7664

《ORANGE’S:一个操作系统的实现》读书笔记(二十七)文件系统(二)

MAX_PRIM定义的是主分区的最大值,比如有两块硬盘,那第一块硬盘的主分区为hd[1~4],第二块硬盘的主分区为hd[6~9],所以MAX_PRIM为9,我们定义的hd1a的设备号应大于它,这样通过与MAX_PRIM比较,我们就可以知道一个设备是主分区还是逻辑分区。具体的做法,我们还是需要一个示例来对照。硬盘的每个分区都会有一个分区号,在我们的例子中,主引导扇区中有两个表项,对应一个主分区和一个扩展分区,即hd.img1和hd.img2,扩展分区中有5个逻辑分区,从hd.img5到hd.img9。

zorro_z的博客 1072

一个简单的文件系统(操作系统课程设计)

一个简单的文件系统(操作系统课程设计)主要任务是对用户文件和系统文件进行管理,以方便用户使用,并保证文件的安全性。文件管理具有对文件存储空间的管理、目录管理、文件的读/写管理以及文件的共享与保护功能。从用户的角度看,目录在用户(应用程序)所需要的文件名和文件之间提供一种映射,所以目录应实现“按名存取”,“按名存取”是目录管理中最基本的功能,也是文件系统向用户提供的最基本的服务。目录管理中有多种实现机制,其中二级目录机制可以解决多用户之间的文件重名问题,文件系统可以在目录上实现访问限制。

(12.7)操作系统 11章 文件系统实现

文件系统实现 上一章(10章 文件系统)主要讲文件系统提供了可以在线存储和访问文件内容(包括数据和程序)的机制。文件系统永久驻留在外存上。 本章就主要关注在常用外存上的文件存储和访问问题。为了提高I/O效率,内存和磁盘之间的I/O传输以块(block)为单位执行。文件系统可以提供高效和便捷的磁盘访问,以便允许轻松存储,定位,提取数据。 所以文件系统:在存储设备上组织文件的方法和数据结构。 也是OS中负责来管理和存储文件信息的模块。 两个问题:1.如何定义文件系统的用户接口。 2.如何映射逻辑文件系统到物

qq_46487301的博客 1047

操作系统实习一个简单文件系统的实现

众所周知计算机,主要是用来管理存储数据的,如何对数据能进行很好的管理也就成为了现在主要需要解决的问题,当然我们首先会想到用数据库对数据进行管理,但是对于小量的数据我们并不需要用数据库,由此我们用文件系统来管理一些小量的数据,如何用文件系统来好好的管理数据也就是这个程序的主要内容。

[操作系统] 文件系统的实现(一)

文件系统的实现(一) 文件系统布局 文件的实现 目录的实现 实现可变长度文件名 加快文件查找

LLLZH 1638

操作系统--文件系统实验源代码

大学操作系统实验 Linux系统下文件管理的实现 实现了目录、文件的增删改查等管理功能,详见文档

《操作系统课内实验》文件系统实现C++代码

设计并实现一个一级(单用户)文件系统程序 a.提供以下操作:  文件创建/删除接口命令create/delete  目录创建/删除接口命令mkdir/rmdir  显示目录内容命令ls b.创建的文件不要求格式和内容

《操作系统》之文件系统篇(二)- 文件系统实现

文件系统结构 文件系统本身通过由许多不同层组成,每层的设计利用更低层的功能,创造新的功能。 I/O控制层(I/O control):包括设备驱动和中断处理程序,以在主内存和磁盘系统之间进行信息交流。 基本文件系统(basic file system): 本层需要发送通用命令给设备驱动层,并且还要管理内存缓冲区和保存各种文件系统,目录和数据块的缓存。 文件组织模块(file-organization module): 知道文件及其逻辑块以及物理块。由于知道所用的文件系统的类型和文件位置,文件组织可以将逻辑块

lluojian的博客 784

Python使用netmiko配置华为交换机

1.netmiko就是专门为网络设备做的模块,非常强大。1.更适合网络设备的自动化运维模块。2、批量配置变更、备份。1.安装netmiko。2. 创建SSH连接。一、netmiko介绍。

博然的宝藏库 2795

【动手实现操作系统】二:文件系统

我们需要用文件系统来管理文件。 每⼀个⽂件由若⼲个块(block)组成, 这些块不需要顺序存放, 只要按照某种⽅法组织起来. 这样, 即使⼩⽂件被删除, 他们所占⽤的块也可以得到有效的利⽤。块⼤⼩不同对⽂件系统⼀些参数的有影响。这里取一个块占2个扇区即1kb. INode 创建结构INode来对这些块进行索引。 union Inode { // Inode Table的表项 uint8_t by...

qq_43257640的博客 300

Agent + 监控平台:自动诊断告警根因

根因分析、智能监控、AI Agent、告警风暴、异常检测、可观测性、故障诊断在现代分布式系统中,快速定位和解决问题是维持系统稳定性的关键。传统的监控系统虽然能够生成大量告警,但往往缺乏对告警根因的自动诊断能力,导致运维团队在告警风暴中难以快速定位问题。本文深入探讨了将AI Agent技术与监控平台结合,实现告警根因自动诊断的技术架构、理论基础和实现方法。我们将从第一性原理出发,分析根因诊断问题的本质,介绍基于Agent的智能监控系统设计,并通过实际案例展示其应用价值。文章同时涵盖了从理论到实践的全链路,包括

AIGC应用创新大全的博客 304

告别蓝牙音质妥协:用ESP32和PCM5102搭建WiFi无损音频播放器(附完整代码)

本文详细介绍了如何利用ESP32微控制器和PCM5102 DAC芯片构建一套完整的WiFi无损音频流媒体系统,彻底摆脱蓝牙协议的音质束缚。从硬件原理到软件实现,包括核心器件选型、电路设计、I2S音频驱动实现以及系统优化方案,帮助音频发烧友实现高保真无线音频传输。

weixin_30733003的博客 541

编程与数学 03-003 计算机操作系统 12_文件系统(二):文件系统实现

本文深入探讨了文件系统的实现技术,包括文件控制块、索引结构和目录结构的设计与实现。同时,分析了文件系统的安全性,如访问控制、加密技术和审计机制。讨论了文件系统的可靠性,包括错误检测、错误恢复和容错机制。还介绍了文件系统的性能优化方法,如时间优化和空间优化。通过这些技术,文件系统能够高效地管理和存储文件数据,提高性能和可用性,满足用户需求。

明月看潮生的博客 1043

大厂面经:大疆嵌入式面试题及参考答案(4万字长文:持续更新)

目录 Linux 系统调用的过程,中间发生了什么? 表格总结 Linux 中断流程,谈谈你对中断上下文的理解 中断流程 中断上下文理解 Linuxschedule()函数的原理和调用的时机 schedule()函数原理 调用时机 页表实现机制,分页的缺点? 页表机制 分页的缺点 介绍操作系统的多级反馈调度策略,时间片轮转,在项目中如何指定优先级来调度进程完成快速响应(nice命令) 多级反馈队列调度 时间片轮转 使用nice命令 聊内存分配,进程内存分配,段页式存

大模型大数据攻城狮的专栏 4168

【2021/7/19更新】【梳理】简明操作系统原理 附录二 一个简易文件系统的实现(docx)

参考教材: Operating Systems: Three Easy Pieces Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau 在线阅读: http://pages.cs.wisc.edu/~remzi/OSTEP/ University of Wisconsin Madison 教授 Remzi Arpaci-Dusseau 认为课本应该是免费的。 ———————————————————————————————————————— 这是专业必修

COFACTOR 823

DICOM标准:DICOM医学影像中的覆盖层(Overlay)概念详解

DICOM标准:深入详解DICOM医学影像中的覆盖层(Overlay)

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 1562

SecOC专题之新鲜值TripCnt

本系列为一步步拆解新鲜值的分发及管理而撰写文章属于原创,根据自身开发经验及理解撰写,若有错误请指出Trip Counter是新鲜值中变化最慢的一个part,并且自增到最大值时,会从头开始翻转计数。Trip Counter需要收发双方都保存,由于其变化较慢,所以不会经常进行同步该值。这就要求开发过程中保证每次对该值的读写必须要正确。

qq_22969363的博客 1154

《操作系统真象还原》第十四章 ---- 实现文件系统 任务繁多 饭得一口口吃路得一步步走啊(上二)

文章目录相关查阅博客链接本书中错误勘误闲聊时刻部分缩写熟知 相关查阅博客链接 本书中错误勘误 闲聊时刻 由于第十四章的内容超级多 而且都是重活累活 各种地方到处都是函数 所以可能我预计的是分上中下三篇来写 我其实操作系统预计应该8.7日就应该写完的 但是现在已经是8.7日的晚上的11点了 我晚上7点才回到的成都 9点才到的家 而文件操作的函数才把最基本的inode操作写完 所以 哎 希望这两天加把力 早点完结这个系列 至于为什么回成都 因为学校里面各种事情心情很烦 不可抗力我就回到了家里面 好

Love 6's Private Blog 1357

直方图均衡化原理及matlab和opencv实现代码

详细分析了直方图均衡化的数学原理,配有matlab和opencv实现代码

qq_21603315的博客 4777

【xv6操作系统】文件系统与内存映射及实验设计

整理总结xv6操作系统文件系统,扩大最大文件限制并实现软链接

weixin_46216674的博客 2274

YOLOv13改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣ 已更新种不同的改进方案,专栏内的每篇文章皆,均可顺利运行。2️⃣ 订阅专栏即可进群获取以及从的各种答疑内容。3️⃣ 全新的YOLOv13改进专栏,,只为更好的满足论文发表的要求。专栏内容,专栏实时评分,全网最高,质量保证。🎫。。

Limiiiing的博客 9146

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

操作系统的概念

操作系统就是根据软件调取计算机硬件的介质。 操作系统与软硬件之间的关系: 操作系统位于计算机硬件与应用软件之间,本质也是一个软件。操作系统由操作系统的内核(运行于内核态,管理硬件资源)以及系统调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成,所以,单纯的说操作系统是运行于内核态的,是不准确的。 细说的话,操作系统应该分成两部分功能: 一:隐藏了丑...

dihu4654的博客 256

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: [操作系统] 文件系统的实现(一)
下一篇: [操作系统] 文件系统管理和优化
LLLZHLIU
博客等级 码龄10年 19粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值