当前课程知识点:Linux 内核分析与应用 > 第8章 文件系统 > 8.1 虚拟文件系统的引入 > Video
大家好今天我们来开始讲第八章文件系统
首先我们讲一下虚拟文件系统的引入
首先我们说一下什么是文件系统
文件系统是操作系统用于明确存储设备
或分区上的文件的方法和数据结构
也就是说在
存储设备上组织文件的一种方法
操作系统中负责管理和存储文件信息的软件机构
称为文件管理系统简称文件系统
Linux常见的文件系统有ext2 ext3 ext4
NTFS JFS xfs等
那么什么是Linux的文件结构呢
文件结构是文件存储在
磁盘存储设备上的组织方式
主要体现在对文件和目录的组织上
Linux采用标准的目录结构也就是树形结构
无论操作系统管理几个磁盘分区
这样的目录数只有一个
这样的目录组织有助于对文件系统
或不同用户文件进行统一的管理如图所示
一切皆是文件这是Unix/Linux的基本设计哲学之一
普通的文件目录字符设备块设备
套接字等在Unix/Linux中
都是以文件被对待的
他们虽然类型不同但是对其提供的却是
同一套操作界面如图所示
Linux系统中呢
最主要的一个概念是索引节点
Linux文件系统使用索引节点来记录文件信息
系统给每个索引节点分配了一个号码
我们把它称为索引节点号
文件系统就是靠这个索引节点号来识别一个文件的
那么Linux系统中都有哪些文件系统类型
我们说Linux目前支持几十种文件系统类型
比如说ext2/ext3/ext4
xfs btrfs等等
我们可以通过man 5 fs
查看全部文件系统的介绍
不同文件系统采用不同的方法来管理磁盘空间
各有优劣文件系统是具体到分区的
所以格式化针对的是分区
分区格式化是指
采用指定的文件系统类型对分区空间进行登记
索引并建立相应的管理表格的一个过程
比如说ext2具有极快的速度或极小的cpu占用率
可用于硬盘和移动存储设备
ext3增加了日志功能可回溯追踪
ext4日志文件系统支持1EB
也就是1024×1024TB的大小
最大单文件达到16TB
支持连续写入可减少文件的碎片
xfs可以管理500T的硬盘
btrfs文件系统针对固态盘做优化等等
我们可以在proc目下查看发filesystems文件
看到你机子上已经安装了哪些文件系统
那么文件系统如何安装呢
将一个文件系统的顶层目录
挂到另一个文件系统的子目录上
使它们成为一个整体我们把它称为安装
把该子目录称为安装点
ext2/ext3/ext4是Linux的标准文件系统
系统把它的磁盘分区作为系统的根文件系统
ext2/ext3/ext4以外的文件系统呢
则安装在根目录系统下的某个目录中
称为系统树形结构中的一个分支
Linux支持多种文件系统
那么它的框架是如何的呢
它是如何进行统一高效的组织以及管理
我们先看一下Linux文件系统的统一框架VFS
也就是Vietual Filesystem Switch
那么这个S指的是开关的意思而不是系统的意思
虚拟文件系统所提供的抽象界面
主要由一组标准的抽象的操作构成
例如open read write等等
这些函数以系统调用的形式供用户程序调用
这样用户程序调用这些系统调用的时候呢
根本不需要关心所操作的文件
属于哪个文件系统
这个文件系统是怎样设计或实现的
那么内核是如何组织文件系统的呢
Linux内核采用VFS框架来组织文件系统
每个文件系统用一个超级块也就是super_block
数据结构来描述
一个文件系统如果想加入VFS的大家庭
就必须在VFS中进行注册
就像我们上学要注册一样那么如何进行注册
实际上就是填写一个数据结构叫file_system_type数据结构
此结构描述的是文件系统的名称
以及一个指向对应VFS超级块读取例程的地址
内核采用file_system_type类型的链表
织每个注册的文件系统
如图为文件系统类型的组织
每个注册的文件系统对应着相应的超级块
在内核中的数据结构就叫super_block
该对象用于存储特定文件系统的信息
那么超级块是如何和文件系统联系起来
所有的超级块又如何在内核中组织的呢
系统中所有的超级块由super_blocks链表组织如图所示
这是Linux中所有超级块的组织
最后我们给一个小结
我们从读文件的过程来理解VFS
当用户要查看home目录下的一个文件
或proc目录下的一个文件的时候呢
都会调用到VFS层的read()系统调用
但因为这两个文件所在的文件系统不同
前者是ext3文件系统存放在磁盘上
后者是proc文件系统存于内核内存中
因此到了VFS层
它们兵分两路调用各自文件系统的read函数
由此可以看出VFS相当于是一个总开关
各个文件系统相当于分支
进程通过VFS层的系统调用
到达各个分支对具体的文件系统进行操作
最后我们给出参考资料
依然是深入理解Linux内核这本书
第三版的第十二章深入Linux内核架构的第八章
最后大家带着疑问上路
虚拟文件系统VFS
与实际文件系统到底是什么样的关系
这一讲就讲到这里谢谢大家
-1.1 Linux操作系统概述
-1.2 Linux内核结构以及内核模块编程
--Video
-1.3 Linux内核源码中的双链表结构
--Video
-1.4 源码分析-内核中的哈希表
--Video
-1.5 动手实践-Linux内核模块的插入和删除
--Video
-第1章 概述--章节测验
-2.1 内存管理之内存寻址
--Video
-2.2 段机制
--Video
-2.3分页机制
--Video
-2.4 动手实践-把虚拟地址转换成物理地址
--Video
-第2章 内存寻址--章节测验
-3.1 进程概述
--Video
-3.2 Linux进程创建
--Video
-3.3 Linux进程调度
--Video
-3.4 动手实践-打印进程描述符task_struct中的字段
--Video
-3.5工程实践-基于内核模块的负载监控
--Video
-第3章 进程管理--章节测验
-4.1 Linux内存管理机制
--Video
-4.2 进程用户空间管理机制
--Video
-4.3 物理内存分配与回收机制(上)
--Video
-4.4 物理内存分配与回收机制(下)
--Video
-4.5 动手实践-Linux内存映射基础(上)
--Video
-4.6 动手实践-Linux内存映射实现(中)
--Video
-4.7 动手实践-Linux内存映射测试(下)
--Video
-4.8 初学者对内存管理的常见疑惑
-第4章 内存管理--章节测验
-5.1 中断机制概述
--Video
-5.2 中断处理机制
--Video
-5.3 中断下半部处理机制
--Video
-5.4 时钟中断机制
--Video
-5.5 动手实践-中断上半部的代码分析及应用
--Video
-5.6 动手实践-中断下半部的代码分析及应用
--Video
-第5章 中断--章节测验
-6.1 Linux中的各种API
--Video
-6.2 系统调用机制
--Video
-6.3 动手实践-添加系统调用(系统调用日志收集系统)
--Video
-第6章 系统调用--章节测验
-7.1 内核同步概述
--Video
-7.2 内核同步机制
--Video
-7.3 动手实践-内核多任务并发实例(上)
--Video
-7.4 动手实践-内核多任务并发实例(下)
--Video
-第7章 内核同步--章节测验
-8.1 虚拟文件系统的引入
--Video
-8.2 虚拟文件系统的主要数据结构
--Video
-8.3 文件系统中的各种缓存
--Video
-8.4 页高速缓存机制以及读写
--Video
-8.5 动手实践-编写一个文件系统(上)
--Video
-8.6 动手实践-编写一个文件系统(中)
--Video
-8.7 动手实践-编写一个文件系统(下)
--Video
-第8章 文件系统--章节测验
-9.1 设备驱动概述
--Video
-9.2 I/O空间管理
--Video
-9.3 设备驱动模型
--Video
-9.4 字符设备驱动程序简介
--Video
-9.5 块设备驱动程序简介
--Video
-9.6 动手实践-编写字符设备驱动程序
--Video
-9.7工程实践-编写块设备驱动的基础(上)
--Video
-9.8 工程实践-块设备驱动程序分析(中)
--Video
-9.9 工程实践-块设备驱动程序实现(下)
--Video
-第9章 设备驱动--章节测验
-致谢与说明
--Video