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

操作系统拿着文件名查找磁盘文件的全过程

文章目录

    • 前言
  • 操作系统拿着文件名查找磁盘文件的全过程
    • Step 1:路径解析(Path Parsing)
    • Step 2:找到文件的 inode 编号
    • Step 3:根据 inode 编号找到文件属性
    • Step 4:通过 inode 中的数据块指针找到内容
    • Step 5:磁盘访问细节(LBA寻址)
    • Step 6:路径缓存(dentry cache)
    • Step 7:跨分区查找与挂载(Mount)
    • Step 8:总结整个查找过程
    • 最终串讲一句话


前言

在写完文件系统那篇博客之后总感觉差点意思。今天这篇博客就从宏观上来讲述,操作系统拿着文件名去磁盘上查找文件的全流程。


操作系统拿着文件名查找磁盘文件的全过程

一句话总览:
从「文件名」到「磁盘数据」的查找过程,其实是操作系统从路径 → 目录 → inode → 数据块逐层解析的过程。


Step 1:路径解析(Path Parsing)

操作系统拿到一个路径(如 /home/user/test.txt),会先从根目录 / 开始查找。
路径会被拆解成多级目录:
/homeusertest.txt

每一级目录都要被访问一次。
在访问目录时,操作系统要读取它对应的 inode,并通过它的 data block 获取 文件名与 inode 的映射关系表

每个目录本质上是一个特殊文件,它的数据块中保存着「文件名 → inode编号」的对应表。


Step 2:找到文件的 inode 编号

当系统解析到最后一级目录时(例如 user 目录),它会在该目录的 data block 中查找目标文件名(test.txt)。
查到后,操作系统就得到了该文件对应的 inode 编号(inode number)

注意:
文件名不是文件的属性!
文件名保存在上一级目录的数据块中,而不是文件自己的 inode 中。


Step 3:根据 inode 编号找到文件属性

拿到 inode 编号后,操作系统进入下一步:
→ 通过 inode bitmap 找到该 inode 在 inode table 中的位置。
→ 从 inode table 中读出这个文件的属性(大小、权限、时间戳、所属用户、数据块指针等)。

inode 中最关键的信息之一是:
int data_blocks[N] —— 记录该文件内容在磁盘上的块号。


Step 4:通过 inode 中的数据块指针找到内容

操作系统根据 inode 中保存的 data block 编号,从磁盘的 data blocks 区 读出真正的文件内容。

数据块(block)是磁盘的基本存储单位(通常 4KB = 8个扇区)。
所以系统读文件时,并不是一个扇区一个扇区地读,而是以为单位批量读取。


Step 5:磁盘访问细节(LBA寻址)

此时文件内容所在的数据块(block)在物理磁盘上其实对应很多个扇区。
操作系统通过文件系统层的块号(block number)找到对应的 LBA地址(Logical Block Address),磁盘控制器再将其转换为 CHS(Cylinder-Head-Sector) 物理地址,最终定位到磁盘上的真实位置。

所以:

  • OS 只认 LBA(逻辑块地址)
  • 磁盘内部自动完成 LBA → CHS 转换

Step 6:路径缓存(dentry cache)

「等下,那每次都要从根目录查一遍?那效率岂不是爆炸低?」

没错,所以 Linux 在内存中维护了一棵 目录树缓存(struct dentry 树)

  • 每打开一个目录或文件,都会在内核中生成一个 dentry 结构
  • 这些结构以 多叉树 + Hash + LRU 的方式组织。
  • 当再次访问同一路径时,系统直接从缓存中找到目标 inode,避免磁盘 I/O

Step 7:跨分区查找与挂载(Mount)

路径中的不同部分可能对应不同分区,比如:

/  -> 根分区(/dev/sda1)
/mnt/usb  -> 挂载在U盘分区(/dev/sdb1)

所以系统在路径解析时,会根据路径前缀判断文件在哪个分区。
每个分区中都有自己的:

  • super block
  • GDT
  • inode bitmap
  • data block bitmap
  • inode table
  • data blocks

只有在挂载(Mount)操作后,分区才能与目录绑定并被访问。


Step 8:总结整个查找过程

步骤操作涉及结构说明
1️⃣解析路径dentry(目录项缓存)从根开始逐级解析路径
2️⃣查找文件名对应 inode 编号目录文件的 data block得到文件的唯一 inode number
3️⃣定位 inodeinode bitmap + inode table获取文件属性信息
4️⃣定位数据块data block bitmap + inode 中的 block 指针找到存放内容的块号
5️⃣读取文件内容LBA地址映射从磁盘加载数据块
6️⃣缓存路径dentry 树结构提高下次访问速度
7️⃣分区管理挂载(Mount)机制实现多分区统一访问

最终串讲一句话

操作系统拿着文件名找文件的全过程:

路径解析(目录→inode) → 属性查询(inode→data block) → 物理定位(block→LBA→磁盘) → 路径缓存(dentry) → 分区挂载(mount)


http://www.dtcms.com/a/581759.html

相关文章:

  • 【Hot100 | 6 LeetCode 15. 三数之和】
  • 哪些网站用wordpress建设银行网站总是崩溃
  • c#实现redis的调用与基础类
  • 【深度学习新浪潮】什么是投机解码?大模型推理优化的核心技术解析(含代码实操)
  • Verilog函数function
  • 做电商宠物带哪个网站最好网络营销方法的选择
  • 超融合系统七大核心技术详解
  • Spring Boot 2.7.18(最终 2.x 系列版本)1 - 技术选型:连接池技术选型对比;接口文档技术选型对比
  • 从0到1做一个“字母拼词”Unity小游戏(含源码/GIF)- 单词字母打乱及字母拼词填空逻辑
  • 记一次 Maven 3.8.3 无法下载 HTTP 仓库依赖的排查历程
  • Linux网络初始及网络通信基本原理
  • 免费学软件的自学网站微信app制作
  • Foundation 模态框
  • 赣州深科网站建设深圳商城网站设计电话
  • vllm学习笔记之 PD分离 kv connector
  • 有经验的佛山网站设计东莞华为外包公司
  • 什么是AIGC的创作者?
  • 51单片机基础-GPIO结构详解
  • 织梦系统如何做网站专属头像制作免费
  • 2025高校网络安全管理运维赛--电子取证分析师赛道-决赛WriteUp
  • 蒲公英异地组网路由器全新固件:4G联网、策略路由、日志管理升级
  • 网站建设规划总结做高考题的网站
  • wordpress网站被镜像wordpress邮件功能用不了
  • (111页PPT)智能工厂总体设计方案(附下载方式)
  • sh -c
  • 在若依框架中修改了 Vue 路由的 base 路径后,还需要修改以下几个地方才能正常访问?
  • Spring Boot 注册登录接口进阶(bcrypt密码加密 + Apifox 测试)
  • 重庆住房城乡建设厅官方网站自己做直播网站
  • 服装网站制作网站建设需要的条件
  • 【把Linux“聊”明白】编译器gcc/g++与调试器gdb/cgdb:从编译原理到高效调试