文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能,可以提供组织、检索、读写访问数据功能。在没有文件系统时,我们在计算机上操作的数据无法有效保存,在计算机关机再重启时数据就丢失了。大多数计算机系统都有文件系统,我们常用的谷歌也是一个文件系统,支持分布式应用的数据管理,可以支持系统监控、故障检测、故障容忍和自动恢复,提供很高的可靠性。
文件是具有符号名,由字节序列构成的数据项集合。
文件系统的功能
文件属性包括名称、类型、位置、大小、保护、创建者、创建时间、最近修改时间等。
文件头是文件系统元数据中的文件信息,里面包含文件属性和文件存储位置和顺序。
进程访问文件数据前必须先打开文件,内核会跟踪进程打开的所有文件,操作系统为每个进程维护一个打开文件表,文件标识符是打开文件的标识。
文件指针
最近一次读写位置,每个进程分别维护自己的打开文件指针。
文件打开计数
当前打开文件的次数,最后一个进程关闭文件时,将其从打开文件表中移除。
用户来看,文件是持久的数据结构。
操作系统看来,文件是数据块的集合。
数据块是逻辑存储单元,而扇区是物理存储单元。
用户视图到系统视图的转换
文件系统中最小基本单位为数据块,磁盘最小访问单位为扇区。
进程读文件步骤
进程写文件步骤
访问模式就是进程如何访问文件。
访问权限:读、写、执行、删除、列表
目录是一种特殊的文件,文件以目录的方式组织起来。
目录的内容是 文件索引表<文件名,指向文件的指针>
操作系统应该只允许内核修改目录,以确保映射的完整性。应用程序通过系统调用访问目录。
硬链接中文件的删除操作在删除最后一个文件项时才删除。
当前工作目录(PWD)
文件系统挂载
文件系统需要先挂载才能够被访问,未挂载的文件系统被挂载在挂载点上。
文件系统种类
网络/分布式文件系统
文件可以通过网络被共享
虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时,它也提供了内核中的一个 抽象功能,允许不同的文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。
对所有不同文件系统的抽象,多种文件系统,对上提供一致的访问接口
具体功能:
文件缓存有数据块缓存和页缓存两种方式。
数据块缓存
页缓存
文件系统中打开文件的数据结构
文件描述符
打开文件表
每个进程都有一个打开文件表
一个系统级的打开文件表
有文件被打开, 文件卷就不能被卸载
在linux文件系统中,是以块为单位存储信息的,为了找到某一个文件在存储空间中存放的位置,用i节点对一个文件进行索引。i节点包含了描述一个文件所必须的全部信息。所以i节点是文件系统管理的一个数据结构。
i节点是一个64字节长的表,含有有关一个文件的信息,其中有文件大小、文件所有者、文件存取许可方式,以及文件为普通文件、目录文件还是特别文件等。在i节点中最重要的一项是磁盘地址表。
i节点描述:
(1)一个i节点可以有多个文件名来对应它
(2)i节点能描述文件占用的块数
(3) i节点描述了文件大小和指向数据块的指针
(4)通过i节点实现文件的逻辑结构和物理结构的转换
为了满足各种要求,计算机的输入/输出设备种类繁多,功能繁杂,速度不一。操作系统通过I/O子系统对I/O设备进行有效的管理。
操作系统通过I/O子系统来管理I/O设备。
常见的接口分为三类,字符设备、块设备和网络设备,访问特征均不一样。
设备接口类型 | 例子 | 访问特征 | I/O命令 |
---|---|---|---|
字符设备 | 键盘、鼠标、串口 | 以字节为单位顺序访问 | 文件访问接口 |
块设备 | 磁盘驱动器、磁带驱动器、光驱 | 均匀的数据块访问 | 文件系统接口、内存映射 |
网络设备 | 以太网、无线、蓝牙 | 格式化报文交换 | 网络报文、网络协议 |
从进程的角度来看,I/O方式分为三种
I/O类型 | 特点 | 读写方法 |
---|---|---|
阻塞I/O | Wait | 读写时,进程将进入等待状态,直到设备完成数据处理 |
非阻塞I/O | Don’t Wait | 读写时立即从read或write系统调用返回,返回值为成功传输字节数;可能不成功 |
异步I/O | Tell Me Later | 读写数据时,使用指针标记好用户缓冲区,立即返回;稍后内核将填充缓冲区/处理数据并通知用户 |
其中阻塞I/O和非阻塞I/O均为同步I/O,这三种I/O操作方式区别主要在于继承发出操作命令后,进程是否等待;操作结果反馈方式。
CPU与设备的通信方式:轮询设备、中断和DMA(DMA同时也为传输方式)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y01UsuIs-1593332739963)(https://i.loli.net/2019/07/29/5d3ed14deb10126612.png)]
CPU与设备控制器之间的数据传输分为两种方式:
程序控制I/O(PIO,Programmed I/O)和直接内存访问。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7P5Nc7Jb-1593332739965)(https://i.loli.net/2019/07/29/5d3ee60fa31ef69962.png)]
磁盘I/O传输一般分为以下5个步骤:
后四个步骤称为设备忙状态,所占用的时间为传输时间。
在磁盘I/O传输时间中,着重优化寻道时间。
目的:通过优化磁盘访问请求顺序来提高磁盘访问性能
进行磁盘调度的原因:
缓存是数据传输双方访问速度差异较大时,引入的速度匹配中间层。
磁盘缓存是磁盘扇区在内存中的缓冲区。
单缓存与双缓存
单缓存(Single Buffer Cache):只有一个缓冲区,用户进程和I/O设备只能交替访问缓存区
双缓存(Double Buffer Cache):设置两个缓存区,任何时刻用户进程和I/O设备可同时访问不同的缓存区
快速格式化:只是粗枝大叶的格式化 ,它仅仅是清掉FAT表(文件分配表),使系统认为盘上没有文件了,并不真正格式化全部硬盘,快速格式化后可以通过工具恢复硬盘数据,快速格式化的速度比格式化要快得多,就是这个原因。
格式化:对每一个扇区进行逐个格式化,如果发现坏扇区,就会做标记,windows将不再在往那里写入数据。
快速格式化和完全格式化有区别
1、快速格式化,删除目标盘上原有的文件分配表和根目录,不检测坏道,不备份数据,它提高了格式化的速度,但牺牲了可靠性。这是最常用的格式化方法,对有坏道的硬盘,格式化之后需另行检测。
2、完全格式化,清除目标盘上的所有的数据。重新生成引导信息,初始化文件分配表,标注逻辑坏道,但不备份数据。
快速格式化只能用于曾经格式化过的磁盘。