Estou lendo o artigo da Wikipedia para gerenciamento de processos . Meu foco está no Linux. Não consigo descobrir a relação e as diferenças entre chamada do sistema, passagem e interrupção de mensagens em seus conceitos e propósitos. Eles são todos para processos para fazer solicitações ao kernel de recursos e serviços?
Algumas citações do artigo e outras:
Há duas maneiras possíveis de um sistema operacional recuperar o controle do processador durante a execução de um programa para que ele execute a desalocação ou alocação:
- O processo emite uma chamada do sistema (às vezes chamada de interrupção do software); por exemplo, ocorre uma solicitação de E / S solicitando acesso a um arquivo no disco rígido.
- Ocorre uma interrupção de hardware; por exemplo, uma tecla foi pressionada no teclado ou o tempo esgotou (usado na multitarefa preventiva).
Existem duas técnicas pelas quais um programa em execução no modo de usuário pode solicitar os serviços do kernel:
* System call * Message passing
uma interrupção é um sinal assíncrono indicando a necessidade de atenção ou um evento síncrono no software indicando a necessidade de uma alteração na execução.
Uma interrupção de hardware faz com que o processador salve seu estado de execução e inicie a execução de um manipulador de interrupções. As interrupções de software geralmente são implementadas como instruções no conjunto de instruções, o que causa uma troca de contexto para um manipulador de interrupções semelhante a uma interrupção de hardware.
fonte
Respostas:
Todos os sistemas operacionais modernos suportam multitarefa. Isso significa que o sistema é capaz de executar vários processos ao mesmo tempo; em pseudo-paralelo (quando apenas uma CPU está disponível) ou hoje em dia com CPUs com vários núcleos sendo comuns em paralelo (uma tarefa / núcleo).
Vamos considerar o caso mais simples de apenas uma CPU disponível. Isso significa que se você executar ao mesmo tempo dois processos diferentes (digamos, um navegador da web e um music player), o sistema não poderá executá-los ao mesmo tempo. O que acontece é que a CPU está alternando de um processo para outro o tempo todo; mas isso está acontecendo extremamente rápido, portanto você nunca percebe.
Agora, vamos supor que enquanto esses dois processos estão em execução, você pressiona o botão de reset (bad boy). A CPU interrompe imediatamente o que está fazendo e reinicia o sistema. Parabéns: você gerou uma interrupção.
O caso é semelhante quando você está programando e deseja solicitar um serviço da CPU. A diferença é que, nesse caso, você executa código de software - geralmente procedimentos de biblioteca que estão executando chamadas do sistema (por exemplo,
fopen
para abrir um arquivo).Assim, 1 descreve duas maneiras diferentes de obter atenção da CPU.
A maioria dos sistemas operacionais modernos oferece suporte a dois modos de execução: modo de usuário e modo de kernel. Por padrão, um sistema operacional é executado no modo de usuário. O modo de usuário é muito limitado. Por exemplo, todas as E / S são proibidas; portanto, você não tem permissão para abrir um arquivo do seu disco rígido. É claro que isso nunca acontece de verdade, porque quando você abre um arquivo, o sistema operacional muda do modo de usuário para o modo de kernel de forma transparente. No modo kernel, você tem controle total do hardware.
Se você está se perguntando por que esses dois modos existem, a resposta mais simples é a proteção. Os sistemas operacionais baseados em microkernel (por exemplo, MINIX 3) têm a maioria de seus serviços em execução no modo de usuário, o que os torna menos prejudiciais. Kernels monolíticos (como Linux) têm quase todos os seus serviços em execução no modo kernel. Portanto, é improvável que um driver que trava no MINIX 3 derrube todo o sistema, embora isso não seja incomum no Linux.
As chamadas do sistema são as primitivas usadas nos kernels monolíticos (modelo de dados compartilhados) para alternar do modo de usuário para o kernel. A passagem de mensagens é a primitiva usada nos microkernels (modelo cliente / servidor). Para ser mais preciso, em uma mensagem que passa, os programadores do sistema também usam chamadas do sistema para obter atenção da CPU. A passagem de mensagens é visível apenas para os desenvolvedores do sistema operacional. Os kernels monolíticos que usam chamadas do sistema são mais rápidos, mas menos confiáveis, enquanto os microkernels que usam a passagem de mensagens são mais lentos, mas têm melhor isolamento de falhas.
Assim, 2 menciona duas maneiras diferentes de mudar do usuário para o modo kernel.
Para revisar, a maneira mais comum de criar uma interrupção de software, também conhecida como trap, é executando uma chamada de sistema. As interrupções, por outro lado, são geradas exclusivamente por hardware.
Quando interrompemos a CPU (por software ou por hardware), ela precisa salvar em algum lugar seu estado atual - o processo que executa e em que ponto parou - caso contrário, não poderá retomar o processo ao voltar . Isso é chamado de alternância de contexto e faz sentido: antes de desligar o computador para fazer outra coisa, você deve primeiro salvar todos os seus programas / documentos, etc., para poder continuar a partir do ponto em que parou o da próxima vez que você ligá-lo :)
Assim, 3 explica o que precisa ser feito após a execução de uma armadilha ou interrupção e quão semelhantes são os dois casos.
fonte
creat
na criação de um novo arquivo. Um exemplo de interrupção é a impressora enviando um sinal para a CPU para informar que a impressão está concluída.Chamadas do sistema, passagem de mensagens (conforme descrito no artigo da Wikipedia) e interrupções são coisas que causam uma mudança de contexto ou uma mudança do usuário para o modo kernel. Como você provavelmente sabe:
modo kernel: os programas têm uma visão plana ou real da memória e os programas podem ler / gravar livremente em toda a memória e em todos os dispositivos de hardware diretamente, sem restrições.
modo de usuário: os programas têm uma visão virtualizada da memória, os programas não podem ler / gravar livremente em toda a memória e não podem ler / gravar dispositivos de hardware diretamente. Para obter mais memória ou acessar dispositivos de hardware, o programa em modo usuário deve chamar o kernel. Chamadas do sistema e passagem de mensagens são dois métodos para fazer isso.
As chamadas do sistema envolvem a execução de uma instrução específica da CPU ou conjunto de instruções, que fazem a CPU saltar (primeiro salvando o endereço de retorno na pilha) para um endereço predefinido (não gravável no modo de usuário) e mover a CPU do modo de usuário para o modo de kernel (toque 3 para tocar 0 na arquitetura Intel).
As interrupções de hardware fazem a mesma coisa, fazem a CPU saltar (primeiro salvando o endereço de retorno na pilha) para um endereço predefinido e movem a CPU do modo de usuário para o modo de kernel. Portanto, em muitas CPUs, o mesmo mecanismo pode ser chamado pelo software (chamado de "interrupção do software") e pode ser usado para chamadas da CPU.
A passagem de mensagens implica (pelo menos para mim) que o kernel é um "processo em execução" que receberá um fluxo de mensagens e que existe uma função acessível no modo de usuário que enviará essas mensagens. Ou pode ser que a função "send" apenas empurre valores em uma pilha e na próxima vez que o kernel tiver controle (se um processo bloquear ou ocorrer uma interrupção), ele enviará mensagens da pilha e as enviará para as rotinas internas de acordo.
Em uma arquitetura de microkernel em que o "kernel" real é muito mínimo e a maioria das funções que um kernel fornece é movida para processos de "servidor", todos os quais podem estar em execução simultaneamente em um sistema com várias CPUs, algo como isso pode ser mais útil do que a abordagem simples de chamada de sistema antiga. Interpretar e rotear "mensagens" para o "servidor" apropriado do kernel seria um dos poucos trabalhos do microkernel.
fonte
A passagem de mensagens é um conceito de nível superior de um processo enviando uma mensagem para outro. É implementado por uma chamada de sistema (kernel), solicitando ao kernel que passe a mensagem para o outro processo. As chamadas do sistema solicitam ao kernel que execute vários serviços para o processo. Eles são implementados por uma interrupção de software / interceptação do sistema, que faz com que a CPU salve algum estado na pilha para que possa retornar mais tarde, depois alterne para o modo do kernel e vá para o manipulador do kernel.
As interrupções de hardware e software fazem com que a CPU salve o estado, alterne para o modo kernel e salte para um manipulador definido para essa interrupção. A diferença é que as interrupções de hardware são geradas por hardware externo quando precisam de alguma atenção, como um teclado indicando que uma tecla foi pressionada. O manipulador de teclado pode ler a porta de E / S do teclado para ver qual tecla foi pressionada, executar as ações apropriadas e retornar ao programa que foi interrompido.
fonte