12.1基本概念
不同的操作系统,有不同的文件系统,还可能有多个文件系统
一、文件系统与文件
文件系统:一种用于持久性存储的系统抽象
需要注意:
一首音乐和一张图片都是一个文件,都是以文件的形式存放在硬盘上的,但是和桌面级不一样,但是读写命名创建的形式都是一样的。
文件:文件系统中一个单元的相关数据在操作系统中的抽象
二、文件系统的功能
1、分配文件磁盘空间
1)管理文件夹(那一块属于哪一个文件)
2)管理空闲空间(哪一块是空闲的)
3)分配算法(策略)
2、管理文件集合
1)定位文件及其内容
用户如何去找到这个文件
2)命名:通过名字找到文件的接口
通过路劲的名字找到这个问价
3)最常见:分层文件系统
文件是否需要分层,一个目录
4)文件系统类型(组织文件的不同方式)
3、提供的遍历级特征
1)保护:分层来保护数据安全
2)可靠性/持久性:保持文件的持久即使发生奔溃,媒体错误,双击等
三、文件和块
文件的属性一般会包含在文件头或者是文件块上,用以保存基本的属性。
四、文件描述符
1、文件的使用模式:
打开这个文件之后,为了更容易的进行读写操作,会返回一个文件描述符。其代表了文件给应用程序做访问和控制。
文件描述符不仅仅是一个数据,操作系统对代开的文件会有一个表,称为打开文件表,而返回的文件描述符就是表的索引。文件描述符指出了这个表中的第几项代表了这个文件,里面有很多的文件信息。
2、元数据来管理打开文件:
1)文件指针:指向当前最近的一次读写的位置
2)文件打开次数:多少个进程打开了这个文件,也就是文件打开的次数,文件是共享资源,允许多个进程打开同一个文件。
3)文件磁盘位置:缓存数据访问信息
4)访问权限:每个程序的访问模式信息
五、目录
1、目录的介绍
通过分层的方式,进行存储,使层次更加的清晰简洁
2、目录的操作
3、如何存储目录的文件
(根据文件系统不同而有所差异)
4、路径的遍历
路径是有目录和最后的目的文件所构成,这个路径的遍历开销比较大。有缓存机制来加快这个效率。
5、文件系统的挂载
挂载文件系统的挂载点用户看到的是一个目录,但是是特殊的文件。mount是挂载的命令。unmount是卸载的命令。操作比较简单。
六、文件别名
也就是一个文件有多个名字
两种实现方法:硬链接和软链接
1)硬链接:多个文件项指向一个文件
2)软链接:这个文件的内容是另一个文件的路径
如果将有效的文件删掉了:
对于硬链接来说,只是引用技术减1,只有当引用技术变成了0,这个文件才彻底删除。
而对于软链接来说,这个别名将成为一个“悬空指针”。
七、文件系统的种类
下面对文件系统种类做简单介绍:
ext2/3/4是主要的文件系统,存储在磁盘或者是光盘上。
日志文件系统的读操作或者是写操作要不是完成,要么不被完成,在中间进行的基础中是不会被大段的。
网络文件系统只要在局域内,就可以很容易的访问另外一个机器上面的数据。
虚拟文件系统,linux下的proc可以看见中断的次数等等内核信息。
12.2虚拟文件系统
问题:为什么使用虚拟文件系统?
如果让应用程序针对不同的文件系统写出应用程序,就会很复杂。通过操作系统实现了,利用其提供的接口,通过一层虚拟文件系统层,屏蔽了底层具体文件系统的差异性,从而可以使得其可以访问不同的文件系统,适用面更好。
1、虚拟文件系统的目标
屏蔽具体文件系统的差异性,给上层提供统一的接口,可以完成基本的文件的操作读写打开关闭等等,也就是对所以不同文件系统的抽象。
2、虚拟文件系统的功能:
1)提供相同的文件和文件系统的接口
2)管理所有文件和文件系统关联的数据结构
3)高效查询例程,遍历文件系统
4)与特定文件系统模块的交互
需要注意:
虚拟文件系统不在具体的磁盘上,而是在内存中,由操作系统所创建。
3、几个控制块介绍
1)卷控制块:每个文件系统都有一个总控制块,卷控制块/超级块(Unix:superblock)
每个文件系统一个
文件系统详细信息
块/块大小、空余块、计数/指针等
2)文件控制块:每一个具体的文件其实也需要一定的元数据和特征,所以有一个文件控制块(Unix:vnode or inode)
每个文件一个
文件详细信息
许可,拥有者,大小,数据库位置等等
3)目录节点:目录里面的内容是里面的文件,文件的内容是内容,所以目录节点会有所不同,目录节点(linux:dentry)
每个目录一个(目录和文件)
将目录项数据结构及树型布局编码成树型数据结构
指向文件控制块,父节点,项目列表等
这些概念可以够成一个抽象的文件系统图。
首先有一个总控制节点,这之下管理一堆目录,目录可以管理子目录或文件,文件里面是具体的数据(数据块),这些数据都是放在磁盘里面的。
4、文件系统的数据结构
卷控制块(每个文件系统一个)
文件控制块(每个文件一个)
目录节点(每个目录项一个)
这些都会映射到磁盘里面的一个或多个扇区,文件里面的数据也会放在扇区里面。
5、问题:这些内容什么会后加载到内存?
卷控制块:当文件系统挂载时进入内存
文件控制块:当文件被访问时进入每次
目录节点:在遍历一个文件路劲时进入内存
通过vol总控制块可以找到目录,而通过目录可以找到子目录或者是文件,而通过文件控制块可以最终找到想要寻找的数据。
11.3数据缓存
由于访问磁盘速度比较慢,所在内存中会存在一块缓存。
1、数据缓存需要考虑的内容
希望基于分页的一个缓存机制,使得数据更好给上层程序更好的访问。
总的来说
缓存是为了进程执行更加的高效,为了减少硬盘的访问次数,减少运算时间。
12.4打开文件的数据结构
讲得太水,没什么好写的,感觉可以跳过
12.5文件分配
12.6空闲空间分配
还有位图,扫描实现。
12.7多磁盘管理-RAID
作用:提高磁盘访问的效率
RAID0
数据并访问,提高吞吐率
RAID1
向两个硬盘写入同样的数据,镜像数据提高可靠性
RADI3
奇偶校验以bit来作奇偶校验,其他045都是以块来作并行校验
RADI4
4个盘分区并行访问,1个盘来进行奇偶校验从而恢复达到容错
RADI5
校验是均匀的,访问是并行的,但是只能纠错一个
12.8磁盘调度
(这里是最简单的情况)
磁盘的结构:
io请求调度算法:
1、请求先来先执行
2、寻道移动最少
3、Scan扫描方法
先上到头,然后再下来,双方向。
4、单向扫描
只在一个方向上扫描,然后瞬间跳会最高点
5、C-SCAN
到请求的最后一点就返回