Como um único processador executa o sistema operacional, bem como o programa do usuário simultaneamente?

3

Tudo bem, sabemos que um único processador pode executar uma instrução por vez, o que significa que um único processador pode executar as instruções do sistema operacional ou as instruções do programa do usuário ao mesmo tempo.

Agora, como é possível que um sistema operacional e um programa do usuário possam ser executados ao mesmo tempo em um único processador?

A cpu é atribuída a um programa do usuário quando você abre o programa e quando você fecha o programa do usuário a cpu é atribuída de volta ao sistema operacional?

    
por Ahti 09.01.2017 / 15:43

1 resposta

7

Time-slicing . A CPU alterna entre tarefas a cada poucos milésimos de segundo, então parece ao observador que está fazendo duas ou mais coisas ao mesmo tempo. Há também o fato de que o SO tem algum controle sobre como os threads recebem tempo de execução, para que ele possa empilhar o deck, mas o agendamento de threads está além de qualquer coisa que eu esteja disposto a usar com essa resposta.

As CPUs executam processos como um ou mais tópicos de instruções, e cada segmento representa seu próprio "contexto" para as instruções que está executando ( registrar valores, etc).

As CPUs encaminham as instruções de vários segmentos para uma fila e as executam em ordem. Quando uma instrução de um segmento diferente chega na frente da fila, a CPU realiza uma "alternância de contexto" para pausar uma thread e executar instruções de outro. Isto é necessário para que a CPU possa executar vários threads aparentemente simultaneamente, e para lidar com interrupções que ocorrem enquanto a CPU executa outras tarefas.

Você menciona especificamente o sistema operacional e os programas do usuário. Na medida em que a interface de usuário do sistema operacional permanece responsiva ao usuário enquanto um programa está em execução, trata-se basicamente de time-slicing, mas de igual importância é o que acontece quando o programa usa funções do SO para executar tarefas. Como apontou @ Techie007, a distinção entre os programas do sistema operacional e do usuário é reduzida quando os serviços do SO estão executando metade ou todo o trabalho. Esse desfoque é ainda mais profundo do que quando os programas se vinculam a bibliotecas do sistema para funcionalidade. Quando um programa usa uma chamada do sistema operacional para executar uma função, o código de máquina real dessa função é carregado na RAM como parte do fluxo de instruções do encadeamento, portanto o encadeamento do programa do usuário está realmente executando o código do sistema operacional, e não o contrário!

    
por 09.01.2017 / 15:47