пользовательские потоки и стек:
Каждый поток имеет свой собственный стек, так что он может использовать свои собственные локальные переменные, глобальные переменные общего ресурса потока, которые являются частью разделов .data или .bssисполняемого файла Linux.Поскольку потоки совместно используют глобальные переменные, т.е. мы используем механизмы синхронизации, такие как мьютекс, когда мы хотим получить доступ / изменить глобальные переменные в многопоточном приложении.Локальные переменные являются частью отдельного стека потоков, поэтому никакой синхронизации не требуется.
Потоки ядра Потоки ядра возникли из-за необходимости запуска кода ядра в контексте процесса.Потоки ядра являются основой механизма очереди работ.По сути, ядро потока - это поток, который работает только в режиме ядра и не имеет адресного пространства пользователя или других пользовательских атрибутов.
Чтобы создать ядро потока, используйте kthread_create ():
#include <linux/kthread.h>
structure task_struct *kthread_create(int (*threadfn)(void *data),
void *data, const char namefmt[], ...);
Потоки ядра и стек: Потоки ядра используются для выполнения задач постобработки для ядра, таких как потоки сброса pdf, потоки workq и т. Д. Потоки ядра - это принципиально новый процесс только без адресного пространства (может быть создан с помощью clone ()вызов с необходимыми флагами) означает, что они не могут переключиться в пользовательское пространство.Потоки ядра планируются и могут быть вытеснены как обычные процессы.
потоки ядра имеют свои собственные стеки, которые они используют для управления локальной информацией.
Подробнее о стеках ядра: - https://www.kernel.org/doc/Documentation/x86/kernel-stacks