Entendendo a obtenção do ponteiro task_struct da pilha do kernel do processo

Agora eu estou lendo o livro "Linux Kernel Development 3D Edition", de Robert Love. Lá ele escreve sobre a estrutura thread_info que contém o ponteiro para struct task_struct e, como eu entendi, localizado na parte inferior ou no topo da pilha de processo do kernel (depende da arquitetura). Eu não estava familiarizado com a API do kernel do Linux até recentemente e não era conhecido da existência do método current (). Há um trecho do livro relacionado a como o método current () realmente funciona:

No x86, a corrente é calculada mascarando os 13 bits menos significativos do ponteiro da pilha para obter a estrutura thread_info. Isso é feito pela função current_thread_info (). O assembly é mostrado aqui: movl $ -8192,% eax andl% esp,% eax Isso pressupõe que o tamanho da pilha é de 8 KB. Quando pilhas de 4KB estão habilitadas, 4096 é usado no lugar de 8192.

Minhas perguntas são:

Tanto quanto eu sei se temos um valor decimal representado como um conjunto de bits, então há apenas um bit menos significativo no conjunto, não é?Qual é o número mágico 13?

Para o milhar que lerá este tópico, as perguntas que expressei podem levar à conclusão de que o autor não compreende adequadamente o processo de alocação e administração de memória. Ok, isso pode estar certo devido ao fato de que na minha mente eu posso representar a memória alocada para a pilha como a fita cheia de bits (ou bytes). Todos esses bytes acessíveis por um endereço de memória específico representado como algum valor decimal. A origem da pilha é o endereço de memória mais baixo e a aleta da pilha é o valor mais alto do endereço de memória. Mas como, como podemos obter o ponteiro para o thread_info struct localizado no, digamos, fim da pilha apenas por mascarando 13 bits menos significativos do ponteiro de pilha localizado ARBITRARY (Se eu entendi corretamente, estamos mascarando bits do ponteiro de pilha ADDRESS representado como valor decimal).

questionAnswers(4)

yourAnswerToTheQuestion