Linux文件系统(上)

Linux文件系统(下)https://www.cnblogs.com/-citywall123/p/12401347.html

 

一、一切皆是文件

在UNIX系统中有一个重要的概念:一切都是文件。也就是说,在UNIX系统中,把一切资源都看作是文件,包括硬件设备。UNIX系统把每个硬件都看成是一个文件,通常称为设备文件

这样用户就可以用读写文件的方式实现对硬件的访问。

这样带来优势也是显而易见的:
  UNIX 权限模型也是围绕文件的概念来建立的,所以对设备也就可以同样分权限等级处理了。

 

 

二、文件系统结构模型的细分

  

我们想象中的文件操作大概是:用户空间-->文件系统-->磁盘设备,但是在一个计算机中的磁盘设备和文件系统是不唯一的,不同硬盘和文件系统对应的IO接口和API是不一样的

(1). 不同的物理硬盘,需要不同的驱动支持,而不同的驱动,所提供的IO操作接口是不一样的,那么,有没有一个统一的IO操作接口呢?

(2). 不同的文件系统,如ext3, ext4, btrfs等所提供的API也是不一样的,那么,有没有一个统一的东西来对这些不同的文件系统进行一个抽象,以提供一个统一的API接口呢?
 
 
 
 

 

 

 

  一、硬盘驱动设备(Device Driver)

    我们对硬盘的读写都是通过硬盘驱动设备进行的,硬盘驱动设备可以将存储在磁盘上的信息读进内存中,又能将内存中的信息写到磁盘上,所以即是输入设备,也是输出设备

    不同硬盘的驱动模块不一样,一般保存在内核目录树drivers/ata中,而对于一般通用的硬盘驱动,也许会直接被编译到内核中,而不会以模块的方式出现

 

  二、通用块设备层(General Block Device Layer)

    这一层的作用,正是解答了上面提出的第一个问题,不同的硬盘驱动,会提供不同的IO接口,内核认为这种杂乱的接口,不利于管理,需要把这些接口抽象一下,形成一个统一的对外接口,

    这样,不管你是什么硬盘,什么驱动,对外而言,它们所提供的IO接口没什么区别,都一视同仁的被看作块设备来处理。

 

  三、文件系统(EXT3、EXT4、btrfs等)

    文件系统是操作系统在存储设备上组织文件的方法,在文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。

    具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

 

    目前大多Linux发行版本默认使用的文件系统一般是ext4,不管什么样的文件系统,都是由一系列的mkfs.xxx命令来创建,如:  

mkfs.ext4 /dev/sda

mkfs.btrfs /dev/sdb

    内核所支持的文件系统类型,可以通过内核目录树 fs 目录中的内容来查看。

 

  四、虚拟文件系统(Virtual File System,VFS)

    VFS这一层,正是用来解决上面提出的第二个问题,试想,当我们通过mkfs.xxx系列命令创建了很多不同的文件系统,但这些文件系统都有各自的API接口,而用户想要的是,不管你是什么API,

    他们只关心mount/umount(挂载分区/卸载分区命令),或open/close(文件读写命令)等操作。

    所以,VFS就把这些不同的文件系统做一个抽象,提供统一的API访问接口,这样,用户空间就不用关心不同文件系统中不一样的API了。VFS所提供的这些统一的API,再经过System Call包装一下,

    用户空间就可以经过SCI的系统调用来操作不同的文件系统。

 

    VFS是一个抽象层,其向上提供了统一的文件访问接口,而向下则兼容了各种不同的文件系统。

    另外,VFS实现了一部分公共的功能,例如页缓存和inode缓存等,从而避免多个文件系统重复实现的问题。

    参考 https://baijiahao.baidu.com/s?id=1621555464151870974&wfr=spider&for=pc

  

  五、系统调用和应用程序API接口(System Call Interface)

    系统调用是应用程序调用内核空间提供服务的一个接口,通常是通过中断来实现的,会有用户态到内核态的切换

    应用程序的API接口是通过函数定义实现的,没有用户态到内核态的切换

 

参考博客:http://blog.chinaunix.net/uid-26838492-id-3156661.html

posted @ 2020-08-18 17:35  知道了呀~  阅读(300)  评论(0编辑  收藏  举报