premiere - ¿Cuál es la "corriente" en la fuente del kernel de Linux?
instalar suite adobe en linux (2)
Es un indicador del proceso actual (es decir, el proceso que emitió la llamada al sistema).
En x86, se define en arch/x86/include/current.h
(archivos similares para otros 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 */
Más información en el capítulo 2 de los controladores de dispositivos de Linux :
El puntero actual se refiere al proceso del usuario actualmente en ejecución. Durante la ejecución de una llamada del sistema, como abrir o leer, el proceso actual es el que invocó la llamada. El código del kernel puede usar información específica del proceso usando la versión actual, si es necesario. [...]
Estoy estudiando sobre Linux Kernel y tengo un problema.
Veo que muchos archivos de origen del kernel de Linux tienen archivos actuales->. Entonces, ¿qué es la "corriente"?
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;
}
Current
es una variable global de tipo struct task_struct
. Puedes encontrar su definición en [1].
Files
es una struct files_struct
y contiene información de los archivos utilizados por el proceso actual.
[1] http://students.mimuw.edu.pl/SO/LabLinux/PROCESY/ZRODLA/sched.h.html