美文网首页
文件系统答疑

文件系统答疑

作者: 小pb | 来源:发表于2019-11-20 12:37 被阅读0次

1.文件系统怎样映射
文件系统由多个模块组成,每一层都是对下一层设备的概念的屏蔽


文件系统结构.png

I/O控制层:是为了屏蔽各个厂商的设备差异,所以包含了设备驱动程序和一些终端处理程序,它们之间在使用的时候是通过I/O总线来进行操作的。
基本文件系统层: 主要是内核系统使用,它需要维护内核缓冲区,目录和数据块加载到内存后的数据结构。 以及发送命令给I/O 控制层。
文件组织模块:对于一个存储在设备上的文件,文件组织模块直到他们物理块是如何实现的,比如是链表还是索引,然后根据分配和存储规则对文件进行 逻辑块到物理块的映射。
逻辑文件系统: 维护文件控制块,包括文件属性和权限信息,和目录结构。
这些层共同组成文件系统。

  1. 文件I/O 有哪些,文件的的I/O的具体过程。
    一般的文件有 open, read , write 和seek 操作。
    open 打开文件时,文件系统首先搜索目录结构,找到对应的文件,然后把文件目录加载到内存, 然后会在内核文件表 加一个条目,表示打开了这个文件,并且进程的地址空间中的打开文件表中也加上一个条目,表示进程打开了这个文件。当文件被多个进程打开时,在进程的地址空间中加上一个打开的文件描述符,而内核的打开进程表中,只需要进行引用计数即可。
    read 读取文件数据,操作系统内核进行对I/O控制器执行read 命令请求。 控制器通过I/O端口的四个寄存器来实现读写。 控制器检查 状态寄存器的位,如果忙,就进行等待,如果不忙,就把状态寄存器置为忙,并把需要读取的数据读到数据输出寄存器上,然后一个字或者一个字节的读到内存中。后来有了DMA,就可以等待都写入到缓冲区,等待数据准备好了,就把DMA的数据 一块发给内存。
    write 和read 的操作类型。只不过相反。
    seek 表示移动当前位置,这个需要看文件的组织结构是什么样的,一般以扇区(一般为512字节)或者块进行分配,它会有链式结构和索引结构的分配方式,所以进行索引的时候,需要根据分配的方法进行索引。
  1. RAID 矩阵是怎么回事?
    RAID 矩阵指的是 将将多个磁盘进行合并,从而组成可以提高更好的性能,冗余的数据存储。
    一般分为不同的级别。
    RAID0 :需要两块盘,数据分布在不同的盘上,从而可以在读取或者写入的时候,并行进行,从而得到更好的性能。但是他不安全。一个磁盘损坏,导致这个文件都坏了
    RAID1:需要两块盘, 数据分布在两个盘上,两个进行互备。从而保证数据的安全。
    RAID5:RAID 5至少需要三个硬盘,RAID5 不是对存储的数据备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5 的各个磁盘上,并且就检验码信息和相对应的数据分别存储在不同的磁盘上。当RAID5 的任何一个磁盘数据反生损坏,可以利用剩下的数据和相应的奇偶校验码信息去恢复被损坏的数据。
    RAID6 至少需要4个硬盘,与RAID5 相似,RAID6也是不对 存储数据进行备份,而是把数据和相对应的奇偶校验信息存储在RAID6的各个磁盘, 与RAID5不同的是,RAID6有两个校验盘,即使同时又两块硬盘出问题,它也可以利用剩下的数据和相应的奇偶信息恢复损坏的磁盘。
    RAID-1+0 :
    RAID 10 仅用于硬盘的情况下,把4个硬盘分为两组,每组的两个互为RAID1。然后 在做RAID1。
    RAID-0+1 :多块硬盘先实现RAID0,然后再组成RAID1,相比RAID10,表面看没什么区别,但风险更大,使用一般不采用。

具体参照《操作系统概念精要》之磁盘篇(二)-RAID结构

  1. unix 的文件系统是怎么构成的?

了解文件系统构成之前,先了解下Unix 下的三个概念。
superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
block:实际记录文件的内容,若文件太大时,会占用多个 block 。
每个 inode 与 block 都有编号,而每个文件都会占用一个 inode ,inode 内则有文件数据放置的 block 号码。 因此,我们可以知道的是,如果能够找到文件的 inode 的话,那么自然就会知道这个文件所放置数据的 block 号码, 当然也就能够读出该文件的实际数据了。
这样一来我们的磁盘就能够在短时间内读取出全部的数据, 读写的效能比较好啦。
我们将 inode 与 block 区块用图解来说明一下,如下图所示,文件系统先格式化出 inode 与 block 的区块,假设某一个文件的属性与权限数据是放置到 inode 4 号(下图较小方格内),而这个 inode 记录了文件数据的实际放置点为 2, 7, 13, 15 这四个 block 号码,此时我们的操作系统就能够据此来排列磁盘的阅读顺序,可以一口气将四个 block 内容读出来! 那么数据的读取就如同下图中的箭头所指定的模样了。

inode-block结构.png
  1. 如何理解I/O模式和I/O复用
    在 Linux 的缓存 I/O 机制中,操作系统会将 I/O 的数据缓存在文件系统的页缓存( page cache )中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。
    所以说,当一个read操作发生时,它会经历两个阶段:
  2. 等待数据准备 (Waiting for the data to be ready)
  3. 将数据从内核拷贝到进程中 (Copying the data from the kernel to the process)

正式因为这两个阶段,linux系统产生了下面五种网络模式的方案。

  • 阻塞 I/O(blocking IO)
  • 非阻塞 I/O(nonblocking IO)
  • I/O 多路复用( IO multiplexing)
  • 信号驱动 I/O( signal driven IO)
  • 异步 I/O(asynchronous IO)

阻塞I/O
在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样:

阻塞I:O.png

当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据(对于网络IO来说,很多时候数据在一开始还没有到达。比如,还没有收到一个完整的UDP包。这个时候kernel就要等待足够的数据到来)。这个过程需要等待,也就是说数据被拷贝到操作系统内核的缓冲区中是需要一个过程的。而在用户进程这边,整个进程会被阻塞(当然,是进程自己选择的阻塞)。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除block的状态,重新运行起来。

所以,blocking IO的特点就是在IO执行的两个阶段都被block了。

** 非阻塞 I/O(nonblocking IO)**

linux下,可以通过设置socket使其变为non-blocking。当对一个non-blocking socket执行读操作时,流程是这个样子:

非阻塞I:O模式.png

当用户进程发出read操作时,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error。从用户进程角度讲 ,它发起一个read操作后,并不需要等待,而是马上就得到了一个结果。用户进程判断结果是一个error时,它就知道数据还没有准备好,于是它可以再次发送read操作。一旦kernel中的数据准备好了,并且又再次收到了用户进程的system call,那么它马上就将数据拷贝到了用户内存,然后返回。

所以,nonblocking IO的特点是用户进程需要不断的主动询问kernel数据好了没有。

I/O 复用
IO multiplexing就是我们说的select,poll,epoll,有些地方也称这种IO方式为event driven IO。select/epoll的好处就在于单个process就可以同时处理多个网络连接的IO。它的基本原理就是select,poll,epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程。

I:O 复用.png

当用户进程调用了select,那么整个进程会被block,而同时,kernel会“监视”所有select负责的socket,当任何一个socket中的数据准备好了,select就会返回。这个时候用户进程再调用read操作,将数据从kernel拷贝到用户进程。

这个图和blocking IO的图其实并没有太大的不同,事实上,还更差一些。因为这里需要使用两个system call (select 和 recvfrom),而blocking IO只调用了一个system call (recvfrom)。但是,用select的优势在于它可以同时处理多个connection。

相关文章

  • 文件系统答疑

    1.文件系统怎样映射文件系统由多个模块组成,每一层都是对下一层设备的概念的屏蔽 I/O控制层:是为了屏蔽各个厂商的...

  • 第8章 管理文件系统(不是很懂的一章)

    8.1 探索Linux文件系统 8.1.1 基本的Linux文件系统 ext文件系统扩展文件系统(extended...

  • 文件系统

    第12章:文件系统 文件系统概念文件系统和文件文件描述符目录文件别名文件系统种类 虚拟文件系统 文件缓存和打开文件...

  • 文件系统管理

    目录: 文件系统 创建文件系统 mkfs mke2fs 修改ext格式的参数 查看文件系统信息 修复文件系统 1、...

  • Linux运维之道(14)——Linux文件系统管理

    @(Linux)[文件系统管理] 1. 文件系统 1.1 各个操作系统上的文件系统 Linux文件系统 ext2 ...

  • Linux命令学习手册-fsck

    fsck [-aANPrRsTV][-t <文件系统类型>][文件系统...] 功能 检查文件系统并尝试修复错误。...

  • Docker镜像加载原理

    1.1 UnionFS(联合文件系统)UnionFS(联合文件系统): Union文件系统(UnionFS)是一种...

  • Android - 文件系统与Android11 分区存储

    *认识Android文件系统 *了解分区存储 *分区存储的适配 一、Android文件系统 Android文件系统...

  • Overlay文件系统

    Overlay文件系统 一个Overlay文件系统包含两个文件: 一个upper文件系统 一个lower文件系统l...

  • 6_Node 文件系统

    [toc] NodeJS 文件系统[fs 模块] 1.NodeJS 文件系统 NodeJS 文件系统被封装在fs模...

网友评论

      本文标题:文件系统答疑

      本文链接:https://www.haomeiwen.com/subject/dawnictx.html