操作系统系列笔记(七) - 文件系统

文件系统

文件系统的概念

文件系统: 是操作系统中管理持久性数据的子系统, 提供数据存储和访问功能, 组织, 检索, 读写访问数据
文件: 是具有符号名, 由字节序列构成的数据项集合, 是文件系统的基本数据单位, 文件名是文件的标识符号
文件系统的功能
分配文件磁盘空间: 管理文件块(位置和顺序), 管理空闲空间(位置), 分配算法(策略)
管理文件集合: 定位(文件及其内容), 命名(通过名字找到文件), 文件系统结构(文件组织方式)
数据可靠和安全: 安全(多层次保护数据安全), 可靠(持久保存, 避免系统崩溃, 攻击等)
文件属性包括: 名称, 类型, 位置, 大小, 保护, 创建者, 创建时间, 最近修改时间…
文件信息分为两个部分, 一部分是文件头, 存在文件系统元数据当中的文件信息, 主要是文件属性和文件存储位置和顺序

文件描述符

文件描述符: 打开的文件在内存中维护的相关信息
打开文件的过程: 内核跟踪进程打开的所有文件, 操作系统为每个进程维护一个打开文件表, 文件描述符是打开文件表的标识
操作系统在打开文件表中维护的打开文件状态和信息, 包括
文件指针: 最近一次读写位置, 每个进程分别维护自己的打开文件指针
文件打开计数: 当前打开文件的次数, 最后一个进程关闭文件时, 将其从打开文件表中移除
文件的磁盘位置: 缓存数据访问信息
访问权限: 每个进程的文件访问模式信息

文件的用户视图: 用户进程看到的样子, 持久的数据结构
文件的系统视图: 数据块的集合, 系统不关心存储在磁盘上的数据的结构, 数据块是逻辑存储单元, 扇区是物理存储单元, 通常几个扇区构成一个数据块
文件系统中的基本操作单位是数据块
进程读文件 -> 获取字节所在的数据块, 返回数据块内对应部分
进程写文件 -> 获取数据块, 修改数据块中对应部分, 写回数据块
访问模式
顺序访问: 按字节依次读取, 大多数的文件访问都是
随机访问: 从中间读写, 不常用但重要, 比如虚拟内存中把内存页存储在文件
索引访问: 依据数据特征索引, 通常操作系统不完整提供索引访问
文件内部结构有: 无结构, 单词/字节序列, 简单记录结构, 分列, 固定长度, 可变长度, 复杂结构, 格式化文档, 可执行文件等

目录, 文件别名和文件系统种类

文件数量多了以后, 需要以目录的方式组织起来, 目录是一种特殊的文件, 目录的内容是文件索引表<文件名, 指向文件的指针>
目录操作有, 搜索/创建/删除文件, 列目录, 重命名文件, 遍历路径, 操作系统只允许内核修改目录以确保映射的完整性, 用户通过系统调用访问目录
目录的实现两种实现方式: 线性列表(数据量很大以后, 检索和增删时间变长, 但编程简单), 哈希表(减少目录搜索时间,但可能冲突需要有解决方案)
文件别名: 两个或多个文件名关联同一个文件
硬链接: 多个文件项指向一个文件, 删到最后一个指向它的文件名才会把文件实体删掉
软链接: 以快捷方式指向其他文件, 存的另一个文件的完整路径, 删除别名文件不受任何影响
名字解析(路径遍历): 把逻辑名字转换成物理资源, 比如文件, 依据路径名, 在文件系统中找到实际文件位置, 遍历文件目录直到找到目标文件
举例解析/bin/ls, 读取根目录的文件头(在磁盘固定位置), 读取根目录的数据块, 搜索bin, 读取bin的文件头, 读取bin的数据块, 搜索ls, 读取ls文件头
当前工作目录(pwd): 每个进程都会指向一个文件目录用于解析文件名, 允许用户指定相对路径来代替绝对路径
文件系统挂载: 文件系统需要先挂载才能被访问, 未挂载的文件系统被挂载在挂载点上
文件系统种类: 磁盘文件系统, 数据库文件系统, 日志文件系统, 网络/分布式文件系统, 特殊/虚拟文件系统
文件缓存: 操作系统中讨论的文件缓存是内存中的数据块缓存, 数据块按需读入内存, 预读会预先读取后面的数据块, 数据块使用后被缓存, 假设数据块会再次用到, 写操作也可能被缓存和延迟写入
两种缓存方式, 数据块缓存, 页缓存

文件分配

大多数文件都很小, 块空间不能太大, 需要对小文件提供很好的支持, 而一些文件非常大, 必须支持大文件, 大文件访问需要高效
文件分配研究如何表示分配给一个文件数据块的位置和顺序
分配方式有:
连续分配: 文件头指定起始块和长度, 文件读取表现好, 高效的顺序和随机访问, 但有碎片, 和文件增长问题
链式分配: 文件以数据块链表方式存储, 文件头包含了到第一块和最后一块的指针, 创建/增大/缩小很容易, 没有碎片, 但无法实现真正的随机访问, 可靠性差, 链条破坏数据会丢失
索引分配: 为每个文件创建一个索引数据块, 指向文件数据块的指针列表, 文件头包含了索引数据块指针, 创建/增大/缩小都很容易, 没有碎片, 支持直接访问, 文件很小时, 索引有开销, 大文件也有麻烦(大到一个数据块放不下索引时)
大文件的索引分配: 链式索引块, 多级索引块
UFS多级索引分配: 10块以内直接指到数据块, 第11个指针指向索引块, 第12个指针指向二级索引, 第13个指针指向三级索引, 提高了文件大小限制阈值, 动态分配数据块很容易, 小文件开销小, 只为大文件分配间接数据块, 大文件在访问数据块时需要大量查询

空闲空间管理

跟踪记录文件卷中未分配的数据块
用位图代表空闲数据块列表, 0表示空闲1表示已分配
冗余磁盘阵列: 是一种多磁盘管理技术
通常磁盘通过分区来最大限度减小寻道时间, 分区是一组柱面的集合, 每个分区都可视为逻辑上独立的磁盘
文件卷: 一个拥有完整文件系统实例的外存空间, 通常常驻在磁盘的单个分区上
使用多磁盘可改善吞吐量(通过并行), 可靠性和可用性(通过冗余)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值