标签:blog http io os ar 使用 for sp strong
一,task_struct和文件系统相关的一些信息
- <sched.h>
- struct task_struct {
- ...
-
- int link_count, total_link_count;
- ...
-
- struct fs_struct *fs;
-
- struct files_struct *files;
-
- struct nsproxy *nsproxy;
- ...
- }
进程的文件系统相关的数据保存在fs中,这些数据包含当前的工作目录
- fs_struct主要用于管理特定进程本身的一些信息,
- struct fs_struct {
- atomic_t count;
- int umask;
- struct dentry * root, * pwd, * altroot;
- struct vfsmount * rootmnt, * pwdmnt, * altrootmnt;
- };
- struct files_struct {
- atomic_t count;
- struct fdtable *fdt;
- struct fdtable fdtab;
- int next_fd;
- struct embedded_fd_set close_on_exec_init;
- struct embedded_fd_set open_fds_init;
- struct file * fd_array[NR_OPEN_DEFAULT]; 每个成员都是一个指针,指向每个打开文件struct file实例
- };
默认情况下内核运行每个进程打开NR_OPEN_DEFAULT个文件,默认值是BITS_PER_LONG,32位系统上该值为32
- struct fdtable {
- unsigned int max_fds;
- struct file ** fd;
- fd_set *close_on_exec;
- fd_set *open_fds;
- struct rcu_head rcu;
- struct files_struct *free_files;
- struct fdtable *next;
- };
struct file指向了真正文件的信息,
- struct file {
- struct list_head fu_list;
- struct path f_path;
- #define f_dentry f_path.dentry
- #define f_vfsmnt f_path.mnt
- const struct file_operations *f_op;
- atomic_t f_count;
- unsigned int f_flags;
- mode_t f_mode;
- loff_t f_pos;
- struct fown_struct f_owner;
- unsigned int f_uid, f_gid;
- struct file_ra_state f_ra;
- unsigned long f_version;
- ...
- struct address_space *f_mapping;
- ...
- };
-
-
- struct path {
- struct vfsmount *mnt;
- struct dentry *dentry;
- };
在硬盘上并不存在一个文件结构,进程打开一个文件,内核就动态创建一个文件对象,同一个文件在不同的进程中有不同的文件对象
附录:
进程打开一个文件的过程:
1,用户层的open()函数最终调用了内核里面的sys_open()函数(fs/open.c),sys_open()函数主要借助do_flip_open()函数来完成查找文件的inode,do_flip_open()函数首先调用open_namei()函数,open_namei()函数调用path_lookup()函数查找文件的inode并执行额外几个检查动作,如果是创建新的文件系统项,该函数还需要应用存储在进程umask(current->fs->umask)中的权限位的默认设置。do_flip_open()函数然后调用nameidata_to_flip()函数初始化预读结构,将新创建的file实例放置到超级快的s_files链上并调用底层文件系统的file_operations结构中的open()函数。
最终控制权转回用户进程,返回文件描述符之前,fd_install必须将file实例放置到进程task_struct的files->fd数组中
[文件系统]文件系统学习笔记(二)---task_struct
标签:blog http io os ar 使用 for sp strong
原文地址:http://www.cnblogs.com/zhiliao112/p/4067834.html