zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    How to alter department in PMS system
    Can't create new folder in windows7
    calculate fraction by oracle
    Long Wei information technology development Limited by Share Ltd interview summary.
    ORACLE BACKUP AND RECOVERY
    DESCRIBE:When you mouse click right-side is open an application and click left-side is attribution.
    ORACLE_TO_CHAR Function
    电脑BOIS设置
    JSP点击表头排序
    jsp+js实现可排序表格
  • 原文地址:https://www.cnblogs.com/-citywall123/p/13524552.html
Copyright © 2011-2022 走看看