【OS笔记35】:文件系统的使用、实现与管理

文章目录

  • [6.2.3 文件的使用(主要操作)](#6.2.3 文件的使用(主要操作))
      • [1. 创建文件 (Create)](#1. 创建文件 (Create))
      • [2. 打开文件 (Open)](#2. 打开文件 (Open))
      • [3. 读文件 (Read)](#3. 读文件 (Read))
      • [4. 写文件 (Write)](#4. 写文件 (Write))
      • [5. 关闭文件 (Close)](#5. 关闭文件 (Close))
      • [6. 删除文件 (Delete/Unlink)](#6. 删除文件 (Delete/Unlink))
  • [6.4 文件系统的实现与管理](#6.4 文件系统的实现与管理)

6.2.3 文件的使用(主要操作)

核心概念 :对文件的操作通过操作系统提供的系统调用实现。在编程层面,这些操作表现为一组函数。

1. 创建文件 (Create)

  • 语法fd = creat(pathname, modes)
  • 参数说明
    • pathname:文件存储的路径名。
    • modes:文件的存取权限(如:只读、读写等)。
  • 返回值fd 是文件代号(File Descriptor,文件描述符),后续操作都通过这个 fd 进行。

2. 打开文件 (Open)

  • 语法fd = open(pathname, flags, modes)
  • 参数说明
    • pathname:欲打开的文件路径。
    • flags:打开文件后的操作模式(如:只读 O_RDONLY、只写 O_WRONLY、追加 O_APPEND 等)。
    • modes:文件创建时指定的存取权限。
  • 注意 :在读写文件之前,必须先执行 Open 操作,将文件控制块(FCB)调入内存。

3. 读文件 (Read)

  • 语法number = read(fd, buffer, count)
  • 参数说明
    • fd:文件代号(由 open 返回)。
    • buffer:读出的信息送往用户指定的内存区域首地址(缓冲区)。
    • count:本次请求读取的字节数。

4. 写文件 (Write)

  • 语法number = write(fd, buffer, count)
  • 参数说明
    • fd:文件代号。
    • buffer:保存欲写出信息的缓冲区首地址。
    • count:请求写出的字节数。

5. 关闭文件 (Close)

  • 语法close(fd)
  • 操作意义:撤销该文件在内存中的数据结构,释放系统资源。

6. 删除文件 (Delete/Unlink)

  • 语法unlink(pathname)
  • 参数说明pathname 为被删除文件的路径名。
  • 底层逻辑:在磁盘上找到对应的目录项,释放其占用的物理块。

6.4 文件系统的实现与管理

6.4.1 文件存储空间管理

在深入具体算法之前,需要明确主存(内存)管理文件存储(外存)管理的区别。

内存 、 外存 管理对比表

特性 主存储器 (内存 - 第5章) 辅助存储器 (外存 - 本章)
访问速度 访问快 访问慢
容量大小 容量有限 容量大
CPU访问 处理器可直接访问 处理器不可直接访问
管理名称 操作系统的存储管理 文件存储空间管理
核心任务 用户区、内存块的分配 空闲块的组织和管理

核心任务:对空闲块的管理

文件系统的一大职能是记录磁盘上哪些块是已经被占用的,哪些是空闲的。

常见的管理方法:

  1. 空闲文件表(连续分配常用)
  2. 空闲块链表
  3. 位示图法 (Bitmap)(重要,常见于计算题)
  4. 成组链接法(UNIX系统采用,结构较复杂)

关键概念说明

  1. FD (文件描述符) :文件描述符可以理解为一个"句柄"或"指针"。在 Linux 系统中,"一切皆文件",无论是硬盘上的文件、网卡,还是键盘输入,都通过 fd 进行 read/write 操作。
  2. Open 与 FCB:"打开文件"的操作实质是:系统根据路径名找到目录项,将文件的描述信息(FCB)从磁盘读入内存的打开文件表,并返回一个索引(fd)给用户进程。
相关推荐
ling___xi44 分钟前
《计算机网络》计网3小时期末速成课各版本教程都可用谢稀仁湖科大版都可用_哔哩哔哩_bilibili(笔记)
网络·笔记·计算机网络
中屹指纹浏览器2 小时前
中屹指纹浏览器底层架构深度解析——基于虚拟化的全维度指纹仿真与环境隔离实现
经验分享·笔记
Hello_Embed2 小时前
libmodbus 移植 STM32(基础篇)
笔记·stm32·单片机·学习·modbus
无聊的小坏坏3 小时前
实习笔记:用 /etc/crontab 实现定期数据/日志清理
笔记·实习日记
香芋Yu3 小时前
【机器学习教程】第04章 指数族分布
人工智能·笔记·机器学习
请输入蚊子4 小时前
«操作系统真像还原» 第二章 编写MBR主引导记录
linux·汇编·操作系统·bochs·操作系统真像还原
深蓝海拓4 小时前
PySide6从0开始学习的笔记(二十六) 重写Qt窗口对象的事件(QEvent)处理方法
笔记·python·qt·学习·pyqt
中屹指纹浏览器4 小时前
中屹指纹浏览器多场景技术适配与接口封装实践
经验分享·笔记
BugShare6 小时前
Obsidian 使用指南:从零开始搭建你的个人知识库
笔记·obsidian
深蓝海拓6 小时前
PySide6从0开始学习的笔记(二十五) Qt窗口对象的生命周期和及时销毁
笔记·python·qt·学习·pyqt