Hippogriff's Blog
首页
C++
  • 算法
  • 数据结构
  • Leetcode
  • 操作系统
  • 计算机网络
  • MySQL
  • 深度学习
  • 网络
收藏
  • 醍醐灌顶
  • 句读
个人书单 (opens new window)
GitHub (opens new window)

Absm

什么也不会
首页
C++
  • 算法
  • 数据结构
  • Leetcode
  • 操作系统
  • 计算机网络
  • MySQL
  • 深度学习
  • 网络
收藏
  • 醍醐灌顶
  • 句读
个人书单 (opens new window)
GitHub (opens new window)
  • 操作系统

    • 操作系统 - 进程与线程、调度、进程间通信
    • 进程间通信、同步原语
    • 文件系统
      • 1 关于inode
        • 1.1 文件名与目录
        • 1.2 硬链接与符号链接
        • 1.3 存储布局
      • 2. 虚拟文件系统
        • 2.1 面向文件系统的接口
        • 2.2 面向操作系统的接口
      • 3. 其他文件系统
        • 3.1 FAT文件系统
        • 3.2 NTFS文件系统
    • 《Linux高性能服务器编程》读书笔记
  • MySQL

  • 基础
  • 操作系统
Absm
2021-03-21
目录

文件系统

# 文件系统(9章)

本文为《现代操作系统:原理与实现》(陈海波著)的阅读笔记。

块设备:操作系统将存储设备抽象为”块设备“。

块与块号:块设备上的存储单元被划分为”块“,一个”块“通常为512字节或者4KB。而且每个块都拥有自己的地址,称为”块号“。

虚拟文件系统:负责管理具体的文件系统,并提供一系列服务,如页缓存,inode缓存,目录项缓存等。

本章主要涉及的重点:

  • 基于inode的文件系统
  • 文件系统中的重要概念
  • Linux的虚拟文件系统
  • FAT与NTFS文件系统

# 1 关于inode

inode的作用:由于一个”块“很小,因此需要很多块才能组成一个我们通常意义上的文件。那就需要一个东西去记录都用到了哪些块,这就是inode的作用。inode = index node,即”索引节点“,记录了一个文件所对应的所有存储块号。

inode采用分级的方法来组织存储块号,这也影响着一个文件系统所能支持的最大文件大小。

inode除了上述记录”块号“以外,还记录着该文件相关的其他”元数据“,包括文件模式,文件链接数,文件拥有着,用户组,文件大小等。

一个文件系统会支持多种文件,linux系统所支持文件类型,除了“常规文件”以外,还包括目录文件,符号链接文件,FIFO文件,套接字文件,字符设备文件,块设备文件。其中比较重要的事“常规文件”,“目录文件”,“符号链接文件”。

# 1.1 文件名与目录

文件名是便于用户使用的形式,文件系统中也加入了这一表示方式。文件名可以直接映射到inode号,进而映射到块号。

文件名的存储位置:文件名并不存储于inode元数据中,而是存放在“目录”中。

具体的目录结构如书上的图9-3。每个目录项有四个结构:

  • inode号:用于找到文件名对应的inode结构
  • 目录项长度:记录整个目录项的长度
  • 文件名长度:记录后面保存的文件名的有效长度
  • 文件名:即一个连续的字符序列

# 1.2 硬链接与符号链接

文件名并不是文件的元数据,因此多个文件名可以对应同一个文件。

硬链接就是创建一个新的名字link,链接到已有的文件。这个过程只是增加了目录项中的记录,并不改变文件的块数据。

硬链接创建的文件和原文件一致,地位也没有任何区别。只有所有的硬链接全部删除时,这个文件的块数据才会被删除。

在文件inode元数据中,存储着一项nlink,即一个计数器,记录着当前硬链接的数量。

符号链接又称为软链接。其符号链接文件中保存着的是一个字符串,表示一个文件路径。

硬链接与符号链接的比较:

相同之处:都允许应用程序使用一个新的路径访问一个已有的文件。

区别:

  • 应用访问符号链接时,会根据其保存的路径进行解析,进而最终找到目标文件。应用访问硬链接时,会直接读取其自己的inode结构,找到对应的块。
  • 符号链接可以链接到不存在的目录,只有在访问时才会报错。硬链接则在链接时就会报错,因为其创建之初就会查找目标文件的inode文件。
  • 符号链接可以跨文件系统操作,而硬链接只能与目标文件应用于同一文件系统中。

# 1.3 存储布局

文件系统会将存储空间划分成不同的区域:

  • 超级块
  • 块分配信息
  • inode分配信息
  • inode表
  • 文件数据块

主要是以上五部分。

超级块记录了整个文件系统的全局元数据。保存着魔法数字(影响操作系统判断文件系统的类型和存储布局),文件系统的版本,所管理的空间大小,最后挂载时间和其他统计信息。

块分配信息和inode分配信息:使用位图标记每个数据块的使用情况。’

inode表即以数组的形式保存了整个文件系统中所有的inode结构。通常使用inode的索引对不同的inode进行区分。

剩余的文件数据块是真正保存数据的位置。

# 2. 虚拟文件系统

虚拟文件系统(Virtual File System,VFS)的目的:对多种文件系统进行管理和协调,允许它们在同一操作系统上共同工作。虚拟操作系统可以为底层不同文件系统提供不同的方法,在将这些方法转换为VFS的数据,最终抽象出统一的文件系统服务。

可以说,虚拟文件系统存在于操作系统与底层的文件系统之间,关系是:

文件系统(如FAT,NTFS,AFS) --- 虚拟文件系统 --- 操作系统

# 2.1 面向文件系统的接口

# 2.2 面向操作系统的接口

# 3. 其他文件系统

# 3.1 FAT文件系统

# 3.2 NTFS文件系统

编辑 (opens new window)
上次更新: 2021/06/03, 14:04:20
进程间通信、同步原语
《Linux高性能服务器编程》读书笔记

← 进程间通信、同步原语 《Linux高性能服务器编程》读书笔记→

最近更新
01
少年游·长安古道马迟迟
11-30
02
CMake基础命令
11-08
03
由浅入深剖析OAuth2.0的授权码模式
07-07
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Murray Li | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×