文件系统和磁盘调度(下)

简介: 文件系统和磁盘调度

文件系统和磁盘调度(上):https://developer.aliyun.com/article/1459601


虚拟文件系统


  • 分层结构

上层:虚拟(逻辑)文件系统

底层:特定文件系统模块


  • 目的

对所有的不同文件系统的抽象


  • 功能

提供相同的文件和文件系统接口

管理所有的文件和文件系统关联的数据结构

高效的查询例程,遍历文件系认

与特定的文件系统模块的交互


需要包含那些内容:


  • 卷控制块

每个文件系统一个

文件系统详细信息

块,块大小,空余块、计数指针等


  • 文件控制块

每个文件一个

文件详细信息

许可、拥有者、大小、数据库位置等


  • 目录节点

每个目录项一个

将目录项数据结构和树形布局编码成树形数据结构

指向文件控制块,父节点和项目列表


数据块缓存


数据块需要按需读入内存


  • 提供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的进程,放入另一个等待处理的请求队列。这样,所有的新请求都将被推迟到下一次扫描时处理

目录
相关文章
|
6月前
|
存储 算法 Unix
文件系统和磁盘调度(上)
文件系统和磁盘调度
71 0
|
6月前
|
SDN
磁盘和文件系统管理
磁盘和文件系统管理
磁盘和文件系统管理
|
存储 IDE Linux
|
存储 Linux 索引
磁盘文件系统二
磁盘文件系统二
磁盘文件系统二
|
存储 固态存储 索引
磁盘文件系统一
磁盘文件系统一
磁盘文件系统一
|
存储 安全 Linux
磁盘文件系统三
磁盘文件系统三
磁盘文件系统三
|
存储 安全 数据安全/隐私保护
基本磁盘与动态磁盘 RAID磁盘冗余阵列区分(简单了解各种卷组)
基本磁盘与动态磁盘 RAID磁盘冗余阵列区分(简单了解各种卷组)
645 0
基本磁盘与动态磁盘 RAID磁盘冗余阵列区分(简单了解各种卷组)
|
Linux
磁盘及文件系统管理_学习笔记
时间:2017.12.01作者:李强参考:man,info,magedu讲义,神奇的internet声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。
1031 0
|
关系型数据库 调度

相关实验场景

更多