【操作系统】文件系统的实现

文章目录

  • 文件系统的层次结构
  • 文件系统的实现
    • 目录实现
      • 线性列表
      • 哈希表
    • 文件的实现
      • 连续分配
      • 链接分配
      • 索引分配
    • 文件存储空间管理
      • 空闲表法与空闲链表法
      • 成组链接法
      • 位示图法

文件系统的层次结构

文件系统从上往下分为了五层,分别是用户调用接口、文件目录系统、存取控制模块、逻辑文件系统与文件信息缓冲区、物理文件系统。

在这里插入图片描述

文件系统的实现

目录实现

在操作系统中,目录实现主要有两种方式:

  • 线性列表
  • 哈希表

线性列表

线性列表是一种常见的数据结构,有链表和数组两种。我们将FCB(文件控制块)中的信息简化为文件名与文件索引节点指针后,文件的目录结构如下:

链表:
在这里插入图片描述

数组:
在这里插入图片描述

哈希表

哈希表依赖于哈希算法,是一种散列算法,文件名进行哈希计算后得到一个值,将这个值作为索引。相较于线性列表,哈希表的方式使得文件名与索引之间建立了一种映射关系,查询效率更高。

在这里插入图片描述

文件的实现

文件最终是保存在磁盘上,磁盘的存储单位通常以一个固定大小作为分区(比如4K)。这样整个磁盘就被分为了很多个大小一致的盘块。

在这里插入图片描述
在这个前提下,文件在磁盘进行存储时,就有三种分配方式:

  • 连续分配;
  • 链接分配;
  • 索引分配;

连续分配

连续分配的概念很简单,就是文件在分配到磁盘时,所分配的盘区是连续的。在保存文件存储地址时,只需要保存起始块号以及所占用的块号数量或者结束块号即可。

这种方式实现简单,访问速度块。但是不方便扩展(比如一个文件分了0、1、2后还需要继续追加文件内容,3号块已被占用,就导致无法扩展),同时还有有大量的磁盘碎片。

在这里插入图片描述

链接分配

链接分配,其实就是采用了链表这一数据结构来实现文件的存储。 因此我们需要额外的开销来保存每个盘块的下一个盘块信息。

如果下一个盘块的信息保存在盘块内,称之为隐式链接

在这里插入图片描述
但是对于脆弱的机械磁盘而言,一旦收到轻微损伤,导致某一盘块中的链接信息丢失,将会导致整个链表断开,从而丢失文件。针对这个问题,提出了显式链接

显示链接将链表的下一盘块信息提取出来进行专门的维护,即:FAT文件分配表。在FAT中,如果下一块号为**-1**,表示该号块是链表的最后一个块号-2表示当前块号是空闲状态

在这里插入图片描述
链接分配意味着操作系统需要将FAT表加载至内存,如果磁盘很大,盘块很多,其实还要占用较大的内存空间。为了优化这个问题,就提出了索引分配方式。

索引分配

索引分配,存放的是文件名对应的索引块号,而不是其实块号。根据索引块号找到对应的盘块,该存储索引数据的盘块保存着文件的索引表,由逻辑块号和物理块号组成。

在这里插入图片描述
以上图为例,文件的索引表是一个数组,数组的每个值是一个整数,占4B。由于每个盘块大小为4K,因此一个盘块最多能存放1024个索引。即一个索引块最多关联1024个盘块,也就是4M。

4M对于文件而言,实在太小了,毕竟很多文件动辄几百兆甚至上G。因此一个文件必须多个盘块作为索引表的存储载体。

结合文件的分配方式,可以采用链接分配方式,即多个索引表的盘块使用链表结构进行连接。

相较于链接方式,与操作系统内存分配方式类似,可以采用多级思想,即使用多级的索引结构。如果使用二级索引,则最多可以存储1024个一级索引1024个二级索引4K=4G文件。

在这里插入图片描述
当然,上图展示的二级索引基础上还可以优化,比如将二级索引表中的热点数据直接存放于一级索引表中,可以提升文件读取效率。这种方式称为混合索引

文件存储空间管理

文件分配方式针对的是已分配的文件以及对应的磁盘空间。而文件存储空间管理,针对空闲的磁盘空间的管理。

物理磁盘通常会在逻辑上分成多个区域(比如卷C、卷D),而每个分区中又会分为目录区、文件区。目录区所存储的是数据结构(如FCB);文件区存放的是文件的数据。

在这里插入图片描述
文件的存储空间管理有以下几种方式:

  • 空闲表法;
  • 空闲链表法;
  • 成组链接法;
  • 位示图法;

空闲表法与空闲链表法

空闲表法就是将磁盘中那些空闲的盘块信息记录在空闲盘块表中。如果使用数组结构就是空闲表法,如果使用链接结构就是空闲链表法。

在这里插入图片描述
对于空闲链表法,如果把每个空闲盘块链接起来,称为“空闲盘块链”;如果结合空闲表法,将空闲表法的空闲盘块表的每项数据通过链表保存,称为“空闲盘块链”。

在这里插入图片描述
但是这两种方式在面对大量盘块时,链表过长,这些数据结构要加载到内存中导致占用内存空间大且效率不高

成组链接法

成组链接发,使用链表以及栈的数据结构。每个空闲盘号栈存放了固定数量的空闲盘号数据。

  • 超级块:通常可能从目录区的第一个盘块开始,存储了第一个空闲盘号栈信息;
  • 每个空闲盘号栈的第一个元素是特殊的,它不仅存放了自己的盘号,也存储着下一个空闲盘号栈的信息(相当于指针);
  • 倒数第二个空闲盘号栈的栈底是特殊的,保存特殊值0或者-1,表示后面一个空闲盘号栈式最后一个;

系统启动时,会将第一组连续的空闲扇区(根据超级块)加载入内存中,在进行盘块分配时依次出栈,到栈底时根据栈底盘号元素中保存的数据链接到下一空闲盘号栈。

盘号回收的时候,在一个已有的空闲盘号栈装满后,新构造一个空闲盘号栈,然后将其添加到整个链的最前面。

整个流程的示意图如下:

在这里插入图片描述

位示图法

位示图法就是构建一个二维表,每个坐标表示一个盘块,用0表示对于盘块空闲,1表示对应盘块已分配。

其说明如下图:

在这里插入图片描述

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

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

相关文章

解放双手!一键助你快速发圈、批量加好友,好用哭了!

朋友们,你们有没有经历过管理多个微信账号的繁琐和压力? 会不会因为忙不过来,忘记及时回复客户,错过了推广的时机? 别担心,现在有了微信管理系统,一切都变得简单轻松起来! 微信管…

打造高效医患沟通:陪诊小程序开发技术指南

随着科技的不断发展,陪诊小程序作为医患沟通的新工具逐渐成为关注焦点。本文将带领你通过使用React和Node.js技术栈,构建一个功能强大且用户友好的陪诊小程序,实现医患互动的便捷和高效。 1. 准备工作 确保你的开发环境中已安装了Node.js和…

Unity下载资源且保存

UnityWebRequest(WWW——已过时) 替代:Unity不再支持WWW后,使用UnityWebRequest完成web请求。 Unity - Scripting API: UnityWebRequest (unity3d.com)https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequest.html if (www.isNetworkEr…

Java 多线程之 volatile(可见性/重排序)

文章目录 一、概述二、使用方法三、测试程序3.1 验证可见性的示例3.2 验证指令重排序的示例 一、概述 在Java中,volatile 关键字用于修饰变量,其作用是确保多个线程之间对该变量的可见性和禁止指令重排序优化。 当一个变量被声明为volatile时&#xff0…

基于Vue+SpringBoot的校园电商物流云平台开源项目

项目编号: S 034 ,文末获取源码。 \color{red}{项目编号:S034,文末获取源码。} 项目编号:S034,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 商品数据模块2.3 快…

企业怎么进行人事管理?一篇文章带你了解!

阅读本文你将了解企业如何运用数字化工具进行人事管理:一、数字化、线上化,解放人力;二、规范管理流程,提升处理效率;三、数据分析可视化,支持并优化决策;四、个性化定制,灵活适应需…

mac 和 windows 相互传输文件【共享文件夹】

文章目录 前言创建共享文件夹mac 连接共享文件夹 前言 温馨提示:mac 电脑和 windows 电脑必须处于同一局域网下 本文根据创建共享文件夹的方式实现文件互相传输,所以两台电脑必须处于同一网络 windows 创建共享文件夹,mac 电脑通过 windows…

Enterprise Architect安装与使用

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Enterprise Architect概述 官方网站:https://www.sparxsystems.cn/products/ea/;图示如下: Enterprise Architect是一个全功能的、基于…

Spring-IOC-FactoryBean机制(难点且重点)

1、第一个案例 1.1、Book.java package com.atguigu.ioc; import lombok.Data; Data public class Book {private String bid;private String bname; }1.2、Book2.java package com.atguigu.ioc; import lombok.Data; Data public class Book2 extends Book {private String co…

SocketIo的使用和基于SocketIO的聊天室

Socket.IO 是一个库,可以在客户端和服务器之间实现 低延迟, 双向 和 基于事件的 通信。 一、Socket.IO的特点 以下是 Socket.IO 在普通 WebSockets 上提供的功能: 1、HTTP 长轮询回退 如果无法建立 WebSocket 连接,连接将回退到 HTTP 长轮…

文化传承与数字技术的完美结合:十八数藏的新纪元

在这数字化的时代,十八数藏犹如一座连接过去与未来的桥梁,展现出文化传承与数字技术完美结合的新纪元。十八数藏以其独特的视角,将传统文化注入现代数字技术的脉络,呈现出一幅文化传承的全新画卷。 十八数藏的文化传承并不是简单的…

C++进阶篇5-哈希

一、unordered系列关联式容器 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到log_2N,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最优的查询是&#xff0…

Linux—简介安装常用命令系统中软件安装项目部署

目录 1. 前言1.1 什么是Linux1.2 为什么要学Linux1.3 学完Linux能干什么 2. Linux简介2.1 主流操作系统2.2 Linux发展历史2.3 Linux系统版本 3. Linux安装3.1 安装方式介绍3.2 安装VMware3.3 安装Linux3.4 网卡设置3.5 安装SSH连接工具3.5.1 SSH连接工具介绍3.5.2 FinalShell安…

leetcode:1773. 统计匹配检索规则的物品数量(python3解法)

难度:简单 给你一个数组 items ,其中 items[i] [typei, colori, namei] ,描述第 i 件物品的类型、颜色以及名称。 另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。 如果第 i 件物品能满足下述条件之一,则认为该物…

Softing TCS:高效的诊断模拟解决方案

| Softing TCS——高效的仿真模拟ECU或整车解决方案 现代诊断模拟Softing TCS是当相应的测试物还没有或不再可用时的解决方案。这种情况通常出现在早期阶段的组件和车辆工程、测试仪回归测试中或在对教学设施进行功能验证时,因为它们需要对多种不同的测试对象进行验…

Python之pyc文件的生成与反编译

目录 1、什么是pyc文件 2、手动生成pyc文件 3、pyc文件的执行 4、pyc文件的反编译 1、什么是pyc文件 pyc文件(PyCodeObject)是Python编译后的结果。当python程序运行时,编译的结果是保存于PyCodeObject,程序运行结束后&#x…

linux基本指令以及热键

基本指令 ♥clear ♥whoami ♥who ♥pwd ♥ls指令(重点) ls -a: ls -l ♥mkdir ♥cd指令 ♥touch指令 ♥stat指令 ♥rmdir指令 && rm 指令 ♥man指令 ♥nano指令 ♥cp指令 ♥mv指令 ♥cat指令 🗡输出/输出重定向 &#x1…

速锐得解码匹配驾培驾考吉利几何E萤火虫数据应用智能评判系统

随着国内新能源车的不断发展和渗透,在驾培驾考领域通过新能源车进入到驾驶员培训领域的车型越来越多,这里边包括了特斯拉、宝马、通用、沃尔沃、岚图、江淮、蔚来、比亚迪、吉利、奇瑞、大众等多家车企的车型。 之前我们做过像奇瑞艾瑞泽、江淮IEV7、大…

大华智能物联综合管理平台readpic接口任意文件读取漏洞复现 [附POC]

文章目录 大华智能物联综合管理平台readpic接口任意文件读取漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 大华智能物联综合管理平台readpic接口任意文件读取漏洞复现 [附POC] 0x01 前言 免责…

微信小程序知识付费平台,公众号App+SAAS+讲师端,多端部署

三勾知识付费系统基于thinkphp8element-plusuniapp打造的面向开发的知识付费系统,方便二次开发或直接使用,可发布到多端,包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。 功能包含直播…