Em sistemas monotarefas, existem 3 estados possíveis para a tarefa.
Enquanto um programa é uma sequência de instruções para tratar um problema, uma tarefa é a execução das instruções definidas no programa. Um programa é algo estático, enquanto uma tarefa é algo dinâmico.
Em sistemas monotarefas, existem 3 estados possíveis para a tarefa: Nova (New); Executando (Running) e Terminada (Terminated). Diferentemente de um sistema multitarefas, no sistema monotarefa não existe o estado de Suspensa pois a tarefa aguarda por um recurso (I/O, por exemplo) no estado de Executando.
Em sistemas multitarefa, para evitar que o processador fique ocioso quando uma tarefa está Suspensa aguardando uma entrada do usuário pelo teclado, uma outra tarefa pode ser alocada no processador. Essa é uma vantagem de sistemas multitarefas pois melhora a utilização do processador.
Quando uma tarefa está no estado Terminada, ela não volta para nenhum outro estado. Uma tarefa Terminada aguarda que seus recursos sejam liberados e que alguma outra tarefa pegue seu retorno.
Quando uma tarefa entra no processador, ela terá um tempo para permanecer lá executando. Esse tempo é chamado de quantum de tempo. Quando o quantum termina, a tarefa sai do estado de Executando e vai para Pronto.
Em sistemas multitarefas, existe um monitor que controla a execução das tarefas de tal forma que o processador não fique ocioso quando uma tarefa está aguardando uma entrada de usuário, por exemplo. O monitor tem como objetivo manter o processador ocupado.
Enquanto o código da tarefa está sendo carregado na memória, seu estado permanece em Nova. Quando estiver tudo pronto para a tarefa iniciar a execução, ela passa para o estado de Pronta.
Ao chamar a função "sleep(5)", uma tarefa muda do estado Executando para Suspensa e, ao término do tempo definido (5 segundos), o estado da tarefa é alterado de Suspensa para Pronta.
Em um sistema multitarefa, uma tarefa vai para o estado suspensa (suspended) quando ela deseja receber uma entrada de usuário (via teclado). A tarefa irá para o estado suspensa e permanecerá neste estado até que a operação de entrada seja concluída. Após a conclusão da operação de entrada, o Sistema Operacional retira a tarefa do estado de suspensa colocando-a no estado de pronta.
Algumas funções não precisam dos privilégios do modo kernel para serem executadas e não há necessidade de pedir ajuda ao kernel, como a função sqrt(), por exemplo. Pode-se afirmar que implementar a função sqrt como uma chamada de sistema seria desvantajoso em termos de desempenho. Já que a função sqrt() é implementada pela biblioteca math.h e executa no modo usuário. Ela poderia ser implementada como uma chamada de sistema, porém isso seria muito ruim em termos de desempenho devido a necessidade de realizar algumas trocas de contexto, conforme explicado a seguir. Quando um processo invoca uma chamada de sistema, o processo solicitante é colocado no estado de espera e, em seguida, o sistema troca para o modo kernel e a chamada de sistema é executada (ou seja, o kernel entra em execução). Após calcular a raiz quadrada (sqrt()), a chamada de sistema coloca o retorno em uma área de memória acessível ao processo solicitante. Quando a execução da chamada termina, o Kernel retira o processo solicitante do estado de espera colocando-o em uma fila de processos prontos para serem executados. A próxima vez que o processo ganhar o processador, ele terá acesso ao resultado da função sqrt(). Viu como seria muito trabalhoso o cálculo da função sqrt(), caso ele fosse calculada pelo kernel (especificamente uma chamada de sistema do kernel)? Da forma como ele é realmente executada (sem ser uma chamada de sistema), basta fazer um "jump" para área de código da memória onde se encontram as instruções que calculam a raiz quadrada.
Um sistema operacional multitarefa não é necessariamente preemptivo. Em sistemas preemptivos, a tarefa sai do processador após um intervalo de tempo (ex. 1ms), ou seja, a tarefa é interrompida mesmo antes de ir para o estado de suspensa (suspended) ou para o estado de terminada (terminated). Sistemas multitarefas sem preempção aguardam a tarefa em execução liberar o processador, voluntariamente, indo para o estado de suspensa ou terminada.
COMENTÁRIOS