Причина, по которой нам нужен thread_info , заключается в том, что мы выделяем память для task_struct с помощью Slab Allocator . Теперь вы можете спросить, как они связаны между собой?
Чтобы понять, что вам нужно понять, как работает Slab Allocator.
Без Slab Allocator разработчики ядра могли бы выделить память для task_struct в стеке ядра для конкретного процесса, чтобы к нему можно было легко получить доступ. Теперь, с появлением Slab Allocator, память выделяется для task_struct, как это определено Slab Allocator. Таким образом, с помощью Slab Allocator у вас есть task_struct, хранящийся где-то еще, а не в стеке ядра конкретного процесса. Теперь разработчики ядра представили thread_info и поместили в него указатель на место, где находится task_struct. И именно поэтому мы должны жить с thread_info.
Вы можете прочитать о Slab Allocator в книге Роберта Лава «Разработка ядра Linux».