Por que existe uma pilha de kernel para cada processo no Linux?

Por que existe uma pilha de kernel para cada processo no Linux?

Recentemente comecei a aprender sobre Linux e há uma série de perguntas que vou fazer.

  1. 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?

  2. 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.

informação relacionada