zoukankan      html  css  js  c++  java
  • Linux2.6内核--VFS层中和进程相关的数据结构

          系统中的每一个进程都有自己的一组打开的文件,像根文件系统,当前工作目录,安装点等。有三个数据结构将 VFS 层和系统的进程紧密的联系在一起,它们分别是:

    file_struct,fs_struct 和 namespace 结构体。

     

          file_struct 结构体定义在文件 <linux/fdtable.h> 中。该结构体由进程描述符中的 files 目录项指向。所有的单个进程相关的信息(如打开的文件和文件描述符)都包含在其中,其结构和描述如下:

          struct files_struct {

              atomic_t count;   /*结构的使用计数*/
              struct fdtable *fdt;  /*指向其他 fd 表的指针*/
              struct fdtable fdtab;  /*基 fd 表*/
        
              spinlock_t file_lock;  /*单个文件的锁*/
              int next_fd;  /*缓存下一个可用的 fd */
              struct embedded_fd_set close_on_exec_init;  /*exec() 时关闭的文件描述符链表*/
              struct embedded_fd_set open_fds_init;  /*打开的文件描述符链表*/
              struct file * fd_array[NR_OPEN_DEFAULT];  /*缺省的文件对象数组*/
            };

     

          和进程相关的第二个结构体是 fs_struct 。该结构由进程描述符的 fs 域指向。它包含文件系统和进程的相关信息,定义在文件 <linux/fs_struct.h> 中,下面是它的具体结构体和各项描述:

            struct fs_struct {
                     int users;   /*用户数目*/
                     rwlock_t lock;  /*保护该结构体的锁*/
                     int umask;  /*掩码*/
                     int in_exec;  /*当前正在执行的文件*/
                     struct path root;  /*根目录路径*/
    struct path pwd;   /*当前工作目录的路径*/
             };

          该结构包含了当前进程的当前工作目录(pwd)和根目录。

     

          第三个也是最后一个相关的结构体是 namespace 结构体。它定义在文件 <linux/mnt_namespace.h> 中,由进程描述符中的 mnt_namespace 域指向。2.4版内核以后,单进程命名空间被加入到内核中,它使得每一个进程在系统中都看到唯一的安装文件系统,不仅是唯一的根目录,而且是唯一的文件系统层次结构。下面是其具体结构和描述:

        struct mnt_namespace {
              atomic_t                count;   /*结构的使用数目*/
              struct vfsmount *       root;    /*根目录的安装点对象*/
              struct list_head        list;    /*安装点链表*/
              wait_queue_head_t poll;          /*轮询的等待队列*/
              int event;                       /*事件计数*/ 
    };

          list域是连接已安装文件系统的双向链表,它包含的元素组成了全体命名空间。

  • 相关阅读:
    思维探索者:理解了才是真正的学习 理解会带来巨大的好处
    思维探索者:让记忆与学习更有效率 别在别人的思考中得意着
    思维探索者:从问题到答案的思维过程 像侦探一样思考
    android-HttpClient上传信息(包括图片)到服务端
    java web每天定时执行任务
    基础总结篇之一:Activity生命周期
    Spring面试题一
    J2EE用监听器实现同一用户只能有一个在线
    notepad++快捷键大全
    python for循环巧妙运用(迭代、列表生成式)
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3278133.html
Copyright © 2011-2022 走看看