What is the “current” in Linux kernel source?

后端 未结 2 545
误落风尘
误落风尘 2020-12-13 19:04

I\'m studying about Linux kernel and I have a problem.

I see many Linux kernel source files have current->files. So what is the current?

相关标签:
2条回答
  • 2020-12-13 19:47

    It's a pointer to the current process (i.e. the process that issued the system call).

    On x86, it's defined in arch/x86/include/current.h (similar files for other archs).

    #ifndef _ASM_X86_CURRENT_H
    #define _ASM_X86_CURRENT_H
    
    #include <linux/compiler.h>
    #include <asm/percpu.h>
    
    #ifndef __ASSEMBLY__
    struct task_struct;
    
    DECLARE_PER_CPU(struct task_struct *, current_task);
    
    static __always_inline struct task_struct *get_current(void)
    {
        return percpu_read_stable(current_task);
    }
    
    #define current get_current()
    
    #endif /* __ASSEMBLY__ */
    
    #endif /* _ASM_X86_CURRENT_H */
    

    More information in Linux Device Drivers chapter 2:

    The current pointer refers to the user process currently executing. During the execution of a system call, such as open or read, the current process is the one that invoked the call. Kernel code can use process-specific information by using current, if it needs to do so. [...]

    0 讨论(0)
  • 2020-12-13 19:53

    Current is a global variable of type struct task_struct. You can find it's definition at [1].

    Files is a struct files_struct and it contains information of the files used by the current process.

    [1] http://students.mimuw.edu.pl/SO/LabLinux/PROCESY/ZRODLA/sched.h.html

    0 讨论(0)
提交回复
热议问题