zoukankan      html  css  js  c++  java
  • Lab8:文件系统

    文件系统的概念

    文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能

    文件是具有符号名,由字节序列构成的数据项集合

    文件系统的功能

    1. 分配文件磁盘空间
    • 管理文件块(位置和顺序)
    • 管理空闲空间
    • 分配算法
    1. 管理文件集合
    • 定位:文件及其内容
    • 命名:通过名字找到文件
    • 文件系统结构:文件组织方式
    1. 数据可靠和安全
    • 安全:多层次保护数据安全
    • 可靠:持久保存文件,避免系统崩溃、媒体错误、攻击等

    文件属性:名称、类型、位置、大小、保护、创建者、创建时间、最近修改时间
    文件头:文件系统元数据中的文件信息

    1. 文件属性
    2. 文件存储位置和顺序

    文件描述符

    • 文件访问模式

    进程访问文件数据前必须先“打开”文件

    • 内核跟踪进程打开的所有文件

    操作系统为每个进程维护一个打开文件表,文件描述符是打开文件的标识


    操作系统在打开文件表中维护的打开文件状态和信息

    • 文件指针

    最近一次读写位置,每个进程分别维护自己打开的文件指针

    • 文件打开计数

    当前打开文件的次数,最后一个进程关闭文件时,将其从打开文件表中移除

    • 文件的磁盘位置

    缓存数据访问信息

    • 访问权限

    每个进程的文件访问模式信息

    文件的用户视图和系统视图

    • 文件的用户视图

    持久的数据结构

    • 系统访问接口

    字节序列的集合,系统不关心存储在磁盘上的数据结构

    • 操作系统的文件视图

    数据块的集合,数据块是逻辑存储单元,而扇区是物理存储单元

    用户视图到系统视图的转换

    • 进程读文件

    获取字节所在的数据块,返回数据块内对应内容

    • 进程写文件

    获取数据块,修改数据块的对应部分,写回数据块

    访问模式

    1. 顺序访问: 按字节依次读取
    2. 随机访问: 从中间读写
    3. 索引访问: 依据数据特征索引

    文件内部结构

    1. 无结构

    单词和字节的序列

    1. 简单记录结构

    分列、固定长度和可变长度

    1. 复杂结构

    格式化文档、可执行文件等

    文件系统种类

    分层文件系统

    文件以目录的方式组织起来

    目录是一类特殊的文件,目录的内容是文件索引表<文件名, 指向文件的指针>

    目录实现

    • 文件名的线性列表,包涵了指向数据块的指针

    • 哈希表 – 哈希数据结构的线性表

    文件别名

    • 硬链接: 多个文件项指向一个文件
    • 软链接: 以“快捷方式”指向其他文件

    种类

    • 磁盘文件系统
    • 数据库文件系统
    • 日志文件系统
    • 网络/分布式文件系统
    • 特殊/虚拟文件系统

    文件系统的实现

    分层结构

    • 虚拟(逻辑)文件系统(VFS, Virtual File System)

    对所有不同文件系统的抽象,提供相同的文件系统接口,管理所有文件和文件系统关联的数据结构,与特定的文件模块进行交互

    文件系统基本数据结构

    文件卷控制块 (Unix: “superblock”)

    • 每个文件系统一个
    • 文件系统详细信息
    • 块、块大小、空余块、计数/指针等

    文件控制块(Unix: “vnode” or “inode”)

    • 每个文件一个
    • 文件详细信息
    • 访问权限、拥有者、大小、数据块位置等

    目录项 (Linux: “dentry”)

    • 每个目录项一个(目录和文件)
    • 将目录项数据结构及树型布局编码成树型数据结构
    • 指向文件控制块、父目录、子目录等

    文件系统的存储结构

    文件系统数据结构

    • 卷控制块 (每个文件系统一个)
    • 文件控制块 (每个文件一个)
    • 目录节点(每个目录项一个)

    持久存储在外存中

    • 存储设备的数据块中

    当需要时加载进内存

    • 卷控制模块 : 当文件系统挂载时进入内存
    • 文件控制块: 当文件被访问时进入每次
    • 目录节点: 在遍历一个文件路径时进入内存

    数据块缓存

    • 数据块按需读入内存

    提供read()操作
    预读: 预先读取后面的数据块

    • 数据块使用后被缓存

    假设数据将会再次用到
    写操作可能被缓存和延迟写入

    • 两种数据块缓存方式

    数据块缓存
    页缓存: 统一缓存数据块和内存页

    页缓存

    • 虚拟页式存储

    在虚拟地址空间中虚拟页面可映射到本地外存文件中

    • 文件数据块的页缓存

    在虚拟内存中文件数据块被映射成页,文件的读/写操作被转换成对内存的访问,可能导致缺页和/或设置为脏页

    文件分配

    连续分配

    文件头指定起始块和长度

    分配策略:最先匹配, 最佳匹配

    文件读取表现好,高效的顺序和随机访问

    链式分配

    文件以数据块链表方式存储

    文件头包含了到第一块和最后一块的指针

    创建、增大、缩小很容易,没有碎片

    索引分配

    为每个文件创建一个索引数据块,指向文件数据块的指针列表,文件头包含了索引数据块指针

    创建、增大、缩小很容易,没有碎片,支持直接访问

    (续

  • 相关阅读:
    1007 Maximum Subsequence Sum(25 分)
    1006 Sign In and Sign Out(25 分)
    1005 Spell It Right
    1004 Counting Leaves
    Struts10分钟入门
    MyBais入门
    Hibernate注解
    save,flush,evict
    HQL连接查询
    Hibernate-延迟加载和立即加载
  • 原文地址:https://www.cnblogs.com/secoding/p/11913837.html
Copyright © 2011-2022 走看看