Вам нужна структура thread_info в ядре Linux 2.6? - PullRequest
7 голосов
/ 26 мая 2011

До ядра Linux 2.6 struct task_struct присутствовал в конце стека ядра каждого процесса.Не было thread_info struct концепции.Но в ядре Linux 2.6 вместо task_struct, помещаемого в конец стека ядра для процесса, thread_info struct помещается в конце.Эта структура thread_info содержит указатель на структуру task_struct.

Зачем была нужна структура thread_info?Мы могли бы получить доступ к структуре task_struct, используя stack pointer напрямую, если бы task_struct был помещен в конец стека ядра процесса.

В ядре 2.6 task_struct динамически выделяется с помощью slab_allocator.До версии 2.6 Ядро было статически выделено?

Ответы [ 3 ]

6 голосов
/ 28 мая 2011

Фрэнк, он ищет (из-за чистого интереса, как я, я подозреваю) причину этого изменения.Это то, что я нашел с моими навыками Google.Немного больше информации за ссылкой:

"task_struct огромно. На 32-битной машине оно составляет около 1,7 КБ. С другой стороны, вы можете легко увидеть, что thread_info намного тоньше.*

стек ядра равен 4 или 8 КБ, и в любом случае 1,7 КБ в значительной степени, так что хранение более тонкой структуры, которая указывает на task_struct, сразу экономит много места в стеке и является масштабируемым решением. "

(с) http://www.spinics.net/lists/newbies/msg22263.html

1 голос
/ 03 декабря 2013

Причина, по которой нам нужен 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».

0 голосов
/ 20 июля 2014

привет на странице 25 разработки ядра Linux. 3-е издание, следующее заявление написано, это может помочь вам понять

«Новая структура также позволяет довольно легко вычислять смещения ее значений для использования в коде сборки»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...