码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 文件系统的层次结构,全局结构,虚拟文件系统VFS以及文件挂载


    文件目录

    • 1.文件系统的层次结构
        • 1.用户接口
        • 2.文件目录系统
        • 3.存取控制模块
        • 4.逻辑文件系统与文件信息缓冲区
        • 5.物理文件系统
        • 6.辅助分配模块
        • 7.设备管理模块
        • 8.例题
    • 2.文件系统的全局结构(布局)
        • 1.文件系统在外存中的结构
        • 2.open系统调用打开文件的背后过程
    • 3.虚拟文件系统VFS
        • 1.普通的文件系统
        • 2.虚拟文件系统的特点
        • 3.UFS文件系统的数据结构inode
        • 4.FAT文件系统的数据结构
    • 4.文件系统的挂载
        • 1.步骤

    1.文件系统的层次结构

    1.用户接口

    文件系统需要向上层的用户提供一些简单易用的功能接口。
    这层就是用于处理用户发出的系统调用请求(Read、Write、Open、Close等系统调用)

    2.文件目录系统

    用户是通过文件路径来访问文件的,因此这一层需要根据用户给出的文件路径找到相应的FCB或索引结点。
    所有和目录、目录项相关的管理工作都在本层完成,如:管理活跃的文件目录表、管理打开文件表等。

    3.存取控制模块

    为了保证文件数据的安全,还需要验证用户是否有访问权限。
    这一层主要完成了文件保护相关功能。

    4.逻辑文件系统与文件信息缓冲区

    用户指明想要访问文件记录号,这一层需要将记录号转换为对应的逻辑地址。

    5.物理文件系统

    这一层需要把上一层提供的文件逻辑地址转换为实际的物理地址。

    6.辅助分配模块

    负责文件存储空间的管理,即负责分配和回收存储空间。

    7.设备管理模块

    直接与硬件交互,负责和硬件直接相关的一些管理工作。
    如:分配设备、分配设备缓冲区、调度、启动设备、释放设备等。

    8.例题

    假设某用户请求删除文件“D:/工作目录/学生信息…xlsx”的最后100条记录。

    1. 用户需要通过操作系统提供的接口发出上述请求――用户接口
    2. 由于用户提供的是文件的存放路径,因此需要操作系统一层一层地查找目录,找到对应的目录项――文件目录系统
    3. 不同的用户对文件有不同的操作权限,因此为了保证安全,需要检查用户是否有访问权限――存取控制模块(存取控制验证层)
    4. 验证了用户的访问权限之后,需要把用户提供的“记录号”转变为对应的逻辑地址――逻辑文件系统与文件信息缓冲区
    5. 知道了目标记录对应的逻辑地址后,还需要转换成实际的物理地址――物理文件系统要删除这条记录,必定要对磁盘设备发出请求――设备管理程序模块
    6. 删除这些记录后,会有一些盘块空闲,因此要将这些空闲盘块回收――辅助分配模块

    2.文件系统的全局结构(布局)

    1.文件系统在外存中的结构

    新磁盘初始化步骤:

    1. 物理格式化,即低级格式化――划分扇区,检测坏扇区,并用备用扇区替换坏扇区
    2. 逻辑格式化后,磁盘分区(分卷Volume),完成各分区的文件系统初始化。

    2.open系统调用打开文件的背后过程

    在这里插入图片描述

    3.虚拟文件系统VFS

    1.普通的文件系统

    在这里插入图片描述

    2.虚拟文件系统的特点

    在这里插入图片描述

    ①向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异
    ②VFS要求下层的文件系统必须实现某些规定的函数功能,如: open/read/write。一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统VFS的要求.
    ③每打开一个文件,VFS就在主存中新建一个vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统。
    在这里插入图片描述

    打开文件后,创建vnode,并将文件信息复制到vnode中, vnode的函数功能指针指向具体文件系统的函数功能。

    3.UFS文件系统的数据结构inode

    在这里插入图片描述

    4.FAT文件系统的数据结构

    在这里插入图片描述

    注意:vnode只存在于主存中,而inode既会被调入主存,也会在外存中存储.

    4.文件系统的挂载

    文件系统挂载( mounting) ,即文件系统安装/装载到操作系统。

    1.步骤

    ①在VFS中注册新挂载的文件系统。内存中的挂载表( mount table)包含每个文件系统的相关信息,包括文件系统类型、容量大小等。
    ②新挂载的文件系统,要向VFS提供一个函数地址列表
    ③将新文件系统加到挂载点(mountpoint) ,也就是将新文件系统挂载在某个父目录下

  • 相关阅读:
    运营商光纤资源管理:管理工具的力量
    【pandas小技巧】--列值的映射
    【数字电路与系统】【北京航空航天大学】实验:时序逻辑设计——三色灯开关(三)、功能仿真测试
    vc websocket简单测试
    OpenHarmony UI动画-recyclerview_animators
    十天学完基础数据结构-第三天(数组(Array))
    Unity3D 检测鼠标位置的Sprite像素颜色
    使用yarn
    FFplay文档解读-48-多媒体过滤器二
    MySQL主从复制错误
  • 原文地址:https://blog.csdn.net/qq_61888137/article/details/134023109
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号