What is the need of the struct thread_info in locating struct task_struct?

5,985

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.

Share:
5,985

Related videos on Youtube

Navaneeth Sen
Author by

Navaneeth Sen

Updated on September 18, 2022

Comments

  • Navaneeth Sen
    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
      Houcheng almost 9 years
      the thread_info's size is smaller, such that can reserve more space for stack.
  • user2136106
    user2136106 almost 12 years
    In linux kernel, taks_struct and thread_info is 1-1 mapping.
  • firo
    firo almost 5 years
    This answer is incorrect. According to the kernel implementation, LWP also has a task_struct.