Где хранятся переменные DECLARE_PER_CPU в ядре - PullRequest
0 голосов
/ 29 декабря 2018

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

Может кто-нибудь объяснить это.Спасибо за ваше время и терпение

...