zoukankan      html  css  js  c++  java
  • 读书笔记深入linux内核架构Chapter8part2

    文件系统的操作

    l  注册文件系统

    ²  文件系统信息用struct file_system_type来描述。

    ²  fs/super.cregister_filesystem注册文件系统。

     l  装载和卸载文件系统

    ²  文件系统的装载由mount系统调用发出。

    ²  UNIX使用单一的文件系统层次描述,新的文件系统集成到其中(mount到这个文件系统中)。

    ²  装载点:原来的文件系统的一个目录,用来挂载新的文件系统。挂载后,该目录的内容变成新文件系统的根目录的内容,原有内容消失直到被挂载的文件系统卸载。装载可以嵌套。

    ²  每个装载的文件系统都对应一个struct vfsmount结构体。该结构体描述了父文件系统,挂载点的dentry,指向超级块的指针

    ²  装在操作开始于读取超级块。超级块用struct super_block来描述。其中记录了块大小、文件系统一般类型信息、指向全局根目录的dentry、记录脏inode的链表表头、记录打开的文件的链表、以及struct super_operation(其中包含了丰富的函数:对inode的操作函数---标记为脏、读取、删除;对超级块的操作;对文件系统的操作)。

     l  mount  unmount系统调用,自动过期(定时自动卸载),伪文件系统(ramfs  tmpfs  procfs  sysfs

     

    文件的操作

    l  查找inode

    ²  一个常见的文件操作是根据文件名查找inode(文件名àinode)。

    struct nameidata结构体用来记录查找结果。

    struct nameidata {

    struct dentry *dentry;      //找到的结果dentry

    struct vfsmount *mnt;       //找到的结果vfsmount

    struct qstr last;        //要查找的文件名

    unsigned int flags;        

    ...

    }

    ²  内核使用path_lookup查找路径或文件名。

    int fastcall path_lookup(  const char *name, unsigned int flags,

    struct nameidata *nd)

      l  打开文件

    ²  得到一个未被使用的fd

    ²  do_filp_namei:调用path_lookup查找文件名对应的inodenameidata_to_flip初始化预读结构。

    ²  fd填入task_structfd[]数组。

      

    l  读取和写入(读写类似)

    ²  函数fget_light根据fd找到struct file

    ²  函数file_pos_read返回f_pos

    ²  vfs读取:f_op->read或者do_sync_read(缺省标准例程)

    ²  更新f_pos

     读写操作的难点在于Linux系统中精细复杂的缓冲区和缓存系统。

      

  • 相关阅读:
    220. 存在重复元素 III
    785. 判断二分图
    欢天喜地七仙女——Beta冲刺汇总
    欢天喜地七仙女——Alpha冲刺汇总
    欢天喜地七仙女——测试随笔
    欢天喜地七仙女——beta总结
    欢天喜地七仙女——Beta冲刺十
    欢天喜地七仙女——用户调查报告
    欢天喜地七仙女——Beta冲刺九
    欢天喜地七仙女——Beta冲刺八
  • 原文地址:https://www.cnblogs.com/apprentice89/p/2868749.html
Copyright © 2011-2022 走看看