第14章 文件系统

14.1 为什么需要文件系统

计算机是数据的海洋,任何业务逻辑都是数据;所以程序需要输入数据进行处理,然后输出数据;那这些数据存储在哪里呢?
如果数据全部放在内存中的优缺点:
  • 优点很明确:内存访问速度很快
  • 重点来说下缺点:
  • 数据不能持久化:程序启动(进程)把数据存放在内存中,一旦进程stop或者断电,那数据就丢失了;
  • 数据不能共享:因为数据存储到内存中,os 分配给进程的内存是想读独立的,进程直接不能共享;所以一旦进程stop ,这份数据丢失,也不能保留给其他进程使用
  • 备注:程序依赖的数据,在程序启动时会加载到内存中,程序允许过程中使用的数据,从磁盘先读到内存中再使用
既然把数据存储在内存中有确定,所以数据还需要存储到一种可以持久化、可以共享的存储介质中,就是磁盘(机械盘、固态盘、智能磁盘系统);那么问题就来了,磁盘是磁头、驱动臂、磁道、扇区等等概念,如果让每个程序员都知道怎么驱动磁盘进行读写数据是不可能的;到了体现操作系统魔术师的角色了;操作系统把磁盘进行了抽象,抽象成文件和文件系统,让程序员只需要简单调用API(read/write) 就可以不关注磁盘是怎么运作的而完成数据读写到磁盘

14.2 文件系统

  • 什么是文件系统?
文件系统将其接触的磁盘物理特性转换为用户可以看到的路径名合文件名,用户对磁盘的读写操作只需要给出文件名和路径即可,无须关注磁盘物理信息(磁柱、磁头、磁道、扇区、数据块等)

  • 文件系统示意图

14.3 文件的系统的目标

文件系统的目标跟内存管理系统的目标是类似的,也是地址独立和地址保护;
  • 地址独立:在文件系统创建的一个文件的地址跟这个文件真正存储到磁盘的扇区地址是独立的,在创建的时候不用关系磁盘的存储的地址,二者直接的映射关系还是通过文件系统进行对应的,用户在文件系统创建时无须关注
  • 地址保护:文件的读写需要加上权限限制,不能所用用户都可以改写 【文件系统的地址保护跟内存的地址保护不同,内存系统的地址保护是一个进程的内存不能被其他进程访问和占用】

14.3 从用户角度看文件系统

作为文件系统的用户可能不是很关心文件系统的实现原理,也不关心磁盘的工作原理,也不关心文件系统和磁盘数据的对应关系;他关系的就是怎么来使用文件系统,这个文件系统实际就是磁盘文件的一个映射;通过文件系统我就知道磁盘现在所有的文件、和文件的属性以及文件的路径【至于文件路径、属性、名字跟磁盘的扇区、磁道怎么对应,那就是文件系统的工作了,我们不用care 这些】
  • 首先任何文件要有一个名字,否则这么多文件,我们怎么建立对应关系
  • 还有一类文件需要一个后缀名字,xx.cpp xx.py xx.sh 等等;用来对文件类型进行区分
  • 内容寻址   :  并非给出一个名字,而是给出一段内容,通过文件的内容,操作系统来排查符合查询条件的数据;实现这种方式的是 “数据库” ;现在也有专门以内容寻址为访问方式的存储系统;比如EMC 公司的 centera 系统就是内存寻址的操作系统;内容寻址的存储方式有时候很方便,比如忘记数据的名称,需要从文件里面查询一定特征的数据时就会变得非常高效!
  • 文件内容组织: 文件里面数据是否有关系,决定了文件系统是关系导向型组织和非关系导向型组织
  • 关系型组织:文件里面记录的记录是有关系的,这个关系把记录组成一个树状结构和网状结构;比如现在的数据库,已经数据biao 之间的关联关系
  • 非关系型组织:文件系统只负责记录数据,所有的数据都看成字节,不关系数据本身的意义和之间的关系,把数据的关系交给用户程序或者数据库去完成

14.4 文件类型

  • 文件: 文本文件和二进制文件
  • 目录: 目录是记录文件的文件,是关于其他文件的内容的
  • 块设备

14.5 文件的访问

  • 顺序读写
  • 随机读写,现在所有的磁盘、文件系统都支持随机读写

14.6 文件系统地址独立的实现机制

  • 文件系统的地址独立就是文件创建的地址跟磁盘的地址是独立的,那怎么建立文件和磁盘存放文件的地址呢?就是文件夹,也可以说目录(也就是路径)
  • 文件夹(多个文件夹有序构成文件系统的路径,也通过映射关系告诉OS 这个文件存放在磁盘的具体扇区)

14.7 文件系统的调用

从用户角度来看,操作系统提供的文件系统的界面就是文件系统的调用;通过系统的调用可以实现文件的读写:开打文件、读/写文件、关闭文件;
API 来完成

14.8 文件的内存映射 (mmap)

  • 解决读写文件效率低的核心思想就是把磁盘读写转换成内存读写,这样读写的效率很大大提高,实现这种访问的就是内存映射机制(mmap)。
  • mmap 的原理:把访问磁盘的文件地址映射到程序的虚拟地址;这样OS 访问这个文件时会先去程序地址对应的内存去访问(内存独立性机制),发现内存中没有这个数据,就会产生缺页中断,把文件从磁盘读入内存,然后就变成内存访问文件了,效率也大大提高了







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值