当前位置: 首页 > news >正文

文件系统层次结构

目录
  • 文件系统层次结构总览
  • 各层详细功能说明
    • 1. 应用程序
    • 2. 逻辑文件系统
    • 3. 文件组织模块
    • 4. 基本文件系统
    • 5. I/O 控制
    • 6. 设备
  • 一个完整的示例:读取文件
  • 总结与优势


文件系统层次结构将复杂的文件操作过程分解为多个清晰的层次,每一层都有其特定的职责,并向上一层提供简洁的接口。

下面我将详细介绍这个层次结构中的每一层,并从“用户/应用程序”的视角出发,跟踪一个读取文件请求的完整旅程。

文件系统层次结构总览

整个层次结构可以直观地表示为以下流程:

应用程序 → 逻辑文件系统 → 文件组织模块 → 基本文件系统 → I/O 控制 → 设备


各层详细功能说明

1. 应用程序

  • 角色:整个过程的发起者
  • 功能:应用程序通过高级编程语言(如 Python、Java、C++)的 API(如 fopen(), read(), write())发出文件操作请求。它只关心要打开哪个文件(通过路径名)、要读取什么数据,完全不了解底层复杂的实现细节。
  • 示例:当一个文本编辑器程序执行 file = open(“/home/user/document.txt”, “r”) 时,它就发起了这个调用链。

2. 逻辑文件系统

  • 角色:文件路径和权限的管理者
  • 功能:这是用户最直接交互的一层。它负责:
    • 管理目录结构:解析应用程序提供的文件路径(如 /home/user/document.txt)。
    • 管理元数据:维护文件的所有信息(除了实际数据本身),例如文件名、大小、创建时间、权限、所有者等。这些信息在 Linux/Unix 中存储在 inode 里,在 NTFS 中存储在 MFT(主文件表) 条目中。
    • 权限检查:根据文件的权限位和用户的身份,检查当前应用程序是否有权执行所请求的操作(如读、写、执行)。
  • 输出:权限验证通过后,它将文件路径名解析为对应的 文件控制块(FCB)或 inode 编号

3. 文件组织模块

  • 角色:数据块位置的翻译官
  • 功能:这一层并不关心文件的内容是什么,它只关心如何高效地组织文件数据在磁盘上的存储。它的核心工作是:
    • 逻辑块到物理块的映射:文件在逻辑上被划分为一个个固定大小的“逻辑块”。这一层通过文件控制块(FCB/inode)中的信息(如直接、间接指针),将应用程序请求的 “文件偏移量” 转换为具体的 “磁盘块地址”
    • 管理空闲空间:记录磁盘上哪些块是空闲的,可供分配。
  • 输出:将文件的逻辑操作(如“读取从第 1200 字节开始的 1024 个字节”)转换为对具体 物理磁盘块 的请求(如“读取第 305 号磁盘块”)。

4. 基本文件系统

  • 角色:通用磁盘操作的调度员
  • 功能:这一层接收来自上层的磁盘块请求。它负责:
    • 发出通用命令:向磁盘驱动程序发出简单的、与文件系统无关的读写命令,例如“读取块号 305”或“写入块号 418”。
    • 管理内存缓冲区(Cache/Buffer):在内存中维护一个磁盘块的缓存区,以减少对物理磁盘的实际访问次数。如果要读的块已经在缓存中,则直接返回,无需访问磁盘(缓存命中)。
    • 调度I/O请求:对多个待处理的磁盘请求进行排序和调度,使用类似电梯算法(SCAN)来优化磁头移动,提高磁盘I/O效率。

5. I/O 控制

  • 角色:硬件与软件之间的翻译器和驱动程序
  • 功能:这是最底层的软件部分,由设备驱动程序和中断处理程序组成。
    • 翻译命令:将基本文件系统发出的通用磁盘命令(如“读块305”)翻译成硬件控制器能够理解的特定指令和寄存器值
    • 处理中断:当磁盘操作完成时,硬件会发出一个中断信号。I/O控制层的中断处理程序会捕获这个中断,并通知上层操作已完成。
    • 处理设备差异:为不同的硬盘、SSD等存储设备提供统一的接口,屏蔽硬件细节。

6. 设备

  • 角色:数据的物理存储库
  • 功能:这就是实际的硬件设备,例如硬盘(HDD)、固态硬盘(SSD)或U盘。硬件控制器执行从I/O控制层接收到的指令,通过移动磁头、旋转盘片(HDD)或操作闪存颗粒(SSD)来完成数据的最终读写。

一个完整的示例:读取文件

假设用户使用 cat /home/user/test.txt 命令:

  1. 应用程序 (cat):调用 open(“/home/user/test.txt”)read() 函数。
  2. 逻辑文件系统
    • 解析路径 /home/user/test.txt
    • 在目录结构中查找名为 test.txt 的文件的 inode 编号。
    • 找到 inode,并检查当前用户是否有读权限。如果有,则将 inode 信息加载到内存。
  3. 文件组织模块
    • 应用程序请求读取文件的前 2048 字节。
    • 查看 inode,发现这些数据存储在逻辑块 10 和 11 中。
    • 将这些逻辑块号映射为物理磁盘块号(例如,块 305 和 306)。
  4. 基本文件系统
    • 接收请求:“读取磁盘块 305 和 306”。
    • 首先检查磁盘缓存(Buffer Cache)中是否已有这两个块。如果没有,则将这两个读请求加入I/O请求队列。
  5. I/O 控制(设备驱动程序):
    • 将“读块305”的请求翻译成具体的硬盘控制命令(如设置DMA,指定LBA地址等)。
    • 将这些命令写入硬盘控制器的寄存器中,启动读取操作。
  6. 设备(硬盘):
    • 硬盘控制器移动磁头到对应的磁道和扇区,读取数据。
    • 数据读取完成后,硬盘控制器发出一个中断信号。
  7. I/O 控制(中断处理程序):
    • 接收中断,知道读取操作已完成。
    • 将数据从硬盘控制器的缓冲区复制到系统内存(DMA方式)中,并通知基本文件系统操作完成。
  8. 基本文件系统:将磁盘块305和306的数据放入磁盘缓存中。
  9. 文件组织模块:从缓存中提取出对应的字节流。
  10. 逻辑文件系统:更新 inode 中的最后访问时间等元数据。
  11. 应用程序 (cat):从系统调用 read() 中接收到数据,并将其打印到标准输出(终端屏幕)上。任务完成。

总结与优势

这种分层设计体现了软件工程中的关注点分离原则,具有巨大优势:

  • 模块化:每一层只需关注自己的任务,易于设计、实现和维护。
  • 可移植性:只要接口不变,底层硬件或部分模块的改变(如换一块新硬盘)不会影响上层应用。例如,应用程序完全不需要关心文件是存储在HDD还是SSD上。
  • 抽象简化:向用户和应用程序提供了一个简单、统一、友好的文件视图(树形目录结构),隐藏了底层硬件的复杂性和差异。
http://www.sczhlp.com/news/55016/

相关文章:

  • 做电器的集团网站濮阳招聘大濮网
  • 学校网站怎么做优化友点企业网站
  • 合肥生态丽景网站建设wordpress标签3d
  • 电商类网站开发定制贵阳网站备案
  • 律师如何在网上推广seo工资水平
  • 一个主做海贼王的网站重庆建设厂
  • wordpress网站换字体颜色网络营销的主要方式k
  • 郑州网站建设招商中山精品网站建设案例
  • 四川铁科建设监理公司网站WordPress打开数据库
  • 6、设计器中变量的使用
  • 匿名函数lambda 表达式以及在 sorted() 函数中的使用
  • 汕头网站制作流程wordpress 微博登录
  • 关于建设工程招标的网站隆尧建设局网站
  • 云建站模板怎么用net123做网站
  • asp网站变慢一个网站的域名突然换了
  • 为什么没人做物流网站北京建站公司兴田德润很好
  • 大气广告设计网站源码 企业公司模板 dedecms5.7 企业网站大连模版网站
  • 网站开发需求分析包括哪些方面app开发制作专业吗
  • 做网站学什么什么专业如何做自动采集视频网站源码
  • 成都哪里有做网站建设的做头像网站静态
  • 自助建网站哪个便宜韩国购物网站有哪些
  • 李宁运动服网站建设规划书网站图片设置
  • 矢量切片工具--SparkVectorTileTool
  • 做产地证的网站进博会上海2022
  • 机械配件网站建设微信公众平台使用方法
  • 网站 图片延时加载内蒙网站建设
  • 台州网站建设方案策划刷q币网站建设
  • 网站建设行业怎么样wordpress 主页插件
  • 中国制造网注册网站免费注册太原如何做百度的网站
  • 个人网站取名现在给别人做网站还赚钱吗