Qual é o relacionamento entre chamadas do sistema, passagem de mensagens e interrupções?

15

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:

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

    1. 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.
    2. Ocorre uma interrupção de hardware; por exemplo, uma tecla foi pressionada no teclado ou o tempo esgotou (usado na multitarefa preventiva).
  2. 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
    
  3. 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.

StackExchange for All
fonte
2
Muito boa pergunta!
Stéphane Gimenez

Respostas:

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

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

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

sakisk
fonte
1
Obrigado! (1) Em 1, você quer dizer que as duas maneiras de obter atenção das CPUs são interrupção de software (o programa com exemplo de chamada do sistema) e interrupção de hardware (exemplo de chave de redefinição)? (2) Em 2, você quer dizer que a chamada do sistema e a passagem de mensagens são duas formas de interrupção do software? (3) É correto que o objetivo da interrupção do software seja o processo para solicitar serviços e recursos do kernel, e o objetivo da interrupção do hardware não é ? Se sim, qual é o objetivo da interrupção do hardware?
StackExchange for All
1
(1) correto. (2) Bem, as chamadas do sistema e a passagem de mensagens são duas técnicas diferentes que podem ser usadas para alcançar a comunicação entre processos. Mas é verdade que ambos são baseados em software, assim, para obter atenção da CPU, você executa uma armadilha (interrupção do software). (3) De certa forma, sim. Um exemplo de solicitação de um serviço de kernel é a execução de um procedimento de biblioteca (que será traduzido em 1 ou mais chamadas do sistema), como creatna 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.
sakisk
1
Obrigado! Em relação a (3), você quer dizer em um sentido não? Quais são os objetivos gerais de interrupção de hardware e de software?
StackExchange for All
1
Uma redefinição do sistema não é uma interrupção; não salva o estado para retomar depois.
Psusi
1
@faif reset e NMI (Non Maskable Interrupt) são dois pinos diferentes na CPU. O último causa uma interrupção, significando salvar o estado e pular para o manipulador. O primeiro inicializa a CPU (descartando intencionalmente todos os estados), assim como na inicialização (a redefinição é automaticamente declarada na inicialização). Como parte da definição de interrupção é que ela salva o estado, a redefinição falha ao atender a essa definição.
Psusi
9

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.

LawrenceC
fonte
3
O modo kernel usa as mesmas tabelas de páginas e apresenta a mesma visualização de memória virtual que o modo usuário. A diferença é que ele tem acesso às páginas marcadas como restritas ao modo kernel.
Psusi
5

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.

psusi
fonte