Подтвердить что ты не робот

Что такое "текущий" источник ядра Linux?

Я изучаю Linux-ядро, и у меня проблема

Я вижу, что многие исходные файлы ядра Linux имеют файлы current- > . Итак, что такое "текущий"?

struct file *fget(unsigned int fd)
{
     struct file *file;
     struct files_struct *files = current->files;

     rcu_read_lock();
     file = fcheck_files(files, fd);
     if (file) {
             /* File object ref couldn't be taken */
             if (file->f_mode & FMODE_PATH ||
                 !atomic_long_inc_not_zero(&file->f_count))
                     file = NULL;
     }
     rcu_read_unlock();

     return file;
 }
4b9b3361

Ответ 1

Это указатель на текущий процесс (т.е. процесс, выдавший системный вызов).

В x86 он определен в arch/x86/include/current.h (похожие файлы для других арков).

#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 */

Дополнительная информация в Драйверы устройств Linux глава 2:

Текущий указатель относится к выполняемому в настоящее время пользовательскому процессу. Во время выполнения системного вызова, такого как открытие или чтение, текущим процессом является тот, который вызвал вызов. Код ядра может использовать информацию, относящуюся к конкретному процессу, используя текущий, если это необходимо. [...]

Ответ 2

Current - глобальная переменная типа struct task_struct. Это определение можно найти в [1].

Files является struct files_struct и содержит информацию о файлах, используемых текущим процессом.

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