Я пытаюсь понять, как текущий макрос извлекает структуру struct task_struct процесса.
Я пытаюсь понять архитектуру x86 и, изучив исходный код ядра, обнаружил следующий код:
#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 */
- Где переменные, объявленные в DECLARE_PER_CPU, хранятся в памяти.
- Они находятся в фиксированном расположении или в регистрах ЦП.
- Я все еще не могу понять, как это даст указатель task_struct
Может кто-нибудь объяснить это.Спасибо за ваше время и терпение