【Chapter8】文件系统,计算机操作系统教程,第四版,左万利,王英

文章目录

    • @[toc]
    • 一、文件与文件系统
      • 1.1 文件
      • 1.2 文件系统
    • 二、文件的访问方式
      • 2.1 顺序访问
      • 2.2 随机访问
    • 三、文件的组织
      • 3.1 文件的逻辑组织
      • 3.2 文件的物理组织
        • 3.2.1 顺序结构
        • 3.2.2 链接结构
        • 3.2.3 索引结构
        • 3.2.4 Hash 结构
        • 3.2.5 倒排结构
      • 3.3 UNIX文件物理结构(索引+链接)
    • 四、文件目录
      • 4.1 文件控制块与目录项
      • 4.2 单级目录与多级目录
      • 4.3 文件目录的改进
      • 4.4 根目录与当前目录
      • 4.5 文件目录的查找
    • 五、文件的共享
      • 5.1 文件共享目的
      • 5.2 文件共享的模式
      • 5.3 文件共享的实现
      • 5.3 文件的保护、保密与安全
        • 5.3.1 文件的保护
        • 5.3.2 文件保密
        • 5.3.3 文件系统的安全
    • 六、文件系统的实现
      • 6.1 内存所需表目
      • 6.2 UNIX文件系统的实现
        • 6.2.1 内存所需表目(UNIX)
        • 6.2.2 外存空间的管理
      • 6.3 外存空间管理
        • 6.3.1 空闲块表
        • 6.3.2 字位映像图
        • 6.3.3 空闲链表
        • 6.3.4 *成组链接法(UNIX)
          • 6.3.4.1 空闲块管理方式:
          • 6.3.4.2 空闲inode管理方式:
    • 七、文件系统的界面
      • 7.1 创建文件
      • 7.2 打开文件
      • 7.3 关闭文件
      • 7.4 指针定位
      • 7.5 读文件
      • 7.6 建立连接
      • 7.7 断开连接
    • 八、日志结构文件系统
      • 8.1 背景
      • 8.2 日志结构文件系统
    • 九、内存映射文件
    • 九、内存映射文件

一、文件与文件系统

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.1 文件

什么是文件?

**文件(file)**是具有符号名且在逻辑上有完整意义的信息项的有序序列。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 文件的符号:即文件名,创建文件时确定,访问文件时使用

  • 信息项:构成文件基本单位;可能等长也可能不等长;具有顺序关系

  • 读写指针:记录当前信息项的读/写位置

    文件系统通常提供一个读写指针定位命令,从而支持随机读写

文件分类:

  1. 系统文件,用户文件;

  2. 临时文件,永久文件;

  3. 只读文件,只写文件,读/写文件;

  4. 磁盘文件,磁带文件,磁鼓文件;

  5. 目录文件,普通文件;

  6. 程序文件,数据文件;

    程序文件又可分为:源文件,目标文件,可执行文件,头文件,库文件

UNIX中有如下文件分类:

  • 普通文件
    • 内容可以是程序、数据、图象、MP3等,保存在磁盘块中
  • 目录文件
    • 文件名,文件号序列,文件描述信息
  • 特殊文件
    • 设备
      • 设备作为文件管理的好处
        • 界面统一,使用文件与使用设备命令相同,申请设备open,释放close,读read,写write
        • 利用文件保护功能可以保护设备

1.2 文件系统

文件与管理信息资源的程序集合称为文件系统(file system)

从上往下看,文件系统位于设备之上既需管理文件也需管理保存文件的外存空间。

文件系统为用户提供按名存取文件的手段。

二、文件的访问方式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.1 顺序访问

**顺序访问(sequential access)**就是按照从前到后的次序依次存取文件的各个信息项。

  1. 从文件头开始顺序访问
  2. 由文件中间的某一位置开始顺序访问

2.2 随机访问

**随即访问(random access)**就是无序存取文件的某些信息项。

  1. 按编号随机访问
  2. 按key随机访问

三、文件的组织

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

文件组织又称文件的结构,所谓的“逻辑结构”,就是指在用户看来,文件内部的数据应该是如何组织起来的。而“物理结构”指的是在操作系统看来,文件的数据是如何存放在外存中的。

3.1 文件的逻辑组织

文件的逻辑组织形式主要有两种:流式和记录式。

1、流式文件

流式文件(又称无结构文件),构成文件的基本单位是字节,即流式文件是具有符号名且在逻辑上有完整意义的字节序列。

如:Windows .txt文件

2、记录式文件

记录式文件(又称有结构文件),构成文件的基本单位是记录,每条记录又由若干个数据项组成。亦即记录式文件是具有符号名且在逻辑上有完整意义的记录序列。

一般来说,每条记录有一个数据项可作为关键字。根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录可变长记录两种。

3.2 文件的物理组织

文件的物理结构就是要确定如何将记录或字节保存在存储型设备的物理块中。

需要考虑因素:

  1. 记录格式

    等长or不等长(流式不必考虑)

  2. 空间开销

    除保存文件内容之外的存储开销

  3. 访问速度

    顺序访问速度、随机访问速度

  4. 长度变化

    动态增加和动态减少

物理结构可分为:顺序结构,链接结构、索引结构、散列结构、倒排结构

3.2.1 顺序结构

一个文件占有若干连续的磁盘块,首块号和块数记录在文件控制块(FCB)中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

优点:访问速度快,节省空间

缺点:长度变化困难

3.2.2 链接结构

一个文件占有若干个不连续的存储块,各块之间以指针相连。其首块号和块数被记录于该文件的文件控制块中

优点:节省空间,长度变化容易

缺点:随机访问速度慢

3.2.3 索引结构

索引结构针对链接结构随机访问慢而加以改进。

一文件可存于不连续块中,块号记在索引块中。

优点:速度快,长度变化容易

缺点:索引块占空间(外存和内存)

3.2.4 Hash 结构

**散列结构(hash structures)**又称杂凑结构。只适用于定长记录和按键随机查找的访问方式,用于构造文件目录。

哈希的思想不必多说。

散列结构的即通过计算来确定一条记录在存储设备上的存储位置。

我们可以设计一个hash函数,给定key,可以计算hash(key) = addr来作为记录在磁盘或文件中的存放位置。

hash技术自然要考虑hash冲突

如果给定key1 != key2,hash(key1) = hash(key2),我们该如何解决?

数据结构上讲过:顺序探查,二次探查,平方取中、拉链法……

这里最常用的方法是:**顺序探查法:**如发生冲突,则在冲突位置开始顺序探查第一个空闲的存储位置,将该记录保存。

下面叙述散列结构下保存、查找、删除记录的流程。

保存记录:

  1. 计算addr = hash(key)
  2. 相应位置冲突计数+1
  3. 如果查找到的记录空闲,则标记为占用,填充记录内容
  4. 否则顺序查找下一个,直到找到第一个空闲的记录项

查找记录:

  1. 计算addr = hash(key)
  2. 取addr对应记录的冲突计数count
    1. 如果count = 0,说明无此记录
  3. 否则,如果此项空闲顺取下一条记录,直到找到一条非空闲记录
  4. 如果key相等,那么说明找到
  5. 否则如果hash(key)相同,我们将count - 1
    1. 如果count = 0,那么说明查找记录不存在
  6. 否则,我们顺取下一条记录

删除记录:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 计算addr = hash(key)
  2. 调用查找过程
  3. 如果没找到,说明无此记录
  4. 否则,我们将记录项置闲,冲突计数减1

Hash 结构特点:按关键字检索速度非常快

用途:常用于目录检索

注意:文件可循环使用,满时保存失败。

3.2.5 倒排结构

记录中的域称为键,能够区分所有记录的键称为主键,其他键称为次键。以键值和记录地址构成的索引结构称为倒排结构(reverse structure)。键值为主键的索引称为主索引,键值为次键的索引称为次索引

倒排结构以多个键和多个索引作为特征。

倒排结构适合不同的查找方式,速度很快。其缺点是索引会带来较大的系统开销

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.3 UNIX文件物理结构(索引+链接)

UNIX 文件的物理结构为链接结构与索引结构的结合,也可看成是多级索引结构

具体地说,当一个文件长度不大于10 × 512B时,为零级索引;当文件长度大于10 × 512B但不大于10 × 512 + 256 × 512B时,为一级索引;当文件长度大于10 × 512 + 256 × 512B但不大于 10 × 512 + 256 × 512 + 256^2 × 512 B时为二级索引;当文件长度大于10 × 512 + 256 × 512 + 265^2 × 512 B但不大于 10 × 512 + 256 × 512 + 256^2 × 512 + 256^3 × 512 B时,为三级索引。

如下图,文件的控制结构 inode 中有 13 个索引项,即 addr[0], addr[1], …, addr[12]。

当文件长度不超过10块时,addr[0 ~ 9]充当0级间址,即指向10个信息块;

addr[10] 用作一级间址,它指向一个一级索引块,一级索引块指向256个信息块。

addr[11] 用作二级间址,指向1个一级索引块,一级索引块指向256个二级索引块,每个二级索引块分别指向256个信息块。

addr[12] 用作三级间址,指向一个一级索引块,一级索引块指向256个二级索引块,每个二级索引块指向256个三级索引块,每个三级索引块指向256个信息块。

这样做的好处是:大多数文件较短,在零级索引一级索引访问很快。大文件较长,访问二、三级索引虽然略慢,但是缓冲相应索引块到内存后,还是比较快的。

既能节省空间又提高了速度。

四、文件目录

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.1 文件控制块与目录项

**文件控制块(file control block,FCB)**是标志文件存在的数据结构,其中包含系统对文件进行管理所需要的全部信息。

每一个文件都有一个FCB,它们被保存在外存空间中。

当欲访问一个文件时,应当能够根据文件名称找到它所对应的FCB。FCB以目录项的形式存储于目录文件中。因此FCB又被称为目录项

FCB通常保存如下内容:

4.2 单级目录与多级目录

1、单级目录

所谓单级目录就是整个系统中只有一个目录,所有文件均登记在该目录中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

优点:简单

缺点:文件不能重名

2、二级目录

级目录是对单级目录的一种改进。采用二级目录时,整个系统只有一个公共目录,称为系统目录;每个用户都有一个专有目录,称为用户目录所有的用户目录均登记于系统目录中,每个用户目录下登记着该用户的文件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3、多级目录

多级目录结构是对二级目录结构的进一步改进。

文件系统呈现一种树形结构。**叶子结点是一般文件或者目录文件;非叶子结点为目录文件。**根节点是特殊的目录文件,称为根目录文件。

采用多级目录结构时,文件的名字是一个路径名。路径名由根结点开始到叶子结点结束结点名字序列所构成,其间以“/”或“\”相隔。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

优点:

  • 便于文件分类
  • 查找速度快(因为每个目录下文件较少)
  • 可以实现文件的连接(Link)

目前已为大多数操作系统所采用,如UNIX、Windows

4.3 文件目录的改进

有的系统将FCB分为两部分:FCB主部和FCB次部

**FCB主部:**包括除文件名称以外的所有信息和一个标识该主部和多少次部相对应的连接计数。

  • 保存在外存inode区域,打开时读入内存

**FCB次部:**仅包含一个文件名称和一个标识文件主部的文件号。

  • 保存在目录文件中

在存储文件的外存划分一个固定区域保存文件FCB主部,并将保存主部的记录从头依次编号就是文件号。

改进的好处:

  • 可以提高查找速度
  • 可以实现文件链接(Link),一个文件多个路径名(参考Linux ln指令)

目录改进后的查找速度:

顺序查找 n 个记录,找到一个记录的平均查找记录的次数 = (1 + 2 + … n) / n = (n + 1) / 2

设未分次部和主部的FCB构成的文件目录占n个磁盘块,则顺序查找文件目录,找到一个**文件目录(即FCB)**的平均访问磁盘块的次数 = (n + 1) / 2

设次部构成的文件目录占m个磁盘块,则顺序查找文件目录找到一个文件(FCB)的平均访盘次数 = (m + 1) / 2 + 1

若(n + 1) / 2 - ((m + 1) / 2 + 1) > 0,即 n - m > 2,由于次部占据空间小,所以m通常会比n小不少,我们查找速度一般是会快一些的。

4.4 根目录与当前目录

1、根目录

树状结构(多级目录)文件系统中,根结点对应的目录称为根目录;

根目录保存在外存空间固定位置。

2、当前目录

目前正在使用的工作目录称为当前目录。

UNIX文件卷(volume)组织形式:

引导块中是引导程序,负责将UNIX可执行程序装入内存并执行

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.5 文件目录的查找

1、从根目录开始查找

2、从当前目录开始查找

二者不仅是绝对路径和相对路径的差别,查找速度上后者也要略快。

查找算法一般有如下几种:

  1. 顺序查找:emm……
  2. 散列查找:查找速度快,但是要求预先确定目录文件的大小。
  3. 二分查找:要求文件名按字典序存放

五、文件的共享

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.1 文件共享目的

  1. 节省存储空间

    共享文件不需要开多个副本了

  2. 进程相互通信

    进程可以通过文件共享来实现通信

5.2 文件共享的模式

  1. 异步使用同一文件

    即,共享文件任意时刻最多只有一个进程访问它

  2. 同时使用一个文件

    同一时刻多个进程要求使用同一文件,但是这就又分为两种情况了:

    1. 所有进程都不修改访问文件
    2. 另一种就复杂了。我们要对读者写者进行控制

5.3 文件共享的实现

  1. 公共目录

    若干个可以被所有用户访问的公共目录,如Unix下的lib、dev等

  2. 连接(Link)

    Linux中的硬连接,软连接

  3. 共享说明

    说明文件可以由哪些用户使用,以及权限。如linux下的rwx,文件用户、组

5.3 文件的保护、保密与安全

  • 保护
    • 防止用户对文件进行非授权的访问
  • 保密
    • 防止文件内容泄露
  • 安全
    • 防止文件被破坏
      • 自然因素
      • 人为因素,攻防等
5.3.1 文件的保护
  • 对文件所有者和创建者的控制
    • 能做什么
    • 能被谁操作
  • 访问方式
    • 执行
    • 追加
    • 删除
    • 列出

1、存取控制矩阵

将用户关于所有文件的存取方式记录在一个矩阵中,该矩阵称为存取控制矩阵

加入我们对文件定义6种存取方式:R、W、E、A、M、D(读写执行追加修改删除),那么六个二进制为可表示

特点:

  • 权限规定细,过于繁琐,占据较多存储空间

UNIX访问权限说明,i_mode

放个linux下的图

ss

  • 文件主判别:访问进程u_uid == i_uid
  • 同组用户判别:访问进程u_gid == i_gid
  • i_mode在创建文件时给出,creat(filename,mode)
  • 其后文件主可以修改:chmod(filename,new_mode)
5.3.2 文件保密

1、口令

设置口令:

  • 创建文件时用户规定一个口令,系统将其记在FCB中
  • 访问文件要求给出口令,并与FCB中口令比较

特点:

  • 简单
  • 保密性不强(对系统操作者不保密)

2、密码

口令由于保存在FCB中保密性太差因而可能泄露,密码则是通过将文件内容加密,那么即使泄露了,窃取者在不知密码的情况下也只是获取了一堆杂乱无章的数据。

使用:

  • 保存时加密
  • 读取时解密

**特点:**对文件内容加密,速度慢,效果好

  • 保存时:
    • 用key启动一个随机数发生器,产生一个随机数序列,将其依次加到文件的各个字中
  • 读取时:
    • 用同一个key启动同一个随机数发生器,产生相同随机数序列,将其依次由文件的各个字中减去

线性同余法产生随机数

size_t random (size_t key) {
    return (key * C1 + C2) % C3;
}
5.3.3 文件系统的安全

备份(Backup)原理

  • 定期将磁盘上的文件复制到磁带上
  • 发生故障时由磁带恢复(limited recovery)

实现方式

  • 完全转储:定期将磁带上文件全部复制到磁带上
    • 恢复:最后一次转储磁带
    • 优点:恢复容易
    • 缺点:大量冗余
  • 增量转储
    • 每次只复制上次转储以来修改的部分
    • 恢复:由初始转储磁带开始,利用第二次转储磁带、第三次转储磁带、……、最后一次转储磁带,逐步恢复到最终版本
    • 优点:每次转储数据少
    • 缺点:实现麻烦,某次转储磁带发生问题将使恢复困难

磁盘整理

利用转储和恢复可以对磁盘进行整理(使文件物理块连续,空闲盘块连续)

六、文件系统的实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6.1 内存所需表目

文件访间时需要经常访问文件控制信息,为提高访问速度需要将控制信息缓存到内存,因此文件使用前需要打开,使用后需要关闭

  • 系统打开文件表(系统一个)
    • 修改标志是指FCB主部在内存期间是否被修改

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 用户打开文件表(每个进程一个)
    • 文件可以共享,多个进程对文件的打开方式可以不同,读写位置可以不同,这些信息记录在一个表中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下面一张示例图展示两种表之间的关系:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6.2 UNIX文件系统的实现

6.2.1 内存所需表目(UNIX)
  • 用户打开文件表
    • u_ofile(每个进程一个):保存用户打开文件的读写指针
    • file(整个系统一个):保存所有用户的打开文件表目,每个用户被分配的file表目数目不同
  • 系统打开文件表
    • inode(整个系统一个)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6.2.2 外存空间的管理

后面详细介绍

  • 空闲块表
  • 字位映像图(LINUX)
  • 成组连接(UNIX approach)

6.3 外存空间管理

6.3.1 空闲块表

这种方法是将所有的空闲块记录在同一个表中,该表称为空闲块表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6.3.2 字位映像图

位图(bitset)

这种方法用1位(1bit)来表示外存储器中一块的状态,可以规定当某一位的值为0时,该位所对应的外存块空闲,而当某一位的值为1时,该位所对应的外存块被占用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6.3.3 空闲链表

系统保存着空闲链表链头、链尾指针,空闲链表通常分为以下两种形式:

空闲盘块链:以盘块为单位组成一条空闲链,

空闲盘区链:以盘区为单位组成一条空闲链

  • 一个盘区由多个盘块组成

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6.3.4 *成组链接法(UNIX)

回忆UNIX文件卷组织形式

引导块中是引导程序,负责将UNIX可执行程序装入内存并执行

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

UNIX 外存空间的管理采用成组连接方式,空闲块链与空闲块表的结合。

特殊块/超级块(super block)

  • 记载文件卷上 k + 1 块到 n - 1 块中所有空闲块
  • inode区中100个空闲inode(缓存)

文件安装(mount)后超级块读入内存。

注:占用区域已经记载在各个文件的inode中。

超级块的结构图如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • s_nfree 记录超级块内的块的数目
  • s_free[i]都指向一个块
  • s_free[0]指向一个索引块,索引块又指向新的一组(100个空闲块)

下面介绍空闲块管理方式,就明白成组链接的原理了。

6.3.4.1 空闲块管理方式:

相关结构:s_free,s_nfree

  • 缓冲区sfee中记录的100个空闲块采用的次序管理。
    • 申请块时,若s_nfree > 1,取缓冲区s_free[ – s_nfree]
      • 如果申请时,s_nfree = 1,那么读入连接块s_free[0]
      • 将连接块中的s_free 和 s_nfree 信息登记在缓冲区
    • 分配空闲块
    • 归还块时,如果s_nfree < 100,那么s_free[s_nfree ++ ] = 归还块号
      • 如果s_nfree == 100,那么将 s_free 中记录的100个空闲块号连同 s_nfree 一同登记在连接块内,并写回外存
      • s_free[0] = 连接块号
      • s_nfree = 1
6.3.4.2 空闲inode管理方式:

相关结构:s_inode,s_ninode

s_inode 最多记录 100 个空闲 inode 的编号

  • 申请时,取s_inode[-- s_ninode]
    • 如果 s_ninode == 0,说明缓冲区里的inode用完,我们顺序扫描inode区域,拿100个空闲inode编号并记录到s_inode
  • 释放时,s_inode[s_ninode ++ ] = 释放编号
    • 如果s_ninode = 100,丢弃该inode编号
    • 注意,内存中inode发生变化,我们的选择是及时写回外存

七、文件系统的界面

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

文件系统与用户之间的界面形式是一组系统调用命令,它们可以被写在用户程序中,是文件使用者与文件系统交互的途径。

文件的系统调用命令是文件系统与上层软件之间唯一的界面形式。

7.1 创建文件

命令形式:creat(path_name,fcb_args)

参数说明

  • path_name:文件路径名
  • fcb_args:参数

执行步骤:

  1. 为此文件分配一个FCB主部,初始化(文件主、共享说明、创建时间、长度等)
  2. 将文件名和文件号作为FCB次部填到末级目录中
  3. 以写方式打开
    • 例如: creat(“/usr/li/d1/f1”, mode)

7.2 打开文件

命令形式:fd=open(path_name, mode)

参数说明:

  1. path name:文件路径名
  2. mode:打开方式

执行步骤

  1. 根据文件路径名查目录找到文件号,和FCB主部
  2. 合法性检查(根据打开方式、共享说明、用户身份)
  3. 根据文件号查系统打开文件表看该文件是否已被打开,如是共享计数加1;否则取一个空闲的系统打开文件表项并将外存中 FCB主部等信息填入此表项,共享计数置为1;
  4. 在用户打开文件表中取一空表项,填写打开方式和读写指针,并指向系统打开文件表的对应表项。
    • 返回信息:fd:文件描述符(在用户打开文件表中的入口)它是一个非负整数,

7.3 关闭文件

命令形式:close(fd)

参数说明

  • fd:文件描述符

执行步骤:

  1. 由 fd 查用户打开文件表,找到系统打开文件表
  2. 系统打开文件表中共享计数减1,如减1后的值为0且修改标志为1,则将此FCB 由内存写回外存FCB主部;
  3. 将fd所对应的用户打开文件表项置为空闲

7.4 指针定位

**命令形式:**seek(fd,offset)

参数说明:

fd:文件描述符;

offset:新的指针位置.

执行步骤:

  1. 由 fd 查用户打开文件表,得系统打开文件表入口
  2. 查系统打开文件表,得文件长度
  3. 检查参数合法性
  4. 将用户打开文件表中文件读写指针位置设定为offset,后继读写命令由该指针处存取文件内容

7.5 读文件

**命令形式:**read(fd,nrd,buf)

参数说明:

fd:文件描述符;

nrd:读入记录个数;

buf:内存起始位置.

步骤:

  1. 由fd查用户打开文件表,找到对应的入口;

  2. 合法性检查(用户打开文件表中所记录的打开方式、存取方式)

  3. 查系统打开文件表,找到文件的地址;

  4. 根据逻辑地址(offset)和物理结构计算物理地址;

  5. 如在缓冲区中;所需字节复制到进程空间buf起始位置;

  6. 否则申请缓冲区(可能多个)链入设备IO队列,若设备空闲启动设备,等待IO传输完成(切换进程),所需字节复制到进程空间buf起始的位置。

7.6 建立连接

**命令形式:**link(old name,new name)

参数含义:

old_name:已存在的文件路径名;

new_name:欲连接的文件路径名,

执行步骤:

  1. 查目录找到文件old name的FCB主部,由此得到文件号;

  2. 查目录找到文件new_name的末级目录;

  3. 将文件号与new_name中末级名字合起来构成一个新的目录项,将其填入new name的末级目录文件中;

  4. 将FCB主部中的连接计数加1

7.7 断开连接

**命令形式:**unlink(path_name)

参数含义:

path_name:文件路径名,

执行步骤:

  1. 查目录找到文件path_name的FCB主部

  2. 将连接计数i_nlink减1

  3. 如减1后的值为0,则归还该文件所占用的全部存储块,该文件将被撤销

  4. 将FCB次部由上级目录中清除

八、日志结构文件系统

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

8.1 背景

  • CPU速度越来越快
  • 内存容量以接近指数级速度增长
  • 磁盘容量,更大更便宜
  • 磁盘速度的提高却相对较慢
    • 成为系统效率的瓶颈
    • 缓存的增加,使大部分读盘操作可以在缓存中得到
    • 写操作(多数为小量写)是影响文件系统效率的关键

UNIX中创建一个文件:

  1. (文件名,文件号)写入目录中
  2. 新文件inode更新
  3. 目录文件inode更新(长度变化)
  4. 写入文件内容

小量写(small write)

  1. 一次写修改磁盘块上的一小部分数据
  2. 假定一次写需要10ms寻道时间,4ms旋转延迟,50μs读写磁盘访问效率只有 50 / (14000 + 50) = 0.36%.

考虑写延迟

  • 发生故障给文件系统一致性带来威胁

8.2 日志结构文件系统

UC Berkley 的研究人员提出一种新的文件系统——日志结构文件系统(LSFS)

LSFS将整个磁盘看做一个日志,周期性地追加新日志。写操作并非直接反映到磁盘上,而是被暂时存到内存缓冲区中,其中包括新写的数据,也包括更新数据当积累到一定规模时,作为一个segment追加到日志的末尾。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

段包括索引结点(inode)、目录(directory)以及数据块(datablock),每个段的开始处都包含一条总结信息(summary),说明该段的信息组
织情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由于索引结点的存储位置不能由其编号确定,系统维护一个索引结点图(inode map),以实现从文件号i-number 到磁盘索引结点inode位置的映射。索引结点图被保存在磁盘上,但是被缓存到内存以提高访问速度。打开文件时由文件号i-number查索引结点图找到索引结点,进而找到文件数据块。

当日志将磁盘写满时,新段无法继续写入。由于已写入盘中的段可能有陈旧信息,系统设置一个清洁线程(cleaner)循环扫描磁盘并对段进行压缩

  • 清洁线程首先读入第一个段,然后查找索引结点图确定索引结点是否为新版并仍然被使用,
  • 若不是则信息被丢弃。
  • 仍然有用的索引结点和数据块与内存中的当前段合并作为新段写回磁盘,旧段被标记为空闲,然后顺序处理下一个段。

九、内存映射文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 文件保存于外存,存取速度慢
    • 访问之前需要打开
    • 每次访问需要经过“打开文件表
    • 读写需要经过I/O传输
      • 缓冲可以提高速度,但首次访问需要I/O
    • 内存容量增加,利用率不充分
      • 进程虚拟空间大,只使用较小的一部分

内存映射文件:将文件映射到内存,以访问内存的方式访问文件

  • 以访问内存的方式访问文件数据
  • 文件数据的读入、写出由操作系统自动完成
  • 进程关闭文件时,操作系统自动将文件被修改的数据写回磁盘
  • 多个进程可以映射同一个文件,实现共享

ry)以及数据块(datablock),每个段的开始处都包含一条总结信息(summary),说明该段的信息组
织情况。

[外链图片转存中…(img-OytUfHHT-1719408518180)]

由于索引结点的存储位置不能由其编号确定,系统维护一个索引结点图(inode map),以实现从文件号i-number 到磁盘索引结点inode位置的映射。索引结点图被保存在磁盘上,但是被缓存到内存以提高访问速度。打开文件时由文件号i-number查索引结点图找到索引结点,进而找到文件数据块。

当日志将磁盘写满时,新段无法继续写入。由于已写入盘中的段可能有陈旧信息,系统设置一个清洁线程(cleaner)循环扫描磁盘并对段进行压缩

  • 清洁线程首先读入第一个段,然后查找索引结点图确定索引结点是否为新版并仍然被使用,
  • 若不是则信息被丢弃。
  • 仍然有用的索引结点和数据块与内存中的当前段合并作为新段写回磁盘,旧段被标记为空闲,然后顺序处理下一个段。

九、内存映射文件

[外链图片转存中…(img-oqJYZpR7-1719408518180)]

  • 文件保存于外存,存取速度慢
    • 访问之前需要打开
    • 每次访问需要经过“打开文件表
    • 读写需要经过I/O传输
      • 缓冲可以提高速度,但首次访问需要I/O
    • 内存容量增加,利用率不充分
      • 进程虚拟空间大,只使用较小的一部分

内存映射文件:将文件映射到内存,以访问内存的方式访问文件

  • 以访问内存的方式访问文件数据
  • 文件数据的读入、写出由操作系统自动完成
  • 进程关闭文件时,操作系统自动将文件被修改的数据写回磁盘
  • 多个进程可以映射同一个文件,实现共享

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS Next开发学习手册——进程模型线程模型

进程模型 系统的进程模型如下图所示&#xff1a; 应用中&#xff08;同一包名&#xff09;的所有PageAbility、ServiceAbility、DataAbility、FormAbility运行在同一个独立进程中&#xff0c;即图中绿色部分的“Main Process”。 WebView拥有独立的渲染进程&#xff0c;即图中…

智能工厂中滑环应用的集成式和分立式数据接口解决方案

第四次工业革命通过在生产过程中实现新场景来推动数字化制造向前发展。这些场景依赖于基本的设计原则&#xff0c;包括器件互联、信息透明、技术协助&#xff0c;以及分散决策。没有先进的无线通信技术&#xff0c;就无法在现代智能工厂中实现所有这些原则。它们支持在广泛的领…

JM日志文件解析

研究意义 JM代码是对H264协议支持最全面的,不但还有编码还包括解码,通过它生成的trace文件可以对码流做一个很好的解读,目前很多码流分析工具也是基于JM的trace文件进行分析,研究它可以更深刻的理解H264协议。 环境搭建 先用cmake.exe 生成VS的工程文件 ●用VS 2019编译…

Modbus TCP什么场景用?

什么是Modbus TCP Modbus TCP是一种基于TCP/IP网络的通信协议&#xff0c;它允许不同的设备通过以太网进行数据交换。Modbus协议最初是为串行通信设计的&#xff0c;但随着网络技术的发展&#xff0c;Modbus TCP应运而生&#xff0c;它继承了Modbus RTU和Modbus ASCII的许多优点…

【分布式文件系统HDFS】文件操作基本命令的使用

目录 一、按照下述要求写出相应的文件操作命令&#xff0c;执行并观察结果 1. 新建目录 1.1 在本地文件系统按要求创建如下的文件夹 1.2 在HDFS文件系统按要求创建如下的文件夹 2. 编辑文件test1.txt&#xff0c;放入本地文件夹 /opt/user/myfile 3. 使用moveFromLocal命令…

沙盒在数据防泄密领域意义

在信息化快速发展的今天&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;数据泄密事件频发&#xff0c;给企业的安全和发展带来了巨大威胁。SDC沙盒防泄密系统&#xff0c;作为一种创新的数据防泄密解决方案&#xff0c;正逐渐在数据防泄密领域发挥着越来越重要的…

客户端输入网址后发生的全过程解析(协议交互、缓存、渲染)

目录 1. 输入 URL 并按下回车键2. DNS 解析3. TCP 连接4. 发送 HTTP 请求5. 服务器处理请求6. 发送 HTTP 响应7. 浏览器接收响应8. 渲染网页9. 执行脚本10. 处理其他资源11. TLS/SSL 加密&#xff08;如果使用 HTTPS&#xff09;握手过程 12. 协议协商和优化 总结 1. 输入 URL …

低碳短视频:成都柏煜文化传媒有限公司

低碳短视频&#xff1a;绿色传播的新风尚 随着全球气候变化和环境问题日益严峻&#xff0c;低碳生活已经成为人们追求的新风尚。在这个背景下&#xff0c;低碳短视频应运而生&#xff0c;以其独特的方式传播绿色理念&#xff0c;推动低碳生活方式的普及。成都柏煜文化传媒有限…

如何使用sr2t将你的安全扫描报告转换为表格格式

关于sr2t sr2t是一款针对安全扫描报告的格式转换工具&#xff0c;全称为“Scanning reports to tabular”&#xff0c;该工具可以获取扫描工具的输出文件&#xff0c;并将文件数据转换为表格格式&#xff0c;例如CSV、XLSX或文本表格等&#xff0c;能够为广大研究人员提供一个…

boss直聘招聘数据可视化分析

boss直聘招聘数据可视化分析 一、数据预处理二、数据可视化三、完整代码一、数据预处理 在 上一篇博客中,笔者已经详细介绍了使用selenium爬取南昌市web前端工程师的招聘岗位数据,数据格式如下: 这里主要对薪水列进行处理,为方便处理,将日薪和周薪的数据删除,将带有13薪…

Excel 将某个序列随机重排 N 次

A 列是个随机序列&#xff0c;B2 格是参数&#xff0c;表示重排的次数。 AB1ItemsReplicates2A23B4C5D 要求将 A 列重拍 N 次 D1Result2C3D4B5A6D7A8B9C 使用 SPL XLL&#xff0c;输入公式&#xff1a; spl("?2.conj(?1.sort(rand()))",A2:A5,B2)"整数.()…

RK3568平台开发系列讲解(调试篇)分析内核调用的利器 ftrace

🚀返回专栏总目录 文章目录 一. 指定 ftrace 跟踪器二、设置要 trace 的函数三、ftrace 的开关四、查看 trace五、trace-cmd 的使用六、trace-cmd 的常用选项6.1、查看可以跟踪的事件6.2、跟踪特定进程的函数调用6.3、函数过滤6.4、限制跟踪深度6.5、追踪特定事件沉淀、分享、…

数字化采购管理革新:全过程数字化采购管理平台的架构与实施

摘要&#xff1a;在数字化转型的浪潮中&#xff0c;采购管理正逐步迈向全流程的数字化。本文将详细解析全过程数字化采购管理平台的技术架构和实施策略&#xff0c;探讨如何通过Spring Cloud、Spring Boot2、Mybatis等先进技术和服务框架&#xff0c;实现从供应商管理到采购招投…

关于linux的图形界面

关于linux的图形界面 1. 概述1.1 X1.2 DM&#xff08;显示管理器/登录管理器&#xff09;1.3 WM&#xff08;窗口管理器&#xff09;1.4 GUI Toolkits1.5 Desktop Environment1.6 基本架构 2. 安装桌面2.1 Centos安装桌面2.2 Ubuntu安装桌面&#xff08;未实践&#xff09; 3. …

OpenGL-ES 学习(6)---- 立方体绘制

目录 立方体绘制基本原理立方体的顶点坐标和绘制顺序立方体颜色和着色器实现效果和参考代码 立方体绘制基本原理 一个立方体是由8个顶点组成&#xff0c;共6个面&#xff0c;所以绘制立方体本质上就是绘制这6个面共12个三角形 顶点的坐标体系如下图所示&#xff0c;三维坐标…

调试代码Pair-wise-Similarity-module-master

第一步&#xff1a;运行.py文件生成json文件 问题一&#xff1a;json.decoder.JSONDecodeError: Invalid \escape: line 1 column 31616 (char 31615) 解决&#xff1a; for dataset in dataset_list:with open(datasetmap[dataset] ".csv", "r") as li…

ETO外汇:日元技术分析,美元/日元、欧元/日元、英镑/日元未来走势如何?

摘要&#xff1a; 根据近期的市场分析&#xff0c;美元/日元、欧元/日元和英镑/日元这三组货币对在未来的走势将受到多方面因素的影响。本文将从技术角度对每一组货币对进行详细分析&#xff0c;帮助投资者了解可能的支撑和阻力位&#xff0c;以及未来的走势预期。通过对关键技…

基于Transformer的自监督学习在NLP中的前沿应用

1. 引言 自然语言处理&#xff08;NLP&#xff09;领域正经历一场由自监督学习&#xff08;Self-Supervised Learning, SSL&#xff09;和Transformer架构共同驱动的革命。自监督学习通过巧妙地利用未标注数据&#xff0c;大大减少了对人工标注的依赖&#xff0c;而Transforme…

第二节课 6月13日 ssh密钥登陆方式

centos和ubuntu openssh服务的初始安装 一、实验&#xff1a;ubuntu系统激活root用户 ubuntu系统如何激活root用户&#xff0c;允许root用户ssh登陆&#xff1f; 1、ubuntu默认root用户未设置密码&#xff0c;未激活 激活root用户&#xff0c;设置root密码 sudo passwd roo…

无线幅频仪制作(WiFi通信)-含STM32源程序,JAVA上位机与设计报告

资料下载地址&#xff1a;无线幅频仪制作(WiFi通信)-含STM32源程序,JAVA上位机与设计报告 目录 项目功能 1、 系统方案1.1 比较与选择 1.1.1 控制器的论证与选择 1.1.2 信号源的论证与选择 1.1.3 放大器模块的论证与选择 1.1.4 键盘与显示模块的论证与选择 1.1.5 网络通…