
Recentemente comecei a aprender sobre Linux e há uma série de perguntas que vou fazer.
Durante a leitura, encontrei o termo 'pilha do kernel' e não consigo entender por que o kernel do Linux usa a pilha do kernel para cada processo?
quando um processo está em execução, por que acontece que o registro esp tem o endereço do topo da
pilha do kernel do processo e por que não o endereço do topo da pilha do modo de usuário do respectivo processo?
Responder1
Quando um processo entra no modo kernel como resultado de uma chamada do sistema, a pilha é alternada da pilha do modo de usuário para a pilha do kernel. Isso é feito para preservar a integridade do kernel, caso contrário o processo (outro thread, por exemplo) poderia fazer coisas desagradáveis à pilha.
Uma pilha de kernel separada é necessária para cada processo para salvar o estado do processo. O estado precisa ser salvo caso uma troca de tarefa seja realizada, ou seja, o processo atual seja colocado em suspensão e algum outro processo programado para execução. Quando isso acontece, os valores do registro (incluindo o registro do ponteiro da pilha) são restaurados para que o processo a ser executado possa continuar a partir do ponto exato em que estava quando foi suspenso.