Skip to content

Files

Latest commit

1153698 · Aug 15, 2022

History

History
139 lines (80 loc) · 5.43 KB

65.md

File metadata and controls

139 lines (80 loc) · 5.43 KB

文件系统,第 1 部分:简介

原文:https://github.com/angrave/SystemProgramming/wiki/File-System%2C-Part-1%3A-Introduction

导航/术语

设计一个文件系统!你的设计目标是什么?

文件系统的设计是一个难题,因为我们希望满足许多高级设计目标。一份不完整的理想目标清单包括:

  • 可靠且强大(要考虑硬件故障或由于意外断电造成的写入不完整)
  • 访问(安全)控制
  • 账号和权限分配
  • 索引和搜索
  • 版本控制和备份功能
  • 加密
  • 自动压缩
  • 高性能(例如内存缓存)
  • 有效使用存储空间,数据去重

并非所有文件系统本身都支持所有这些目标。例如,许多文件系统不会自动压缩使用频率很低的文件

什么是......

在标准的 unix 文件系统中:

  • .代表当前目录

  • ..代表父目录

  • ...不是任何目录的有效表示(这不是祖父目录)。但是可以把它当成磁盘上的一个文件名字。

什么是绝对和相对路径?

绝对路径是从目录树的“根节点”开始的路径。相对路径是从目录树中当前位置开始的路径。

有什么相对和绝对路径的例子?

如果从主目录开始(简称“〜”),那么Desktop/cs241将是一个相对路径。它的绝对路径对应可能类似于/Users/[yourname]/Desktop/cs241

如何简化a/b/../c/./这个路径?

请记住,..表示“父文件夹”,.表示“当前文件夹”。

示例:a/b/../c/./

  • 第 1 步:cd a(在 a 中)
  • 第 2 步:cd b(在 a / b 中)
  • 第 3 步:cd ..(在 a 中,因为..表示'父文件夹')
  • 第 4 步:cd c(在 a / c 中)
  • 第 5 步:cd .(在/ c 中,因为。表示'当前文件夹')

因此,该路径可以简化为a/c

什么是文件系统?

文件系统是扮演这在磁盘上组织信息的角色。每当您想要访问文件时,文件系统都会指示如何读取文件。这是文件系统的示例图像。

让我们细看一下上面那个图

  • super block:此块包含有关文件系统,大小,上次修改时间,日志,inode 数量和第一个 inode 启动,数据块数量和第一个数据块启动的元数据。
  • Inode:这是关键的抽象。 inode 是一个文件。
  • 磁盘块:这些是存储数据的位置。文件的实际内容。

inode 如何存储文件内容?

来自维基百科

在 Unix 风格的文件系统中,索引节点(非官方地称为inode)是用于表示文件系统对象的数据结构,该文件系统对象可以是各种事物之一,包括文件或目录。每个 inode 都存储文件系统对象数据的属性和磁盘块位置。文件系统对象属性可以包括操纵元数据(例如,改变,访问,修改时间),以及所有者和授权数据(例如,组ID,用户ID,授权)。

要读取文件的前几个字节,请按照第一个间接块指针指向第一个间接块并读取前几个字节,写入是相同的过程。如果你想读取整个文件,继续读取direct block,直到你用完为止(我们将讨论一些间接块)

“计算机科学中的所有问题都可以通过另一层次的间接解决。” - 大卫惠勒

为什么要使磁盘块与内存页面大小相同?

为了支持虚拟内存,我们可以在内存中填充内容。

我们想为每个文件存储哪些信息?

  • 文件名
  • 文件大小
  • 创建时间,上次修改,上次访问
  • 权限
  • 文件路径
  • 校验
  • 文件数据(inode)

传统权限是什么:当前用户-当前组-其他 文件权限?

一些常见的文件权限包括:

  • 755:rwx r-x r-x

当前用户:rwx,当前组:r-x,其他:r-x

当前用户可以读,写和执行。组和其他人只能阅读和执行。

  • 644:rw- r-- r--

当前用户:rw-,当前组:r--,其他:r--

当前用户可以读写。当前组和其他人只能阅读。

每个角色的常规文件的3个权限位是什么?

  • 读(最重要的位)

  • 写(第2位)

  • 执行(最低有效位)

“644”“755”是什么意思?

这些是八进制格式的权限示例(基数 8)。每个八进制数字对应不同的角色(用户,组,世界)。

我们可以按如下方式读取八进制格式的权限:

  • 644 - R / W 用户权限,R 组权限,R 世界权限

  • 755 - R / W / X 用户权限,R / X 组权限,R / X 世界权限

你可以在每个间接表中存储多少个指针?

作为一个有效的例子,假设我们将磁盘划分为 4KB 块,并且我们想要寻址最多 2 ^ 32 个块。

最大磁盘大小为 4KB * 2 ^ 32 = 16TB(记住 2 ^ 10 = 1024)

磁盘块可以存储 4KB / 4B(每个指针需要 32 位)= 1024 个指针。每个指针指的是一个 4KB 磁盘块 - 因此您可以参考最多 1024 * 4KB = 4MB 的数据

对于相同的磁盘配置,双间接块存储 1024 个指向 1024 个间接表的指针。因此,双间接块可以指代最多 1024 * 4MB = 4GB 的数据。

类似地,三重间接块可以指代最多 4TB 的数据。

转到文件系统:第 2 部分