【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)给用户进程。
相关推荐
AOwhisky11 小时前
MySQL 学习笔记(第六期):MySQL 备份与恢复
运维·数据库·笔记·学习·mysql·云计算
华山沦贱12 小时前
open62541 V1.5.4版对C++ Builder支持的bug
笔记
稷下元歌13 小时前
七天学会plc 加机器视觉完整笔记:S7-1200 数据类型、存储区与寻址方式(I/Q/M/DB 详解)。
网络·数据库·笔记
逸模13 小时前
AI+BIM 重构连锁公装新范式 逸模打造数字化营建核心底座
大数据·人工智能·笔记·其他·信息可视化·重构
xqqxqxxq14 小时前
树结构技术学习笔记
数据结构·笔记·学习
十月的皮皮15 小时前
C语言学习笔记202606008- 三角形判断(3种方法)
c语言·笔记·学习
XGeFei15 小时前
【Fastapi学习笔记(6)】—— Fastapi文件上传、请求头自动转换
笔记·学习·fastapi
嘶哈哈哈15 小时前
嘉立创 EDA 入门实操笔记:从原理图到 PCB 布线、差分对、覆铜与 DRC 检查
开发语言·笔记·php
一口吃俩胖子15 小时前
【脉宽调制DCDC功率变换学习笔记024】频域性能
笔记·学习
吃着火锅x唱着歌15 小时前
深度探索C++对象模型 学习笔记 第五章 构造、解构、拷贝语意学(2)
c++·笔记·学习