Como funcionam as chamadas do sistema?

Entendo que um usuário pode possuir um processo e cada processo possui um espaço de endereço (que contém locais de memória válidos, esse processo pode fazer referência). Eu sei que um processo pode chamar uma chamada do sistema e passar parâmetros para ela, assim como qualquer outra função da biblioteca. Isso parece sugerir que todas as chamadas do sistema estão em um espaço de endereçamento do processo, compartilhando memória etc. Mas talvez isso seja apenas uma ilusão criada pelo fato de que, na linguagem de programação de alto nível, as chamadas do sistema se parecem com qualquer outra função, quando um processo chama.

Mas, agora deixe-me dar um passo mais fundo e analisar mais de perto o que acontece sob o capô. Como o compilador compila uma chamada do sistema? Talvez empurre o nome da chamada do sistema e os parâmetros fornecidos pelo processo em uma pilha e, em seguida, coloque a instrução de montagem como "TRAP" ou algo assim - basicamente a instrução de montagem para chamar uma interrupção de softwar

Esta instrução de montagem do TRAP é executada pelo hardware, alternando primeiro o bit de modo do usuário para o kernel e depois configurando o ponteiro de código para dizer o início das rotinas de serviço de interrupção. Desse ponto em diante, o ISR executa no modo kernel, que seleciona os parâmetros da pilha (isso é possível, porque o kernel tem acesso a qualquer local de memória, mesmo os de propriedade dos processos do usuário) e executa a chamada do sistema e no final renuncia a CPU, que novamente alterna o bit de modo e o processo do usuário inicia de onde paro

Meu entendimento está correto?

Attached é um diagrama aproximado do meu entendimento:

questionAnswers(6)

yourAnswerToTheQuestion