文件系统和磁盘调度

文件系统

概述

文件系统:一种用于持久性存储的系统抽象

  • 在存储器上:组织、控制、导航、访问和检索数据
  • 大多数计算机包含文件系统

文件:文件系统中一个单元的相关数据在操作系统中的抽象

文件系统功能

  • 分配文件磁盘空间

    • 管理文件块
    • 管理空闲空间
    • 分配算法
  • 管理文件集合

    • 定位文件及内容
    • 命名:通过名字找到文件的接口
    • 最常见:分层文件系统
    • 文件系统类型
  • 提供的便利及特征

    • 保护:分层来保护数据安全
    • 可靠性和持久性:保持文件的持久即使发生崩溃
  • 文件和块

    • 文件属性:名称、位置、大小、保护、创建者、创建时间、最近修改时间等
    • 文件头
      • 在存储数据中保存了每个文件的信息
      • 保存文件的属性
      • 跟踪那一块存储块属于逻辑上文件结构的那个偏移

文件描述符

  • 文件使用模式

    • 使用程序必须在使用之前打开文件
  • 内核跟踪每个进程打开的文件

    • 操作系统为每个进程维护一个打开文件表
    • 一个打开的文件描述符是这个表中的索引
  • 需要元数据来管理打开文件

    • 文件指针:指向最近的一次读写位置,每个打开了这个文件的进程都是这个指针
    • 文件打开计数:记录文件打开的次数 - 当最后一个进程关闭文件的时候才允许其从打开文件表中移除
    • 文件磁盘位置:缓存数据访问信息
    • 访问权限:每个程序访问模式信息
  • 用户视图:持久的数据结构

  • 系统访问接口

    • 字节 的集合
    • 系统不会关系你想存储在磁盘上的任何数据结构
  • 操作系统内部视角

    • 块的集合(块是逻辑转换单元,而扇区是物理转换单元)
    • 块大小<>扇区大小:在unix中,块大小是4kb

用户怎么访问文件?在系统层面需要知道用户的访问模式

  • 顺序访问:按照字节依次读取
    • 几乎所有的访问都是这种方式
  • 随机访问:从中间读写
    • 不常用,但是仍然重要,例如虚拟内存支持文件:内存页存储在文件中
    • 更加快速 - 不希望获取文件中间的内容的时候也必须先获取块内所有的字节
  • 基于内筒访问:通过特征
    • 许多系统不提供此种访问方式,相反,数据库是建立在索引内容的磁盘访问上实现的(需要高效的随机访问)

文件内部结构

  • 无结构
    • 单词、比特的队列
  • 简单记录结构
    • 固定长度
    • 可变长度
  • 复杂结构
    • 格式化文档
    • 可执行文件
    • 其他

文件共享和访问控制

  • 多用户系统中的文件共享是很必要的
  • 访问控制
    • 谁能够获得那些文件的哪些访问权限
    • 访问模式:读、写、执行、删除、列举等
  • 文件访问控制列表(ACL)
    • 文件实体,权限
  • Unix模式
    • 用户|组|所有人, 读|写|可执行
    • 用户ID识别用户,表明每个用户所允许的权限以及保护模式
    • 组ID允许用户组成组,并指定了组访问权限
  • 指定多用户/客户如何同时访问共享文件
    • 和过程同步算法相似
    • 因磁盘I/O网络延时而设计简单
  • Unix文件系统语义
    • 对打开文件的写入内容立即对其他打开同一文件的其他用户可见
    • 共享文件指针允许多用户同时读取和写入文件
  • 会话语义
    • 写入内筒只有当文件关闭时可见
    • 一些操作系统和文件系统提供该功能

目录

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

  • 目录是一类特殊的文件

    • 每个目录都包含了一张表
  • 目录和文件的树形结构

    • 早期的文件系统时扁平的(只有一层目录)
  • 层次名称空间

  • 典型操作

    • 搜索文件
    • 创建文件
    • 删除文件
    • 枚举目录
    • 重命名文件
    • 在文件系统中遍历一个路径
  • 操作系统应该只允许内核模式修改目录

    • 确保映射完整性
    • 应用程序能够读目录
  • 文件名的线性列表,包含了指向数据块的指针

    • 编程简单
    • 执行耗时
  • Hash表 - hash数据结构的线性表

    • 减少目录搜索时间
    • 碰撞 - 两个文件名的hash值相同
    • 固定大小

一个文件系统需要先挂载才能被访问

一个未挂载的文件系统被挂载在挂载点上

文件别名

  • 两个活多个文件管理同一个文件

  • 硬链接:多个文件项指向一个文件

  • 软连接:以快捷方式指向其他文件

  • 通过存储真是文件的逻辑名来实现

  • 如果删除了一个有别名的文件会如何

    • 这个别名将成为悬空指针
  • Backpointers 方案:

    • 每个文件有一个包含多个backpointers的列表,所以删除所有的backpointers
    • backpointers使用菊花链管理
  • 添加一个间接层:目录项数据结构

    • 连接 - 已经存在文件的另外一个名字
    • 连接处理 - 跟随指针来定位文件

文件系统的种类

  • 磁盘文件系统
    • 文件处处在数据存储设备商,如磁盘
    • FATNTFS ext2/3等
  • 数据库文件系统
    • 文件根据其特征是可被寻址的
    • 如:WinFS
  • 日志文件系统
    • 记录文件系统的修改/事件
    • 例如:journaling file system
  • 网络/分布式文件系统
    • NFS SMB AFS GFS
    • 分布式文件系统
      • 文件可以通过网络被共享
        • 文件位于远程服务器
        • 客户算远程挂载服务器的文件系统
        • 标准文件系统访问被转换成远程访问
        • 标准的协议:NFS CIFS
      • 分布式文件系统的问题
        • 客户端和客户端上的用户辨别起来很复杂
        • NFS是不安全的
        • 一致性问题
        • 错误处理模式
  • 特殊/虚拟文件系统

虚拟文件系统

  • 分层结构
    • 上层:虚拟(逻辑)文件系统
    • 底层:特定文件系统模块
  • 目的
    • 对所有的不同文件系统的抽象
  • 功能
    • 提供相同的文件和文件系统接口
    • 管理所有的文件和文件系统关联的数据结构
    • 高效的查询例程,遍历文件系认
    • 与特定的文件系统模块的交互

需要包含那些内容:

  • 卷控制块
    • 每个文件系统一个
    • 文件系统详细信息
    • 块,块大小,空余块、计数指针等
  • 文件控制块
    • 每个文件一个
    • 文件详细信息
    • 许可、拥有者、大小、数据库位置等
  • 目录节点
    • 每个目录项一个
    • 将目录项数据结构和树形布局编码成树形数据结构
    • 指向文件控制块,父节点和项目列表

数据块缓存

数据块需要按需读入内存

  • 提供read操作
  • 预读:预选读取后面的数据块

数据块使用后被缓存

  • 假设数据将会被使用
  • 写操作可能被缓存和延时写入

两种数据块的缓存方式

  • 普通缓冲区缓存

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

    • 分页要求:

      • 当需要一个页的时候才将其载入内存
    • 支持存储

      • 一个页可以被映射到一个本地文件中

打开文件

  • 打开文件描述
    • 每个被打开的文件一个
    • 文件状态信息
    • 目录项,当前文件指针、文件操作设置等
  • 打开文件表
    • 一个进程一个
    • 一个系统级的
    • 每个卷控制块也会保存一个列表
    • 所以如果有文件被打开将不能被卸载

锁的保护机制:

  • 一些操作系统和文件系统提供该功能
  • 调节对文件的访问
  • 强制和劝告:
    • 强制:根据锁保持情况和需求拒绝访问
    • 劝告:进程可以查找锁的状态来决定怎么做

文件分配

  • 大多数文件都很小
    • 需要对小文件提供强力的支持
    • 块空间不能太大
  • 一些文件非常大
    • 必须支持大文件(64-bit文件偏移)
    • 大文件访问需要相当高效

如何为一个文件分配数据块?

  • 分配方式
    • 连续分配
      • 文件头指定起始块和长度
      • 位置/分配策略
        • 最先匹配,最佳匹配
      • 优势:文件读取表现好; 高效的顺序和随机访问
      • 劣势:碎片!; 文件增加问题:预分配?按需分配?
    • 链式分配
      • 文件以数据块链表方式存储
      • 文件头包含了到第一块和最后一块的指针
      • 优点:创建、增大、缩小很容易;没有碎片
      • 缺点:不可能进行真正的随机访问;可靠性不强:破坏一个链然后…
    • 索引分配
      • 为每个文件创建一个名为索引数据块的非数据数据块
      • 文件头包含了索引数据块
      • 优点:创建增大缩小很容易;没有碎片;支持直接访问
      • 缺点:当文件很小时,存储索引的开销,如何处理大文件?链式索引快,多级索引块
  • 指标
    • 高效:如存储利用率
    • 表现:如访问速度

空闲空间管理

跟踪在存储中所有未分配的数据块

空闲空间列表存储在哪里?空闲空间列表的最佳数据结构是什么样的?

  • 用位图代表空闲数据块列表:
    • 使用简单但是可能会是一个big vector
    • 需要保护
      • 执行空闲列表的指针
      • 位图
        • 必须保存在磁盘上
        • 在内存和磁盘拷贝可能有所不同
        • 不允许block在内存中的状态为bit而在磁盘中bit
      • 解决
        • 在磁盘上设置bit[i]为1
        • 分配block[j]
        • 在内存中设置bit[i] = 1
  • 链式列表
  • 分组列表

RAID多磁盘管理

  • 通常磁盘通过分区来最大限度减小寻道时间
    • 一个分区是一个柱面的集合
    • 每个分区都是逻辑上独立的磁盘
  • 分区:硬件磁盘的一种适合操作系统指定格式的划分
  • 卷:一个拥有一个文件系统实例的可访问的存储空间
  • 使用多个并行磁盘来增加
    • 吞吐量
    • 可靠性和可用性
  • RAID - 冗余磁盘阵列
    • 各种磁盘管理技术
    • RAID levels:不同RAID分类
  • 实现
    • 在操作系统内核:存储、卷管理
    • RAID硬件控制器

RAID0

  • 数据块分成多个子块,存储在独立的磁盘中
    • 和内存交叉相似
  • 通过更大的有效块大小来看提供更大的磁盘带宽

RAID1

  • 可靠性城北增长
  • 读取性线性增加
    • 向两个磁盘写入,从任何一个读取

RAID3

  • 存储Bit-string 作奇偶校验

RAID4

  • 数据块级磁带配有专用奇偶校验磁盘
    • 允许从任意一个故障磁盘中恢复

RAID5

  • 每个条带块有一个奇偶校验块
    • 允许一个磁盘出错

RAID6

  • 两个冗余块
    • 有一种特殊的编码方式
    • 允许两块磁盘错误

组合方式

  • RAID01
  • RAID10

其他

磁盘调度

  • 读取或者写入时,磁头必须被定为在期望的磁道,并从所期望的扇区开始
  • 寻道时间:定为到期望磁道所花费的时间
  • 旋转延迟:从扇区的开始处到达目的处花费的时间
  • 平均班旋转延时时间:磁盘旋转一周时间的一半

调度手段:

  • 先进先出:

    • 按顺序处理请求
    • 公平对待所有进程
    • 在很多进程的情况下,接近随机调度性能
  • 最短服务优先:

    • 选择从磁臂当前位置需要移动最少的I/O请求
    • 总选择最低端的寻道时间
  • SCAN方式

    • 磁臂在一个方向上个移动,满足所有未完成的请求,知道磁臂到达该方向上的最后的磁道
    • 调换方向
    • 有时被称为 elevator algorithm
  • C-SCAN

    • 限制了仅在一个方向上的扫描
    • 当最后一个磁道也被访问过之后,磁臂返回到磁盘的另外一端再进行扫描
  • C-LOOK

    • C-SCAN的改进版本
    • 磁臂先到达该方向上最后一个请求处,然后立即反转
  • N-step-SCAN

    • 在SSTF/SCAN和CSCAN几种调度算法中,都可能出现磁臂停留在某处不动的情况,例如进程反复请求对某一个磁道的IO操作。我们把这一现象称为磁臂粘着
    • N-step-SCAN算法是将磁盘请求队列分为若干个长度为N的字队列,磁盘调度将按照FCFS算法依次处理这些子队列。而每处理一个队列时优势按照SCAN算法,对每一个队列处理完成之后再处理其他队列
    • 当正在处理某个子队列时,如果出现新的磁盘I/O请求,便将新的请求进程放入其他队列,这样就可以避免出现粘着现象
  • FSCAN

    • FSCAN算法实质上是N步SCAN算法的简化,即FSCAN只将磁盘请求队列分成两个子队列
    • 一个是由于当前所有请求磁盘I/O的进程形成的队列,由磁盘调度按照SCAN算法仅此呢个处理。在处理某个队列期间,将新出现的所有请求磁盘I/O的进程,放入另一个等待处理的请求队列。这样,所有的新请求都将被推迟到下一次扫描时处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/223557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

流控制传输协议SCTP

前言 流控制传输协议&#xff08;Stream Control Transmission Protocol&#xff0c;SCTP&#xff09;是一种在网络连接两端同时传输多个数据流的协议。SCTP和TCP类似&#xff0c;都是通过确认机制实现数据传输的安全性。二者最大的区别是&#xff0c;SCTP是多宿主&#xff08…

day36算法训练|贪心part05

435. 无重叠区间 我来按照右边界排序&#xff0c;从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区间的个数就是需要移除的区间个数了。图源&#xff1a;代码随想录 class Solution { public:// 按照区间右边界排序static bool cmp (const vector<int>& a…

小程序人脸识别—检测人脸图片获取图片

wxml <view><view class"flex white"><!-- 镜头翻转 --><view bindtap"reverse">镜头翻转</view><view bindtap"clickScanCode">扫二维码</view></view><view class"head-image-box w…

面试题:SpringBoot 如何自定义自己的条件注解与自动配置?

文章目录 前言自定义条件注解自定义自动配置 前言 Spring Boot的核心功能就是为整合第三方框架提供自动配置&#xff0c;而本文则带着大家实现了自己的自动配置和Starter&#xff0c;一旦真正掌握了本文的内容&#xff0c;就会对Spring Boot产生“一览众山小”的感觉。 自定义…

ArcGIS Maps SDK for JS:关闭地图边框(v4.27)

1 问题描述 近期&#xff0c;将ArcGIS Api for JS v4.16更新到了ArcGIS Maps SDK for JS v4.27&#xff0c;原本去除地图的css代码失效了。v4.27需要用.esri-view-surface--touch-none::after控制边框属性。 下面为没有关闭地图边框的效果图。&#xff08;亮色版地图为黑色边…

LeetCode-42. 接雨水【栈 数组 双指针 动态规划 单调栈】

LeetCode-42. 接雨水【栈 数组 双指针 动态规划 单调栈】 题目描述&#xff1a;解题思路一&#xff1a;单调栈&#xff0c;维护一个单调递减栈。每当遇到当前元素大于栈顶元素就出栈&#xff0c;在出栈时更新答案。当遇到出栈的情况&#xff0c;若单调栈栈左边有一个元素则必有…

基于深度学习的Python+OpenCV的甲骨文相似度评估系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介1. 数据获取2. 深度学习模型训练3. 图像相似度评估4. 结果展示 二、功能三、系统四. 总结 一项目简介 基于深度学习的PythonOpenCV的甲骨文相似度评估系统&…

【INTEL(ALTERA)】 quartus 专业版软件 23.4 中模拟以太网子 FPGA IP 时p_ss_app_st_tx_ready 信号变为 X

问题描述 选择启用<n>前导码直通参数时&#xff0c;为什么在模拟以太网子英特尔 FPGA IP系统的 40GbE 和 50GbE Intel Agilex 7 F-Tile 变体时&#xff0c;p_ss_app_st_tx_ready 信号变为 X。 说明 由于英特尔 Quartus Prime 专业版软件 23.4 中存在一个问题&#xff…

Vue前端与后端放在一起的搭建方式

1.首先把后端项目搭建好 去到项目的存放位置 2.然后cmd黑窗口输入命令创建vue项目 3.创建成功后回到后端项目进行合并 3.1在File处选择Project Structure 3.2选择模块 3.3找到自己的vue项目 3.4疯狂next最后create 3.5选择Apply并确定OK&#xff0c;恭喜您创建成功了 二、启动…

not exists用法

not exists用法 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 不容忽视的数据库利器&#xff1a;NOT EXISTS用法详解 在数据库查询中&#xff0c;我们经常会遇到…

C# URL参数编码

string s "lw123abc测试信息&#xff01;#&#xffe5;%……&*&#xff08;&#xff09;——"; Console.WriteLine("原数据:\t\t" s); String s2 Uri.EscapeDataString(s);//Uri.EscapeDataString() 编码 Console.WriteLine("Hexdata:\t&qu…

一文读懂Java中的设计模式——适配器模式,对于兼容不同系统特别适用!

适配器模式概念 适配器&#xff08;变压器&#xff09;模式&#xff1a;这种模式的核心是当你想实现一个接口但又不想实现所有接口方法&#xff0c;只想去实现一部分方法时&#xff0c;就用默认的适配器模式&#xff0c;他的方法是在接口和具体实现类中添加一个抽象类&#xf…

升级Doris集群——2.0.1.1到2.0.3版本

之前安装的Doris版本官方说不太稳定&#xff0c;所以我们可以对其进行升级 1.关闭所有节点 2.下载2.0.3版本的Doris安装包&#xff0c;将旧版本的bin和lib目录替换为 对应新版本bin和lib目录&#xff0c;按照非master节点到master节点&#xff0c;be—broker—fe的顺序进行替…

融合技术之力:跨界电商与游戏产业的无限可能

随着全球化浪潮的不断涌现&#xff0c;出海跨界电商和游戏产业逐渐成为引领科技发展的双强。本文将深入研究Socks5代理、代理IP等技术在出海跨界电商与游戏领域的技术性应用&#xff0c;揭示它们如何为企业带来更广阔的国际市场以及在游戏领域中创造更丰富的用户体验。 1. 背景…

Intewell-Hyper I_V2.0.0_release版本正式发布

新型工业操作系统_Intewell-Hyper I_V2.0.0_release版本正式发布 软件发布版本信息 版本号&#xff1a;V2.0.0 版本发布类型&#xff1a;release正式版本 版本特点 1.建立Intewell-Hyper I基线版本 版本或修改说明 基于Intewell-Lin V2.3.0_release版本&#xff1a; 1.Devel…

算法训练营Day17

110.平衡二叉树 110. 平衡二叉树 - 力扣&#xff08;LeetCode&#xff09; 核心&#xff1a;左右子树的高度不超过1 如果不是平衡二叉树&#xff0c;则返回-1.通过是否是-1来判断是否是平衡二叉树 求高度&#xff0c;采用后续遍历。 再复习一下后续遍历的思想&#xff0c;…

在 Windows PC 上轻松下载并安装 FFmpeg

FFmpeg 是一种开源媒体工具&#xff0c;可用于将任何视频格式转换为您需要的格式。该工具只是命令行&#xff0c;因此它没有图形、可点击的界面。如果您习惯使用常规图形 Windows 程序&#xff0c;安装 FFmpeg 一开始可能看起来很复杂&#xff0c;但不用担心&#xff0c;它;很简…

淘宝、抖音、视频号直播电商“赛马”

经过多年发展&#xff0c;货架电商和社交电商在当下已是一片红海&#xff0c;因此&#xff0c;淘宝、京东、拼多多API接口等电商巨头为寻求新的增长&#xff0c;纷纷另辟蹊径&#xff0c;开始在异域探索。而由于用户如今的购物需求已经发生了天翻地覆的变化&#xff0c;于是&am…

pythom selenium Web自动化测试项目---购票系统实战

pythom selenium Web自动化测试项目—购票系统实战 环境搭建 python环境&#xff08;建议使用anaconda&#xff09; pycharm IDE集成开发工具 selenimu的安装S 安装命令&#xff1a;pip install selenium 校验环境是否搭建成功 写一个简单的demo打开浏览器看能否成功 webDriv…

中国社会科学院大学-新加坡新跃社科大学教育项目招生简章

一、项目简介 全球经济正在经历由科技进步和创新、政治和人口剧烈变化所带来的巨大的不确定性和挑战。面对日趋复杂的外部竞争环境&#xff0c;企业的领导者和管理者需要具备卓越的战略思维和全球洞察力、以科学的精神和严谨务实的态度引领企业创新发展。 为此&#xff0c;中…