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.