Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >操作系统之文件管理

操作系统之文件管理

作者头像
JavaEdge
发布于 2021-02-23 03:54:24
发布于 2021-02-23 03:54:24
82400
代码可运行
举报
文章被收录于专栏:JavaEdgeJavaEdge
运行总次数:0
代码可运行

一、文件与文件系统

1.1 文件是什么

  • 文件是对磁盘的抽象
  • 所谓文件是指一组带标识(标识即为文件名)的、在逻辑上有完整意义的信息项的序列。
  • 信息项:构成文件内容的基本单位(单个字节,或多个字节),各信息项之间具有顺序关系
  • 文件内容的意义:由文件建立者和使用者解释

1.2 如何设计一个文件系统

这里先看文件管理的需求:

1.3 文件系统

  • 操作系统中统一管理信息资源的一种软件,管理文件的存储、检索、更新,提供安全可靠的共享和保护手段,并且方便用户使用
  • 文件系统要完成哪些任务 1、统一管理磁盘空间,实施磁盘空间的分配与回收 2、实现文件的按名存取:名字空间–映射–>磁盘空间 3、实现文件信息的共享,并提供文件的保护、保密手段 4、向用户提供一个方便使用、易于维护的接口,并向用户提供有关统计信息 5、提高文件系统的性能 6、提供与IO系统的统一接口

1.4 文件的分类

按文件性质和用途分类(UNIX),一般分为普通文件、目录文件、特殊文件(设备文件)、管道文件、套接字

  • 普通文件 即用户自己建立的文件,包含了用户的信息,一般为ASCII或二进制文件
  • 目录文件 管理文件系统的系统文件
  • 特殊文件 字符设备文件:和输入输出有关,用户模仿串行I/O设备,例如终端、打印机、网卡等。 块设备文件:磁盘

1.5 文件的逻辑结构

  • 无结构的流式文件 对文件内信息不再划分单位,它是依次的一串字符流构成的文件。
  • 有结构的记录式文件 用户把文件内的信息按逻辑上独立的含义划分信息单位,每个单位称为一个逻辑记录(简称记录)。

**说明:**这里是从用户角度看文件,由用户的访问方式确定,这里给出了三种逻辑结构,还可以组织成堆、顺序、索引、索引顺序、散列等结构。第一种是以字节为单位的流式结构,第二种是一种记录式文件结构,最后一种是树形结构。

1.6 典型的文件逻辑结构与文件存取

  • 流式文件:构成文件的基本单位是字符 文件是有逻辑意义、无结构的一串字符的集合
  • 记录式文件:文件由若干记录组成,可以按记录进行读写、查找等操作。每条记录有其内部结构
  • 文件的逻辑结构与文件存取之间的关系 顺序存取(访问) 随机存取:提供读写位置(当前位置)。如UNIXseek操作。

1.7 文件的存储介质

1.7.1 存储介质与物理块

  • 典型的存储介质 磁盘(包括固态盘SSD)、磁带、光盘、U盘、…
  • 物理块(块block、簇cluster) 信息存储、传输、分配的独立单位 存储设备划分为大小相等的物理块,统一编号

1.7.2 典型的磁盘结构

普通磁盘构造及工作原理
  • 磁道(Track)
  • 柱面(Cylinder)
  • 扇区(Sector)
  • 磁头(Heads)
  • 盘片(Platters)
  • 每个碟片都有两面,因此也会相对应每碟片有2个磁头。
  • A:磁道
  • B:扇面
  • C:扇区
  • D:簇(扇区组) 在硬盘上定位某一数据记录位置—C扇区,使用了三维定位。

1.7.3 磁盘访问

磁盘工作时盘片在高速旋转,机械手臂驱动磁头沿着径向移动,在磁道上读取所需要的数据。 一次访问磁盘的请求:读写、磁盘地址(设备号、柱面号、磁头号、扇区号),内存地址(源/目)。完成过程由三个动作组成:

  1. 寻道(时间):磁头移动定位到指定磁道
  2. 旋转延迟(时间):等待指定扇区从磁头下旋转经过
  3. 数据传输(时间):数据在磁盘与内存之间的实际传输

1.7.4 磁盘空间管理

  • 位图 用一串二进制位反映磁盘空间中分配使用情况,每个物理块对应一位,分配的物理块为0,否则为1。 申请物理块时,可以在位示图中查找1的位,返回对应的物理块号 归还时,将对应位转置1
  • 空闲块表 将所有空闲块记录在一个表中,即空闲块表 主要两项内容:起始块号,块数
  • 空闲块链表 把所有空闲块链成一个表 扩展:成组链接法

磁盘地址与块号的转换

成组链接法设计思想

**说明:**左上角的是一个专用块,表示一些有用信息,而右边大括号中的都是空闲块。所有空闲块我们分成了若干组,典型的是100块是一组,最后一个空闲组只有99个空闲块。专用块中有20个空闲块号,分别对应右边的空闲块组。每次要使用文件的时候,就从专用块中挑选空闲块,一般从801开始分配。820中的第一块实际上是记录了后面一块800中空闲块的空闲块号和总的空块的数量,后面的以此类推。最后一个组中的0则表示最后一组的标志。

成组链接法:分配算法

分配一个空闲块

L单元(空闲块数)

  • 空闲块数 > 1 , i = L + 空闲块数; 从i单元得到一个空闲块号; 把该块分配给申请者; 空闲块数减1
  • 空闲块数 = 1, 取出L + 1单元内容(一组的第一块号或0); 其值 = 0无空闲块,申请者等待 其值不等于零,把该块内容复制到专用块 该块分配给申请者;

把专用块内容读到内存L 开始的区域。

成组链表法:回收算法

归还一块

L单元的空闲块数

  • 空闲块数 < 100空闲块数加一; j := L + 空闲块数 归还块号填入j单元
  • 空闲块数 = 100, 则把内存中登记的信息写入归还块中; 把归还块号填入L+ 1单元; 将L单元置成1

二、文件控制块和文件目录

2.1 文件属性

  • 文件控制块(File Control Block:FCB) 为管理文件而设置的数据结构,保存管理文件所需的所有有关信息(文件属性或元数据)
  • 常用属性 文件名,文件号,文件大小,文件地址,创建时间,最后修改时间,最后访问时间,保护,口令,创建者,当前拥有者,文件类型,共享计数,各种标志(只读、隐藏、系统、归档、ASCII/二进制、顺序/随机访问、临时文件、锁)
  • 基本文件操作

![](https://img-blog.csdnimg.cn/img_convert/a5a3c601b9b7e0d0d85df16a22b7d1ea.png)

6

2.2 文件目录、目录项与目录文件

2.3 文件目录结构的演化

**说明:**最初是以一级目录结构,最后慢慢演化成了树形目录结构。

2.4 与目录相关的概念

  • 路径名 绝对路径名:从根目录开始 相对路径:从当前目录开始
  • 当前目录/工作目录
  • 目录操作 创建目录、删除目录等等

2.4 目录文件之间的关联

三、文件的物理结构

文件在存储介质上的存放方式

主要解决两个问题:

  • 假设一个文件被划分成N块,这N块在磁盘上是怎么存放的?
  • 其地址(块号或簇号)在FCB中是怎样记录的?

3.1 连续(顺序)结构

  • 文件的信息存放在若干连续的物理块中

在上图a中,存放者多个连续的文件,在b中有些磁盘空间被还回来了。如果有些块太小,可能就不能再利用了。在FCB中我们只需要给出文件块的首地址和块数即可。

3.2 链接结构

  • 一个文件的信息存放在若干不连续的物理块中,各块之间通过指针连接,前一个物理块指向下一个物理块

**说明:**在FCB中我们只需要给出第一块的块号即可。

于是我们可以对此种结构进行某种改造:文件分配表FAT

3.3 文件分配表(FAT)

![](https://img-blog.csdnimg.cn/img_convert/1e0fedc71930f24dc0ed2763d414ee1e.png)

11

**说明:**是把所有物理块的表指针都几种存放在一张表中,而不是用一个物理块的一部分来存放指针。从图中可以看到文件A的块号是4,而其下一个物理块的表项为7,最后到值为-1则表示结束。那某文件的起始块号从哪里得到?其实起始块号就记录在了FCB中。这种结构一般用在Windows中。在UNIX中一般采用索引结构。

3.4 索引结构

  • 一个文件的信息存放在若干个不连续物理块中
  • 系统为每个文件建立一个专用数据结构:索引表,并将这些物理块的块号存放在该索引中。
  • 索引表就是磁盘块地址数组,其中地i个条目指向文件的第i块。

那索引表应该存放在何处?

这里必须知道每个文件的索引表长度是不一样的,于是不能存放在FCB中,因为FCB是固定大小的。于是我们在FCB中只记录索引表的地址。

![](https://img-blog.csdnimg.cn/img_convert/f1a3f40e4630f06f6cf7efc01a6f6e31.png)

12

**说明:**文件B的索引块号是24,索引表是存放在一个物理块中的。索引块中就记录了分配给这个文件的物理块号,可以看到这里我们是可以随机存取的。

![](https://img-blog.csdnimg.cn/img_convert/0153ee1b94be16ef7eb08991eecf654f.png)

13

**说明:**图上部分是多级索引模式,此模式中顶级索引表中都记录的是次级索引表地址。而在图下部分则是综合模式,顶级索引表中一部分记录的是直接的物理块,而另一部分是记录的次级索表块地址,即一部分是直接寻址,一部分是间接寻址。

3.5 UNIX的三级索引结构

UNIX文件系统中采用的是多级索引结构(综合模式)

  • 每个文件的主索引表有15个索引项(FCB中),每项两个字节
  • 12项直接存放文件的物理块号(直接寻址)
  • 如果文件大于12块,则利用第13项指向一个物理块,在该块中存放的是一级索引表。假设扇区大小为512字节,物理块等于扇区块大小,一级索引表可以存放256个物理块号
  • 对于更大的文件还可以利用第14项和第15项作为二级和三级索引表
  • 问题:采用这种结构,一个文件最大可以达到多少个物理块

![](https://img-blog.csdnimg.cn/img_convert/fe14a133d7e56c27b49ba7535fe8838a.png)

14

四、文件系统的实现

4.1 概述

  • 实现文件系统需要考虑磁盘上和内存中的内容布局
  • 磁盘上 如何启动操作系统? 磁盘是怎样管理的?怎样获取磁盘的有关信息? 目录文件在磁盘上怎么存放?普通文件在磁盘上怎么存放?
  • 内存中 当进程使用文件时,操作系统是如何支持的? 文件系统的内存数据结构

4.2 相关术语

4.3 磁盘上的内容

![](https://img-blog.csdnimg.cn/img_convert/5231db71101d3c6215c3f0dbd523b7cf.png)

15

  • 引导区 包括了从该卷引导操作系统所需的信息,每个卷(分区)都有一个,通常称为扇区
  • 卷信息 包括该卷的块数、块大小、空闲块数量和指针、空闲FCB数量和指针等等
  • 目录文件

4.4 磁盘上文件系统的布局

![](https://img-blog.csdnimg.cn/img_convert/e6c9367122e635f8fa26e230cd5f8fe3.png)

16

4.5 内存中所需的数据结构(以UNIX为例)

![](https://img-blog.csdnimg.cn/img_convert/ba5a0519175e4b1060a482df29f72a8d.png)

17

五、文件系统实例(UNIX)

5.1 文件目录检索

访问一个文件–>两步骤

  • 目录检索 用户给出文件名–>按文件名查找到目录项/FCB 根据路径名检索:
    • 全路径名:从根目录开始
    • 相对路径:从当前目录开始
  • 文件寻址 根据目录想/FCB中文件物理地址等信息,计算出文件中任意记录或字符在存储介质上的地址

5.2 目录文件实现时的改进

  • 问题:如何加快目录检索?
  • 一种解决方案 目录项分解法:即把FCB分成两部分
    • 符号目录项:文件名,文件号
    • 基本目录项:除文件名外的所有字段

![](https://img-blog.csdnimg.cn/img_convert/f8f81a2e88c900ac547c9ac845283e16.png)

18

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
**说明:**每个方格表示目录文件(由目录项组成),每个椭圆表示普通文件。如何我们采用目录项分解法,于是符号目录项中的内容就特别简单,此时目录项就变成了符号目录项;基本目录项保存在了磁盘的专用区域。
  • 好处 假设一个FCB48个字节,物理块大小512字节。符号目录项占8字节(文件名6字节,文件号2字节),基本目录项占48-5 = 42字节。 这里给出一个目录文件有128个目录项,在分解前则需要13个物理块,分解后符号目录项占2块,基本目录项占11块。总块数是不变的,但是查找一个文件的平均访问磁盘的次数分解前为(1+13)/2=7次,分解后为(1+2)/2 + 1 = 2.5次。于是就提高了文件检索的速度。

六、UNIX文件系统

  • FCB= 目录项 +i节点
  • 目录项:文件名 +i节点号
  • 目录文件由目录项构成
  • i节点:描述文件的相关信息
  • 每个文件由一个目录项、一个i节点和若干磁盘块构成

![](https://img-blog.csdnimg.cn/img_convert/b6ddd2603da2a6bfce85b0d646f84aa2.png)

19

**说明:**上图是UNIX系统的文件布局。下面看如何查找一个文件

代码语言:javascript
代码运行次数:0
运行
复制

![](https://img-blog.csdnimg.cn/img_convert/300601862d4d453ecb8507ca4191ffd4.png)

20

**说明:**要查找的文件为/usr/ast/mbox,根目录文件中一个点表示本目录的目录项,两个点表示父目录的目录项,每个目录项都包含文件名和i节点号。从i节点中可以知道这个文件的第一块存放在128这个位置,于是我们读取usr中的内容,从这个目录中去找ast这个文件,以此类推。

一、文件系统实例(FAT)

1.1 Windows的FAT16文件系统

  • 簇(块)大小:1、2、4、8、16、3264扇区
  • 文件系统的数据记录在“引导扇区”中
  • 文件分配表FAT的作用 描述簇的分配状态、标注下一簇的簇号等
  • FAT表项:2字节(16位)
  • 目录项:32字节
  • 根目录大小固定

![](https://img-blog.csdnimg.cn/img_convert/4843c080d6c11860635c5a07169a935f.png)

1

1.2 FAT文件系统:主引导记录(Main Boot Record,MBR)

  • 主引导记录 一般放在零号扇区中

![](https://img-blog.csdnimg.cn/img_convert/65e5275a0ecf5db0a3acd3f5a00c2c03.png)

2

1.3 FAT文件系统:分区引导扇区(Dos Boot Record,DBR)

![](https://img-blog.csdnimg.cn/img_convert/753992dff87da2a053e08f1c781f44e9.png)

3

**说明:**这里是以FAT32为例。

1.4 引导扇区(BIOS参数块)

**说明:**这里我们看BIOS参数块,也是以FAT32为例。

1.5 引导扇区(扩展BIOS参数块EBPB)

1.6 文件分配表FAT

  • 可以把文件分配表看成是一个整数数组,每个整数代表磁盘分区的一个簇号
  • 状态 未使用、坏簇、系统保留、被文件占用(下一簇簇号)、最后一簇(0xFFFF
  • 簇号从0开始编号,簇0和簇1是保留的。

1.7 FAT16目录项

**说明:**在前面讲过,UNIX系统中i节点加上目录项就是FCB,而在FAT文件系统中FCB就等于目录项。32个字节没有用完,没用完的保留。

1.8 FAT32文件系统

  • FAT32中,根目录区(BOOT区)不是固定区域、固定大小,而是数据区的一部分,采用与子目录文件相同的管理方式
  • 目录项仍占32字节,但分为各种类型(包括:“.”目录项、“..”目录项、短文件名目录项、长文件名目录项、卷标项(根目录)、已删除目录项(第一字节为0xE5)等)
  • 支持长文件名格式
  • 支持Unicode
  • 不支持高级容错特性,不具有内部安全特性

1.9 FAT32目录项

**说明:**这是一个基本的目录项。

1.10 一般长文件名的实现方式

**说明:**左边的实现是目录项的长度不固定。第一个字段给出目录项的长度,然后把固定长度的属性记录在其后,再才是文件名,因为文件名的长度是不一样的,留出足够的空间给文件名。缺点就是一个文件删除时,就留出了一块空间,而这个空间可能不能放下其他文件,这样就会产生碎片。右边的实现是由于文件名的长度不固定,所以我们希望每个目录项的大小是固定的,其中包含了一个指向文件名起始地址的指针,然后是文件的相关属性,所有的文件名都存放在另一个区域(堆)。

1.11 FAT32中长文件名目录项格式

![](https://img-blog.csdnimg.cn/img_convert/b13c1680b55d6d985dd4e2d9536c3690.png)

11

**说明:**其中有三处地方分别记录了文件名。前5个字符(采用的是Unicode编码,则两个字节代表一个字符)保存文件名的前5个字符,于是一共可以保存13个字符。如果一个长文件名目录项不够,则需要用第二个。在第一个字段中第6位来记录是否是最后一个目录项。下面看一个例子,文件名为The quick brown.fox,采用Unicode编码。

**说明:**其实这样一个文件占用了三个目录项。第一个目录项就是短文件名目录项,后面的两个目录项主要保存文件名。再看一个更长的文件名文件例子:

**说明:**这里的文件名更长,需要占用五个目录项。

二、文件操作的实现

这里主要是以UNIX操作系统为例。

2.1 文件操作的实现

2.2 文件操作:建立文件

create(文件名,访问权限)

  • 1、检查参数的合法性 例如:文件名是否符合命名规则;有无重名文件,合法则进行下一步,否则报错返回。
  • 2、申请空闲目录项,并填写相关内容
  • 3、为文件申请磁盘块
  • 4、返回

2.3 文件操作:打开文件

为文件读写做准备:给出文件路径名,获得文件句柄(file handler)或文件描述符(file descripter),需将该文件的目录项读到内存fd = open(文件路径名,打开方式)

  • 1、根据文件路径名查目录,找到目录项(或i节点号)
  • 2、根据文件号查系统打开文件表,看文件是否已被打开,如果是,则共享计数加一,否则,将目录项(或i节点)等信息填入系统打开文件表空表项,共享计数置为一。
  • 3、根据打开方式、共享说明和用户身份检查访问合法性
  • 4、在用户打开文件表中获取一空表项,填写打开方式等,并指向系统打开文件表对应表项,返回信息:fd(文件描述符,是一个非负整数,用于以后读写文件)

2.4 文件操作:指针定位

seekfd, 新指针位置):系统为每个进程打开的每个文件维护一个读写指针,即相对于文件开头的偏移地址(读写指针指向每次文件读写的开始位置 ,在每次读写完成后,读写指针按照读写的数据量自动后移相应的数值)

  • 1、由fd查用户打开文件表,找到对应的表项
  • 2、将用户打开文件表中文件读写指针位置设为新指针的位置,供后继读写命令存取该指针处文件内容。

2.5 文件操作:读文件

read(文件描述符,读指针,要读的长度,内存目的地址)

  • 1、根据打开文件时得到的文件描述符,找到相应的文件控制块(目录项),确定读操作的合法性,读操作合法则进行下一步,否则出错处理。
  • 2、将文件的逻辑块号转换为物理块号。根据参数中的读指针、长度与文件控制块中的信息,确定块号、块数、块内位移
  • 3、申请缓冲区
  • 4、启动磁盘I/O操作,把磁盘块中的信息读入缓冲区,再送到指定的内存区(多次读盘)
  • 5、反复执行3、4直至读出所需数量的数据或读至文件尾

三、文件系统的管理

3.1 文件系统的可靠性

可靠性:抵御和预防各种物理性破坏和人为性破坏的能力

  • 块坏问题
  • 备份 通过转储操作,形成文件或文件系统的多个副本。

3.2 文件系统备份

  • 全量转储 定期将所有文件拷贝到后援存储器
  • 增量转储 只转储修改过的文件,即两次备份之间的修改。减少系统开销。
  • 物理转储 从磁盘第零块开始,将所有磁盘块按序输出到磁带
  • 逻辑转储 从一个或几个指定目录开始,递归地转储子给定日期后所有更改的文件和目录

3.3 文件系统一致性

  • 问题的产生: 磁盘块–>内存–>写回磁盘块 若在写回之前,系统崩溃,则文件系统出现不一致
  • 解决方案 设计一个使用程序,当系统再次启动时,运行该程序,检查磁盘块和目录系统

3.4 磁盘块的一致性检查

**说明::**一致性检查时,检查所有的文件和空闲块,检查完之后可能会出现四种结果。第一种是一个一致性的结果,即某个磁盘块要么分配给了某个文件,要么在空闲块中。第二种结果是在空闲块中找不到,但是也没有分配给某个文件,于是我们通过在空闲块表中将磁块标记为一来解决。第三种结果是某个磁盘块在空闲块表中出现了两次,同样是不合理的,对这一位进行修改。最后一种结果是在两个文件中出现,这种情况较为复杂,我们应该在空闲块中找一个,然后将其中一个磁盘块内容拷贝到这个空闲块中,然后将使用块表中的这一位减一。

3.5 文件系统的写入策略

对某些文件做出了修改,那么什么时候将修改后的内容写入到文件中。这里需要考虑文件系统一致性和速度。下面有几种写入策略

  • 通写(write-through) 内存中的修改立即写到磁盘。缺点是速度性能差,如FAT文件系统。
  • 延迟写(lazy-write) 利用回写(write back)缓存的方法得到高速。其缺点就是可恢复性较差,可能会导致信息丢失
  • 可恢复写(tansaction log) 采用事务日志来实现文件系统的写入,既考虑安全性,又考虑速度性能,如NTFS

四、文件系统的安全性

这里我们讨论如何确保未经授权的用户不能存取某些文件?

4.1 文件保护机制

  • 用于提供安全性、特定的操作系统机制
  • 对拥有权限的用户,应该让其进行相应的操作,否则,应禁止
  • 防止其他用户冒充对文件进行操作

于是在实现的时候需要考虑用户身份验证和访问控制。对于用户身份我们可以采用比如密码、口令等方式。

4.2 文件的访问控制

有不同的访问控制手段,比如主动控制(使用访问控制表)和能力表(使用权限表)。

  • 主动控制 每个文件一个 记录用户ID和访问权限 用户可以是一组用户 文件可以是一组文件
  • 能力表 每个用户一个 记录文件名及访问权限 用户可以是一组用户 文件可以是一组文件

4.3 UNIX的文件访问控制

采用文件的二级存取控制,审查用户的身份、审查操作的合法性

五、文件系统的性能

5.1 文件系统的性能问题

  • 磁盘服务:速度成为系统性能的主要瓶颈之一。因此,在设计文件系统时应尽可能减少磁盘访问次数
  • 提高文件系统性能的方法: 目录项(FCB)分解、当前目录、磁盘碎片整理、块高速缓存、磁盘调度、提前读取、合理分配磁盘空间、信息的优化分布、RAID技术等等

5.2 提高文件系统性能:块高速缓存(BLOCK CACHE)

又称为文件缓存、磁盘高速缓存、缓冲区高速缓存。是指在内存中为磁盘块设置的一个缓冲区,保存了磁盘中某些块的副本。当对文件系统进行操作的时候:

  • 检查所有的读请求,看所需块是否在块高速缓冲中
  • 如果在,则可直接进行读操作;否则,先将数据块读入块高速缓存,再拷贝到所需的地方。
  • 由于访问的局部性原理,当一数据块被读入块高速缓存以满足一个I/O请求时,和可能将来还会再次访问到这一数据块。

5.3 如何实现块高速缓存

  • 块高速缓存的组织方式

**说明:**在块高速缓存中有若干个数据块,首先将这些块使用一个双向链表组织起来,当要访问这个链的时候就将其从此链中拿出来,然后挂接到链尾,而我们对于某个文件使用的块要检查其是否在高速缓存中,所以这里又使用块号进行散列以提高检查速度。

5.4 Windows的文件访问方式

一般有下面三种方式:

用户对磁盘的访问通过访问文件缓存来实现:

5.5 提高文件系统性能:合理分配磁盘空间

分配磁盘块时,把有可能顺序存取的块放在一起(尽量分配在同一柱面上,从而减少磁盘臂的移动次数和距离)

**说明:**我们读取文件系统时,每次都要先找到i节点区,然后再去找到文件位置,如果i节点区在最外道,而相关文件在最里道,则在读取的时候磁臂就需要不断的移动,这样显示效率低下。一种解决方案如(a),我们将i节点区和相关文件放在距离较近的磁道上;另一种是如(b),首先将磁道分成了若干组,然后将i节点区也划分成若干部分,每一组磁道都有一个i节点区,而每个文件都和其i节点区在同一组,这样磁臂也不需要很大的移动。

5.6 提高文件系统性能:磁盘调度(重点)

当有多个访盘请求等待时,采用一定的策略,对这些请求的服务顺序调整安排,从而降低平均磁盘服务时间,达到公平、高效的目的。

  • 公平 一个IO请求在有限时间内满足
  • 高效 减少设备机械运动带来的时间开销

一次访盘时间 = 寻道时间 + 旋转延迟时间 + 传输时间

  • 减少寻道时间
  • 减少延迟时间

5.7 磁盘调度算法(重点)

例子:假设磁盘访问序列:98、183、37、122、14、124、65、67,这些数字表示柱面号或磁道号。读写头起始位置为53。请计算磁头服务序列和磁头移动总距离(道数)。下面使用几种算法进行计算:

主要的目的是减少了新请求的最大延迟。

  • 5、N-step-SCAN策略
    • 把磁道请求队列分成长度为N的子队列,每一次用SCAN处理一个子队列
    • 在处理某一个队列时,新请求添加到其他子队列中
    • 如果最后剩下请求数小于N,则它们全部都将在下一次扫描时处理
    • N值比较大时,其性能接近SCAN;当N = 1时,即FIFO

主要是为了解决磁头臂的粘性问题。

  • 6、FSCAN策略
    • 使用两个子队列
    • 扫描开始时,所有请求都在一个队列中,而另一个队列为空
    • 扫描过程中,所有新到的请求都放入另一个队列中
    • 对新请求的服务延迟到处理完所有老请求之后

主要是为了解决磁头臂的粘性问题。本算法及以上都是对磁臂移动的优化算法。

  • 7、旋转调度算法 根据延迟时间来决定执行次序的调度。一般有三种情况:
    • 若干等待访问请求访问同一磁头上的不同扇区
    • 若干等待访问请求访问不同磁头上的不同扇区
    • 若干等待访问请求访问不同磁头上的相同扇区 解决方案:
      • 对于前两种情况:总是让首先到达读写磁头位置下的扇区先进行传送操作
    • 对于第三种情况:这些扇区同时到达读写磁头位置下,可任意选择一个读写磁头进行传送操作

5.8 提高文件系统性能:信息优化分布

记录在磁道上的排列方式也会影响输入输出操作的时间。

**说明:**如果信息是按左边那样分布的,那么如果首先读到1号记录,然后花5ms处理,但是此时磁盘已经转到了4号记录,于是如果我们要处理2号记录,则必须将4、5、6、7、8都旋转过去之后才能处理2号记录;而如果信息是按右边那样分布的,当处理完1号记录,而此时磁盘也刚好旋转到了2号记录处,这样就能极大的提高文件系统的性能。

5.9 提高文件系统性能:记录的成组与分解

  • 记录的成组 把若干个逻辑记录合成一组存放在一块的工作
  • 进行成组操作时必须使用内存缓冲区,缓冲区的长度等于逻辑记录长度乘以成组的块因子(成组的长度)。
  • 成组的目的:提高了存储空间的利用率;减少了启动外设的次数,提高系统的工作效率。
  • 记录的分解 从一组逻辑记录中把一个逻辑记录分离出来

典型的例子就是目录文件的存储。

5.10 提高文件系统性能:RAID技术

起始就是独立磁盘冗余阵列(Redundant Arrays of Independent Disks),就是将多块磁盘按照一定要求构成一个独立的存储设备。目的就是提高可靠性和性能。在实现时,需要考虑存储系统的速度、容量、容错、数据灾难发生后的数据恢复

这种方式没有冗余信息保存,即无差错控制,性能是最佳的。

9

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
数据的安全性是最好的,但是磁盘利用率较低。

数据保存在前四块盘上,而校验信息保存在第五块盘上。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
操作系统入门(六)文件管理
-文件是在逻辑上具有完整意义的信息集合,它有一个名字作标识 -文件系统是操作系统中负责管理和存取文件的程序模块,也称为信息管理系统
看、未来
2020/08/25
1.1K0
操作系统概述
操作系统是控制管理整个计算机系统的软件与硬件资源,合理地组织和调度计算机的工作和资源的分配,进而为用户和应用程序提供方便接口与环境的程序集合,是一种最基本的系统软件。目前常用的计算机操作系统有windows,linux等,本文将从宏观的角度总结操作系统的工作流程,将分散的知识链接在一起,有助于理解操作系统。
月梦@剑心
2022/09/14
7110
操作系统概述
操作系统-概述
操作系统是控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境的程序集合。
千灵域
2022/06/17
1K0
操作系统-概述
操作系统文件管理
在现代计算机系统中,要用到大量的程序和数据,因内存容量有限,且不能长期保存,故而平时总是把它们以文件的形式存放在外存中,需要时再随时将它们调入内存。如果由用户直接管理外存上的文件,不仅要求用户熟悉外存特性,了解各种文件的属性,以及它们在外存上的位置,而且在多用户环境下,还必须能保持数据的安全性和一致性。显然,这是用户所不能胜任、也不愿意承担的工作。于是,取而代之的便是在操作系统中又增加了文件管理功能,即构成一个文件系统,负责管理在外存上的文件,并把对文件的存取、共享和保护等手段提供给用户。这不仅方便了用户,保证了文件的安全性,还可有效地提高系统资源的利用率。
黄规速
2022/04/14
9910
操作系统文件管理
在软盘上实现一个FAT12文件系统
在操作系统启动的过程中,第一步启动的是Booter,由于我们需要找到Loader.bin这个引导文件,我们需要在软盘上实现一个FAT12文件系统,从而方便我们的文件管理。
灯珑LoGin
2022/10/31
7450
在软盘上实现一个FAT12文件系统
【Linux】理解文件系统
  磁盘是一种用于存储数据的媒介。具体来说,磁盘是由一个或多个圆盘组成的,每个圆盘都包含一个或多个磁性表面。通过将数据以磁性方式写入磁盘表面,可以将数据存储在其中。
大耳朵土土垚
2024/11/07
1180
【Linux】理解文件系统
Linux文件系统详解
  我相信只要使用过电脑的人都对磁盘这个词不陌生,我们通常在买电脑的时候也会根据磁盘的大小做选择,磁盘作为计算机的存储设备也是很重要的一个部件。
用户11029129
2024/06/04
2010
Linux文件系统详解
Linux文件系统和inode
学到linux上的软连接和硬链接,不得不了解inode,要想知道inode,不得不了解一些文件系统,至少是Linux文件系统
用户5807183
2019/07/30
5.7K0
Linux文件系统和inode
【考研408&操作系统】最容易理解的知识体系-文件管理-面向计算机管理
用户接口是文件系统的最顶层,为用户提供了与文件系统交互的方式。这包括文件的创建、删除、移动、重命名等操作,以及打开、读写、关闭文件等基本文件操作。用户接口隐藏了文件系统内部的复杂性,使得用户能够以一种直观和方便的方式使用文件系统。
苏泽
2024/07/16
1790
【考研408&操作系统】最容易理解的知识体系-文件管理-面向计算机管理
【Linux系统IO】四、文件系统
​ 之前我们学习的都是进程与被打开文件的关系,但是那些没有被打开的文件呢,它们需不需要被管理呢 ❓❓❓
利刃大大
2025/03/06
790
【Linux系统IO】四、文件系统
[每天五分钟,备战架构师-5]操作系统之文件管理
操作系统实现了对系统硬件资源和软件资源的管理,其中软件资源主要是各种系统程序、用户应用程序,还包括大量的文档材料,这些软件资源在操作系统中大多以文件的形式存储。文件系统是操作系统中组织、存取和保护数据的重要部分,文件管理的功能包括:创建、修改、删除文件,按文件名访问文件,决定文件信息的存放位置、存放形式和存取权限,管理文件间的联系以及对文件的共享、保护和保密等。
大江小浪
2018/07/24
4880
[每天五分钟,备战架构师-5]操作系统之文件管理
软考系统架构设计师(三):操作系统
操作系统是直接控制和管理计算机硬件、软件资源,合理地对各类作业进行调度,以方便用户使用的程序集合。
陈大剩博客
2023/03/22
7720
软考系统架构设计师(三):操作系统
【Linux】Ext2 文件系统
而以上两个部分我们称为文件系统!我们在上一章已经学习过了在系统中一个被打开的文件,而本章我们开始学习在磁盘中没有被打开的文件。
YoungMLet
2024/03/01
1990
【Linux】Ext2 文件系统
操作系统之文件管理
按文件性质和用途分类(UNIX),一般分为普通文件、目录文件、特殊文件(设备文件)、管道文件、套接字
JavaEdge
2018/05/16
2.6K0
操作系统之文件管理
将文件属性从外存拷到内存中打开文件表的一表目中 将其编号返回给用户。 系统可利用该编号到打开文件表中去查找。
JavaEdge
2018/05/16
1.6K0
Linux学习笔记之Linux文件系统详解
机械磁盘由磁头(head)、磁道(track)、柱面(cylinder)、扇区(sector)和盘片(platter)组成。其中,磁头悬浮在盘片上,并且每张盘片上下各有一个磁头;每张盘片的磁道数是相同的,每张盘片相同位置的磁道组成柱面;而每一个磁道由数量相同的扇区组成,我们知道离主轴越远的扇区面积越大,而扇区大小一般为512B,必然导致存储密度越低,这样做明显浪费空间,为了解决问题,我们将磁盘密度改为等密度结构,这就意味着外围磁道的扇区数量要大于内圈的数量。
Jetpropelledsnake21
2019/07/08
2K0
Linux学习笔记之Linux文件系统详解
【Linux基础IO】从零到一:文件管理系统深度探索
前言:在Linux操作系统的广阔世界中,文件管理无疑是基石之一,它支撑着整个系统的稳定运行与高效运作。无论是日常办公、软件开发、服务器管理还是大数据处理,都离不开对文件系统的深入理解和熟练操作。因此,掌握Linux基础IO中的文件管理技能,对于每一个Linux用户、系统管理员以及开发者而言,都是至关重要的
Eternity._
2024/09/28
1500
【Linux基础IO】从零到一:文件管理系统深度探索
漫谈文件系统
翻译成中文大致意思:文件系统主要是管理数据存储以及数据如何检索的,而数据存储在磁盘或内存中。上期我们聊过了漫谈虚拟内存,本期我们就重点介绍磁盘中的机械磁盘的组成以及工作原理,然后引申到文件系统。
木可大大
2018/04/08
3.9K4
漫谈文件系统
5.文件管理
文件(file):是记录在外存上的,具有符号名的,在逻辑上具有完整意义的一组相关信息项的集合。 信息项:是构成文件内容的基本单位,可以是一个字符,也可以是一个记录。 从用户的角度看,文件是逻辑外存的最小分配单元,即信息(数据)只能以文件的形式写入外存。 一、文件的目录管理 目录管理的目标:按名存取、提高对文件的存取速度(合理安排目录) 、文件共享、允许文件重名 1.文件控制块(FCB)和索引节点 (1)FCB 为了实现“按名存取”,系统必须为每个文件设置用于描述和控制文件的数据结构,它至少要
见贤思齊
2020/08/04
8200
其他篇之操作系统——文件管理
文件管理是操作系统的功能之一,由于系统的内存有限并且不能长期存储,故平时总是把数据以文件的形式存储在外存中,需要时再将其调入内存。文件管理的主要内容有:
一半是我
2020/04/30
1.9K0
相关推荐
操作系统入门(六)文件管理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验