【操作系统】4.文件系统和IO子系统

1. 文件系统

1.1 文件系统和文件

文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能,可以提供组织、检索、读写访问数据功能。在没有文件系统时,我们在计算机上操作的数据无法有效保存,在计算机关机再重启时数据就丢失了。大多数计算机系统都有文件系统,我们常用的谷歌也是一个文件系统,支持分布式应用的数据管理,可以支持系统监控、故障检测、故障容忍和自动恢复,提供很高的可靠性。

文件是具有符号名,由字节序列构成的数据项集合。

  • 文件是文件系统的基本数据单位
  • 文件名是文件的标识符号

文件系统的功能

  • 分配文件磁盘空间
  • 管理文件集合
  • 保证数据可靠和安全。

文件属性包括名称、类型、位置、大小、保护、创建者、创建时间、最近修改时间等。

文件头是文件系统元数据中的文件信息,里面包含文件属性和文件存储位置和顺序。

文件描述符

进程访问文件数据前必须先打开文件,内核会跟踪进程打开的所有文件,操作系统为每个进程维护一个打开文件表,文件标识符是打开文件的标识。

文件指针
最近一次读写位置,每个进程分别维护自己的打开文件指针。

文件打开计数
当前打开文件的次数,最后一个进程关闭文件时,将其从打开文件表中移除。

文件的用户视图和系统视图

用户来看,文件是持久的数据结构。

操作系统看来,文件是数据块的集合。

数据块是逻辑存储单元,而扇区是物理存储单元。

用户视图到系统视图的转换
文件系统中最小基本单位为数据块,磁盘最小访问单位为扇区。

进程读文件步骤

  • 获取字节所在的数据块(数据块是逻辑存储单位)
  • 返回数据块内对应部分

进程写文件步骤

  • 获取数据块
  • 修改数据块内容
  • 写回数据块

访问模式

访问模式就是进程如何访问文件。

  • 随机访问
    • 从中间读写
    • 不常用,但很重要
    • 虚拟内存中把内存页存储在文件
  • 索引访问
    • 依据数据特征索引
    • 通常操作系统不完整提供索引访问
    • 数据库是建立在索引内容的磁盘访问之上

访问权限:读、写、执行、删除、列表

1.2 目录、文件别名和文件系统种类

目录是一种特殊的文件,文件以目录的方式组织起来。

目录的内容是 文件索引表<文件名,指向文件的指针>

操作系统应该只允许内核修改目录,以确保映射的完整性。应用程序通过系统调用访问目录。

  • 硬链接:多个文件指向同一个文件
  • 软链接:以“快捷方式”指向其他文件

硬链接中文件的删除操作在删除最后一个文件项时才删除。

当前工作目录(PWD)

  • 每个进程都会指向一个文件目录用于解析文件名(可以提高效率)
  • 允许用户指定相对路径来代替绝对路径 如 PWD="/bin” 能够解析 “ls”

文件系统挂载
文件系统需要先挂载才能够被访问,未挂载的文件系统被挂载在挂载点上。

文件系统种类

  • 磁盘文件系统。文件存储在数据存储设备上 如磁盘
  • 数据库文件系统。文件特征是可被寻址辨识的
  • 日志文件系统。记录文件系统的修改/事件
  • 网络/分布式文件系统(通过网络访问),文件处于远程服务器
  • 特殊/虚拟文件系统 管道

网络/分布式文件系统

文件可以通过网络被共享

  • 文件处于远程服务器
  • 客户端远程挂载服务器文件系统
  • 标准系统文件访问被转换成远程访问
  • 标准文件共享协议

1.3 虚拟文件系统

虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时,它也提供了内核中的一个 抽象功能,允许不同的文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。

对所有不同文件系统的抽象,多种文件系统,对上提供一致的访问接口

具体功能:

  1. 提供相同的文件和文件系统接口
  2. 管理所有文件和文件系统关联的数据结构
  3. 高效查询例程,遍历文件系统
  4. 与特定文件系统模块的交互

1.4 文件缓存

文件缓存有数据块缓存和页缓存两种方式。

数据块缓存

  • 数据块按需进入内存
    • 提供read()操作
    • 预读 预先读取后面的数据块
  • 数据块使用后被缓存
    • 假设数据将会再次用到
    • 写操作可能被缓存和延迟写入

页缓存

  • 虚拟页式存储
    • 在虚拟地址空间中虚拟页面可映射到本地外存文件中
  • 文件数据块的页缓存
    • 在虚拟内存中文件数据块被映射成页
    • 文件的读/写操作被转换成对内存的访问
    • 可能导致缺页或被设置为脏页
    • 会带来问题:页面置换算法需要协调虚拟存储和页缓存间的页面数

文件系统中打开文件的数据结构

  • 文件描述符

    • 每个被打开的文件都有一个文件描述符
    • 文件状态信息: 目录项、当前文件指针、文件操作设置
  • 打开文件表

  • 每个进程都有一个打开文件表

  • 一个系统级的打开文件表

  • 有文件被打开, 文件卷就不能被卸载

i节点

在linux文件系统中,是以块为单位存储信息的,为了找到某一个文件在存储空间中存放的位置,用i节点对一个文件进行索引。i节点包含了描述一个文件所必须的全部信息。所以i节点是文件系统管理的一个数据结构。

i节点是一个64字节长的表,含有有关一个文件的信息,其中有文件大小、文件所有者、文件存取许可方式,以及文件为普通文件、目录文件还是特别文件等。在i节点中最重要的一项是磁盘地址表。

i节点描述:

(1)一个i节点可以有多个文件名来对应它

(2)i节点能描述文件占用的块数

(3) i节点描述了文件大小和指向数据块的指针

(4)通过i节点实现文件的逻辑结构和物理结构的转换

为了满足各种要求,计算机的输入/输出设备种类繁多,功能繁杂,速度不一。操作系统通过I/O子系统对I/O设备进行有效的管理。

操作系统通过I/O子系统来管理I/O设备。

5.1 常见设备I/O特征

常见的接口分为三类,字符设备、块设备和网络设备,访问特征均不一样。

设备接口类型 例子 访问特征 I/O命令
字符设备 键盘、鼠标、串口 以字节为单位顺序访问 文件访问接口
块设备 磁盘驱动器、磁带驱动器、光驱 均匀的数据块访问 文件系统接口、内存映射
网络设备 以太网、无线、蓝牙 格式化报文交换 网络报文、网络协议

5.2 进程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操作方式区别主要在于继承发出操作命令后,进程是否等待;操作结果反馈方式。

5.3 CPU和设备之间的I/O方式

连接方式

CPU与设备的通信方式:轮询设备、中断和DMA(DMA同时也为传输方式)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y01UsuIs-1593332739963)(https://i.loli.net/2019/07/29/5d3ed14deb10126612.png)]

传输方式

CPU与设备控制器之间的数据传输分为两种方式:
程序控制I/O(PIO,Programmed I/O)和直接内存访问。

5.4 磁盘

磁盘的工作机制和传输时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7P5Nc7Jb-1593332739965)(https://i.loli.net/2019/07/29/5d3ee60fa31ef69962.png)]

磁盘I/O传输一般分为以下5个步骤:

  1. 等待设备可用
  2. 等待通道(PIO或DMA通道)可用
  3. 寻道
  4. 旋转延迟
  5. 数据传输

后四个步骤称为设备忙状态,所占用的时间为传输时间。

在磁盘I/O传输时间中,着重优化寻道时间。

磁盘调度算法

目的:通过优化磁盘访问请求顺序来提高磁盘访问性能

进行磁盘调度的原因:

  • 寻道时间是磁盘访问最耗时的部分
  • 同时会有多个在同一磁盘上的I/O请求(所以可以调整顺序)
  • 随机处理磁盘访问请求的性能表现很差

磁盘缓存

缓存是数据传输双方访问速度差异较大时,引入的速度匹配中间层。

磁盘缓存是磁盘扇区在内存中的缓冲区。

  • 磁盘缓存的调度算法很类似虚拟存储调度算法
  • 磁盘的访问频率远远低于虚拟存储中的内存访问频率
  • 通常磁盘缓存调度算法会比虚拟存储复杂

单缓存与双缓存

单缓存(Single Buffer Cache):只有一个缓冲区,用户进程和I/O设备只能交替访问缓存区
双缓存(Double Buffer Cache):设置两个缓存区,任何时刻用户进程和I/O设备可同时访问不同的缓存区

其他

快速格式化

快速格式化:只是粗枝大叶的格式化 ,它仅仅是清掉FAT表(文件分配表),使系统认为盘上没有文件了,并不真正格式化全部硬盘,快速格式化后可以通过工具恢复硬盘数据,快速格式化的速度比格式化要快得多,就是这个原因。

格式化:对每一个扇区进行逐个格式化,如果发现坏扇区,就会做标记,windows将不再在往那里写入数据。

快速格式化和完全格式化有区别

1、快速格式化,删除目标盘上原有的文件分配表和根目录,不检测坏道,不备份数据,它提高了格式化的速度,但牺牲了可靠性。这是最常用的格式化方法,对有坏道的硬盘,格式化之后需另行检测。

2、完全格式化,清除目标盘上的所有的数据。重新生成引导信息,初始化文件分配表,标注逻辑坏道,但不备份数据。

快速格式化只能用于曾经格式化过的磁盘。

你可能感兴趣的:(操作系统)