What is the need of the struct thread_info in locating struct task_struct?
The reason why we need the thread_info is due to the fact that we are allocating the memory for task_struct using the Slab Allocator. Now you may ask what is the relation between these?
To understand that you need to understand how Slab Allocator works.
Without the Slab Allocator , the kernel developers could allocate memory for task_struct in the kernel stack for the particular process so that it can be accessed easily. Now with the advent of Slab Allocator , the memory is allocated to the task_struct as determined by the Slab Allocator. So with the Slab Allocator you have task_struct stored somewhere else and not in the kernel stack of the particular process. Now the Kernel developers introduced thread_info and placed a pointer in it to the place where the task_struct resides. And that is why we have to live with thread_info.
You can read about Slab Allocator in Robert Love's book Linux Kernel Development.
Related videos on Youtube
Navaneeth Sen
Updated on September 18, 2022Comments
-
Navaneeth Sen over 1 year
While reading through the Linux Device Drivers, I could understand that the Process Descriptor (of type
struct task_struct
) has all the info regarding a particular task. The process descriptors are allocated dynamically by the slab allocator.What I would like to know is about the need to introduce a new structure called
thread_info
which is stored at the bottom of the stack (assuming x86). Why was this done?Why was it not possible to place the address of the current executing task address (
struct task_struct
) to the kernel stack?-
Houcheng almost 9 yearsthe thread_info's size is smaller, such that can reserve more space for stack.
-
-
user2136106 almost 12 yearsIn linux kernel,
taks_struct
andthread_info
is 1-1 mapping. -
firo almost 5 yearsThis answer is incorrect. According to the kernel implementation, LWP also has a task_struct.