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