zoukankan      html  css  js  c++  java
  • 虚拟文件系统

    磁盘文件系统(Linux使用的文件系统、UNIX家族文件系统、MS文件系统、CD-ROM等DVD文件系统、其他有专利权的文件系统等等。)

    网络文件系统(NFS、CIFS等等。)

    特殊文件系统

    3、通用文件模型 common file model

    !内核负责把一组合适的指针分配给与每个打开文件相关的file变量,然后负责调用针对每个具体文件系统的函数。

    超级块对象(superblock object):存放已安装文件系统的有关信息。对基于磁盘的文件系统,这类对象通常对应于存放在磁盘上的文件系统控制块(filesystem control block)。

    索引节点对象(inode object):存放关于具体文件的一般信息。对基于磁盘的文件系统,这类对象通常对应于存放在磁盘上的文件控制块(file control block)。每个索引节点对象都有一个索引节点号,这个节点号唯一的标识文件系统中的文件。

    文件对象(file object):存放打开文件与进程之间进行交互的有关信息。这类信息仅当进程访问文件期间存在于内核内存中。

    目录项对象(dentry object):存放目录项与对应文件进行链接的有关信息。每个磁盘文件系统都以自己特有的方式将这类信息存在磁盘中。

    4、VFS所处理的系统调用(三类)

    普通文件、目录文件、符号链接文件的系统调用

    设备文件、管道文件的系统调用

    套接字系统调用

    二、VFS的数据结构

    1、超级块对象、索引节点对象、文件对象、目录项对象

    2、目录项高速缓存

    a.一个处于正在使用、未使用或负状态的目录项对象的集合

    所有“未使用”目录项对象都存放在一个“最近最少使用LRU”双向链表中。

    b.一个散列表,从中能够快速获取与给定的文件名和目录名对应的目录项对象。同样,如果访问的对象不在目录项高速缓存中,则散列函数返回一个空值。

    三、文件系统类型

    四、文件系统处理

    1、system`s root filesystem: 由内核在引导阶段直接安装,并拥有系统初始化脚本以及最基本的系统程序。

    2、进程的根目录是与“/”路径相对应的目录。缺省情况下,进程的根目录与系统根文件系统的根目录一致(更准确的说,与进程的命名空间中的根文件系统的根目录一致)。

    a.进程的命名空间:每个进程可拥有自己的已安装文件系统树。

    b.文件系统安装(vfsmount数据结构)

    c.安装普通文件系统

    d.安装根文件系统

    安装根文件系统分为两个阶段:

    1、内核安装特殊rootfs文件系统,该文件系统仅提供一个作为初始安装点的空目录;

    2、内核在空目录上安装实际根文件系统。

    e.卸载文件系统(sys_umount())

    五、路径名查找

    path_lookup()->link_path_walk()

    特别注意的是,父路径名查找及符号链接查找。

    六、VFS系统调用的实现

    七、文件加锁

    劝告锁:只有在访问文件之前其他进程合作检查锁的存在时,锁才起作用。(POSIX标准规定的fcntl()系统调用)

    共享读锁与独占写锁。

    Linux文件加锁:劝告锁、强制锁、共享模式强制锁、租借锁;

    linux文件系统调用:fcntl()、flock()、lockf();

    Linux文件锁数据结构:file_lock

    FL_FLOCK锁:与一个文件对象相关联

    FL_POSIX锁:与一个进程和一个索引节点相关联

  • 相关阅读:
    校园商铺-8商品模块-12接触商品与某商品类别的关联的实现
    centos 7访问windows共享文件夹
    怎样在CentOS 7.0上安装和配置VNC服务器
    【总结】教你怎么将centos7打造成桌面系统
    Centos 7安装gvim
    CentOS 7 安装virtualBox
    Centos 7中 vim 中文乱码
    CentOS 7 gedit编辑器中文乱码解决方法
    centos7支持ntfs
    delta
  • 原文地址:https://www.cnblogs.com/snailrun/p/3250248.html
Copyright © 2011-2022 走看看