操作系统-课堂笔记-文件系统(南航)

本文深入探讨了文件系统的工作原理,从文件名的限制、扩展名的作用到文件类型的分类。重点介绍了文件的实现方式,包括连续分配、隐式链接、显式链接(FAT)和索引分配。通过分析各种分配方法的优缺点,展示了文件系统从磁盘抽象到多级目录结构的发展历程。同时,文章提到了文件共享的两种方式,并简述了日志文件系统在错误恢复中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件系统

引言

我们以探究式的方式来讲解文件系统:

  • 从零开始,提出最基本的需求,设计最基本版本的文件系统。
  • 然后不断迭代,从而引出现代操作系统使用的文件系统。

首先思考下什么是文件?

  • 首先,文件是用来保存数据的,那么数据保存在了哪里呢?
  • 保存在了磁盘中
  • 即文件和磁盘是有关的,那么两者是什么关系呢?
  • 文件是操作系统对磁盘(一级永久性存储介质)的抽象

为什么要讲文件以及磁盘的关系呢?

  • 我们说文件是对磁盘的抽象
  • 其实是一种底层思维,磁盘的基本属性是保存信息、数据
  • 那么提供一个抽象层或多个抽象层的目的是方便使用
  • 同理,我们在各个领域遇到这种情况也可以借鉴这里的思路:提供一层或多层抽象,从而由不易使用到容易使用

以同样的思路来思考问题:

  • 进程是什么的抽象?
  • 地址空间呢?

进程是对CPU的抽象:这样说可能有点笼统,但是思考下:进程是用来做计算任务的,那么CPU呢?CPU也是做计算的。

地址空间是对物理内存的抽象:对物理内存最简单的理解就是从0顺序编号,经过基层抽象和改进后形成了虚拟地址空间的抽象层。

文件系统需要做什么工作?

下面会讨论几个问题,主要围绕着文件系统需要实现哪些功能,方便我们设计文件系统。

1.关于文件名的限制:

  • 在这里插入图片描述
  • 为什么文件名中不能有上述字符?作为程序员我们要能真正的回答这个问题,而不是这样的答案:国际规定、方便管理、这是要求,像样的回答最起码应该是:
    • 以上字符可能在别处使用过了,那么到底在哪里使用过了呢?
    • \:这个字符熟悉嘛?Windows下文件路径分隔符,如果文件名里用了,那么造成了歧义,我们看到路径不禁怀疑,这到底是个路径还是个文件呢?
    • /:这个有些历史原因,该字符是DOS界面的指令标识符,如果使用,会造成指令和文件名的混乱
    • ::冒号在Windows下是用来指定盘符的,不能使用的原因同上
    • *:熟悉正则表达式的应该知道,该字符是用来模糊匹配的,称为通配符
    • ?:同上,也是通配符
    • ":双引号为什么不能使用呢?做开发熟悉的童鞋可能知道,在cmd里参数之间要加空格,那么如果文件名里有空格怎么办?将文件名用双引号引起来就好了,所以双引号不能额出现在文件名里!
    • < >:同样需要一些额外的知识才能理解,在Linux里的重定向使用的是<和>
    • |:同样需要一些额外的知识,该符号是管道符,做过操作系统相关实验的同学应该比较容易了解

现在明白了叭,原来Windows的要求都是有据可循的,不是平白无故的要求。

2.文件扩展名有哪些

Windows下有哪些扩展名?

  • .exe, .c, .cpp, .gif, .html, .jpg等等,这些扩展名有什么用呢?做个小实验就明白了
  • 首先我有一张图片:
    在这里插入图片描述
  • Windows直接给了我一个缩略图,而且双击可打开。
  • 然后我修改它的扩展名为.jp:
    在这里插入图片描述
  • 发现了吗?缩略图没了,然后我再双击:
    在这里插入图片描述
  • 出现了这个鬼东西

做了上面的实验后,思考这些扩展名有什么用呢?

  • 图片的扩展名是.jpg的时候,双击直接可以打开,也就是说Windows知道.jpg文件需要用哪个应用程序打开
  • 但是当扩展名被修改成.jp的时候,双击就不行了,Windows说让我找新应用
  • 所以说:扩展名在Windows下的作用是用来标识文件的打开方式
  • 在Unix上,系统对扩展名不做要求,扩展名仅仅用来帮助用户和应用程序识别文件,比如一个常用的操作ubuntu还原之前先备份:cp source.list source.list.back, 目的文件名的后缀名很随意吧!vim source.list.back照样可以打开的!

3.文件有哪些类型?

  1. 普通文件
  2. 目录文件
  3. 特殊文件:特殊文件用于管理 I/O 设备

4.文件是怎么保存的以及文件的属性和操作

文件是字节串:

  • 文件是一串字节
  • 用户可以将任意内容放入文件
  • OS 不关心文件的具体内容
  • windows,unix均采用了这种文件结构

文件存取方式:

  • 最简单的方式:顺序读取
    • 从头开始读,顺序读,知道结尾
    • 比如磁带
  • 直接存取:
    • 方式一:每个read函数指明地址,磁头移动到对应地址直接存取
    • 方式二:先seek,然后再顺序读取(Windows Linux均采用此方式)
    • 比如磁盘

文件有哪些属性?

  • 直观的看下有哪些字段,后面具体讨论
    在这里插入图片描述
    对文件需要有哪些操作?
  • 创建
  • 删除
  • 读、写
  • 设置读写位置
  • 设置和获取文件属性
  • 重命名等

文件目录怎么表示呢?

  • 目录是我们下面实现文件系统时需要重点关注的地方,历史上出现过单级文件目录系统
  • 仅仅有一个目录,所有文件都在此目录下
  • 世界上第一台超级计算机CDC 6600采用此法。

单级文件目录的优缺点:

  • 简单易实现
  • 查找速度慢,不允许重名

多级目录(树型结构目录):

  • 当前我们的Windows就是多级目录
  • 本质是一个树型结构,目录里还能有目录

路径名:

  • 每个文件都有唯一的路径,比如: C:\Users\xxx, /root/xxx
  • 有绝对路径和相对路径之分

对目录的操作

  • 搜索文件
  • 创建文件
  • 删除文件
  • 遍历目录
  • 重命名文件

文件的实现

上文就算做需求分析了,下面我们来考虑如何实现我

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值