Qual é a relação entre as chamadas do sistema, a transmissão de mensagens e as interrupções?

14

Estou lendo o artigo da Wikipédia para o gerenciamento de processos . Meu foco é no Linux. Não consigo descobrir a relação e as diferenças entre a chamada do sistema, a passagem e a interrupção da mensagem, em seus conceitos e propósitos. Eles são todos para processos para fazer solicitações ao kernel para recursos e serviços?

Algumas citações do artigo e outras:

  1. There are two possible ways for an OS to regain control of the processor during a program’s execution in order for the OS to perform de-allocation or allocation:

    1. The process issues a system call (sometimes called a software interrupt); for example, an I/O request occurs requesting to access a file on hard disk.
    2. A hardware interrupt occurs; for example, a key was pressed on the keyboard, or a timer runs out (used in pre-emptive multitasking).
  2. There are two techniques by which a program executing in user mode can request the kernel's services:

    * System call
    * Message passing
    
  3. an interrupt is an asynchronous signal indicating the need for attention or a synchronous event in software indicating the need for a change in execution.

    A hardware interrupt causes the processor to save its state of execution and begin execution of an interrupt handler. Software interrupts are usually implemented as instructions in the instruction set, which cause a context switch to an interrupt handler similar to a hardware interrupt.

por Tim 02.08.2011 / 20:07

3 respostas

11
  1. Todos os sistemas operacionais modernos suportam multitarefa. Isso significa que o sistema é capaz de executar vários processos ao mesmo tempo; ou em pseudo-paralelo (quando apenas uma CPU está disponível) ou hoje em dia com CPUs multi-core sendo comuns em paralelo (uma tarefa / core).

    Vamos considerar o caso mais simples de apenas uma CPU estar 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 será capaz de executá-los ao mesmo tempo. O que acontece é que a CPU está mudando de um processo para o outro o tempo todo; mas isso está acontecendo extremamente rápido, assim você nunca percebe isso.

    Agora vamos supor que, enquanto esses dois processos estão sendo executados, você aperta o botão reset (bad boy). A CPU parará imediatamente o que estiver fazendo e reinicializará 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 o código do software - geralmente, os procedimentos da biblioteca que estão executando chamadas do sistema (por exemplo, fopen para abrir um arquivo).

    Assim, 1 descreve duas formas diferentes de obter atenção da CPU.

  2. A maioria dos sistemas operacionais modernos suporta dois modos de execução: modo de usuário e modo kernel. Por padrão, um sistema operacional é executado no modo de usuário. O modo de usuário é muito limitado. Por exemplo, todo o I / O é proibido; Assim, você não tem permissão para abrir um arquivo do seu disco rígido. Claro que isso nunca acontece em real, porque quando você abre um arquivo, o sistema operacional alterna do modo usuário para o modo 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 é para proteção. Os sistemas operacionais baseados em microkernel (por exemplo, o MINIX 3) têm a maioria de seus serviços em execução no modo de usuário, o que os torna menos prejudiciais. Os kernels monolíticos (como o Linux) têm quase todos os serviços em execução no modo kernel. Assim, é improvável que um driver que trave no MINIX 3 abata todo o sistema, embora isso não seja incomum no Linux.

    Chamadas de sistema são as primitivas usadas nos kernels monolíticos (modelo de dados compartilhados) para comutar do usuário para o modo kernel. A passagem de mensagens é a primitiva usada em microkernels (modelo cliente / servidor). Para ser mais preciso, em uma mensagem que passa, os programadores do sistema também usam chamadas do sistema para chamar a atenção da CPU. A passagem de mensagens é visível apenas para os desenvolvedores do sistema operacional. Os kernels monolíticos que usam chamadas de 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 trocar de 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, é executar uma chamada de sistema. Interrupções, por outro lado, são geradas puramente por hardware.

    Quando interrompemos a CPU (seja por software ou por hardware), ela precisa salvar em algum lugar seu estado atual - o processo que executa e no ponto em que parou - caso contrário, não será capaz de retomar o processo. quando voltar. Isso é chamado de mudança de contexto e faz sentido: antes de desligar o computador para fazer outra coisa, primeiro você precisa ter certeza de que salvou todos os seus programas / documentos, etc, para poder retomar a partir do ponto em que parou da próxima vez que você ligá-lo:)

    Assim, 3 explica o que precisa ser feito após a execução de um trap ou uma interrupção e como os dois casos são semelhantes.

por 02.08.2011 / 23:58
8

Chamadas de sistema, passagem de mensagens (como descrito no artigo da Wikipedia) e interrupções são todas as 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 de modo de usuário deve chamar o kernel. Chamadas de sistema e passagem de mensagens são dois métodos para fazer isso.

Chamadas do sistema envolvem a execução de uma instrução específica da CPU ou conjunto de instruções, que fazem a CPU pular (primeiro salvar 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 usuário para o kernel modo (toque 3 para tocar 0 na arquitetura Intel).

As interrupções de hardware fazem praticamente o mesmo, fazem com que a CPU pule (primeiro salvar o endereço de retorno na pilha) para um endereço pré-definido e mova a CPU do modo de usuário para o modo kernel. Assim, em muitas CPUs, o mesmo mecanismo pode ser invocado por software (chamado de "interrupção de software") e pode ser usado para chamadas de CPU.

O envio de mensagens implica (para mim, pelo menos) que o kernel é um "processo em execução" que receberá um fluxo de mensagens e que existe uma função acessível do modo de usuário que enviará tais mensagens. Ou pode ser que a função "enviar" apenas empurre os valores em uma pilha e, na próxima vez que o kernel tiver controle (se um processo bloquear ou interromper), ele exibirá mensagens da pilha e distribuirá as rotinas internas de acordo.

Em uma arquitetura de microkernel onde o "kernel" real é muito pequeno e a maioria das funções que um kernel fornece são movidas para processos de "servidor", os quais podem estar rodando simultaneamente em um sistema multi-CPU, algo como isto pode ser mais útil que a abordagem de chamada de sistema antiga simples. Interpretar e rotear "mensagens" para o "servidor" do kernel apropriado seria um dos poucos trabalhos do microkernel.

    
por 02.08.2011 / 22:37
5

Passagem de mensagens é um conceito de nível mais alto de um processo enviando uma mensagem para outro. Ele é implementado por uma chamada do sistema (kernel), pedindo ao kernel para passar a mensagem para o outro processo. Chamadas de sistema pedem ao kernel para executar vários serviços para o processo. Eles são implementados por uma interrupção de software / trap de sistema, o que faz com que a cpu salve algum estado na pilha para que possa retornar mais tarde, depois mude para o modo kernel e pule para o manipulador de 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, em seguida, pode ir ler a porta IO do teclado para ver qual tecla foi pressionada e executar a ação apropriada e retornar ao programa que foi interrompido.

    
por 03.08.2011 / 05:02