【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)给用户进程。
相关推荐
羊群智妍16 小时前
2026 AI搜索流量密码:免费GEO监测工具,优化效果看得见
笔记·百度·微信·facebook·新浪微博
山岚的运维笔记19 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
lpruoyu20 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习
wdfk_prog20 小时前
[Linux]学习笔记系列 -- [drivers][mmc][mmc_sdio]
linux·笔记·学习
果果燕20 小时前
今日学习笔记:双向链表、循环链表、栈
笔记·学习·链表
觉醒大王20 小时前
AI写的青基中了
人工智能·笔记·深度学习·学习·职场和发展·学习方法
明月醉窗台21 小时前
qt使用笔记六之 Qt Creator、Qt Widgets、Qt Quick 详细解析
开发语言·笔记·qt
Hello_Embed1 天前
libmodbus 移植 STM32(USB 串口后端篇)
笔记·stm32·单片机·嵌入式·freertos·libmodbus
张祥6422889041 天前
RTKLIB源码和理论结合分析笔记三
笔记
日更嵌入式的打工仔1 天前
0欧电阻作用
笔记