Qual é a necessidade da estrutura thread_info em localizar struct task_struct?

6
Ao ler os drivers de dispositivo do Linux, eu pude entender que o descritor de processo (do tipo struct task_struct ) tem todas as informações sobre uma tarefa específica. Os descritores de processo são alocados dinamicamente pelo alocador de placas.

O que eu gostaria de saber é sobre a necessidade de introduzir uma nova estrutura chamada thread_info , que é armazenada na parte inferior da pilha (assumindo x86). Por que isso foi feito?

Por que não foi possível colocar o endereço atual da tarefa em execução ( struct task_struct ) na pilha do kernel?

    
por Sen 10.10.2011 / 13:05

2 respostas

2

A razão pela qual precisamos do thread_info é devido ao fato de que estamos alocando a memória para task_struct usando o Slab Allocator. Agora você pode perguntar qual é a relação entre eles?

Para entender, você precisa entender como o Slab Allocator funciona.

Sem o Slab Allocator, os desenvolvedores do kernel poderiam alocar memória para task_struct na pilha do kernel para o processo em particular, para que ele possa ser acessado facilmente. Agora, com o advento do Slab Allocator, a memória é alocada para o task_struct conforme determinado pelo Slab Allocator. Assim, com o Slab Allocator você tem task_struct armazenado em algum outro lugar e não na pilha do kernel do processo em particular. Agora, os desenvolvedores do Kernel introduziram o thread_info e colocaram um ponteiro nele no local onde o task_struct reside. E é por isso que temos que conviver com thread_info .

Você pode ler sobre Slab Allocator no livro de Robert Love Linux Kernel Development.

    
por 30.11.2013 / 17:20
-2

Processos leves não têm task_struct ; uma pilha e uma pequena quantidade de informação seriam suficientes. Vários LWPs compartilham o mesmo task_struct , que contém todas as descrições de recursos.

    
por 14.10.2011 / 09:48