Informática, perguntado por Karinymaartins4441, 10 meses atrás

O que é uma preempção e quando acontece preempcao sistemas operacionais

Soluções para a tarefa

Respondido por bokomoko
4
Sistemas operacionais multitarefa (multiprogramáveis) executam várias tarefas ao mesmo tempo. Mesmo quando o computador só tem um processador (felizmente a maioria dos computadores hoje em dia é multiprocessador).

Na verdade é só impressão. O sistema operacional alterna a execução entre as tarefas tão rapidamente que a impressão que temos é que tudo está sendo feito ao mesmo tempo. 

Para alternar entre uma tarefa e outra existem duas técnicas. A preempção e a colaboração. No fim da década de 90 e até mais ou menos meados da década de 90 houve muita polêmica entre os fabricantes e SO sobre qual era a melhor: preempção ou colaboração? hoje esse debate é nulo. Praticamente todo SO usa preempção.

Na preempção, o SO interrompe a execução de uma tarefa para que outra tarefa possa ser executada. Esta por sua vez será interrompida para que a primeira tarefa seja concluida (ou interrompida de novo antes de concluida) e assim o SO fica alternando entre uma tarefa e outra.

Na colaboração uma tarefa vai executando até quando ela mesma se interrompe (suspende) e passa de volta o comando ao sistema operacional num momento oportuno. O sistema operacional alterna para outra tarefa e aguarda que essa segunda tarefa "colabore" liberando a máquina (cpu) no momento que ELA achar oportuno. E assim entre colaboradas de uma e de outra, os processos concluem  suas tarefas.

Imagine uma reunião com várias pessoas e um moderador. Cada pessoa vai falando falando falando para justificar seu argumento. De repente o moderador interrompe o que a pessoa tá falando e passa a palavra para outra pessoa que começa a falar falar falar até ser interrompido pelo moderador que passa a palavra para outro. Pois isso é preempção. O moderador é o SO e as pessoas são os programas/processos que estão rodando.

Imagine uma reunião de pessoas super educadas em que elas falam um pouquinho e elas mesmas param de falar abrindo espaço para outras falarem. O moderador não interrompe as pessoas. Ele espera. O papel dele é apenas organizar a vez de quem vai falar agora. Isso é colaboração.

Existem vantagens e desvantagens em usar preempção ou colaboração para alternar o processamento entre as tarefas.

Na teoria, a preempção é menos eficiente pois os processos podem ser interrompidos num momento que não seria o ideal. É o caso da reunião quando o moderador interrompe a pessoa no meio de uma frase. Quando a palavra voltar a ela, ela vai perder tempo tendo que recontextualizar seu argumento. Na colaboração, as tarefas se tornam mais eficientes pois só param na hora mais conveniente. Por exemplo, quando solicitam uma operação de Entrada/Saída. 

Na prática, para a colaboração funcionar é preciso que os programas todos sejam concebidos desde a origem com a ideia da colaboração. Cabe ao programador implementar os pontos onde o programa vai "colaborar", ou seja, ceder a vez. Como se não bastasse o programador se preocupar com a lógica da sua aplicação, ainda ter que se preocupar com isso. Programar para sistemas operacionais colaborativos é mais complicado e caro. A maior eficiência dos sistemas colaborativos tem um preço. Além disso, como fica a cargo do programador a "passagem do bastão", se o programador foi malvado e/ou egoísta pode não compartilhar  muito bem, ou ... ele pode cometer um erro de programação e o programa dele compartilhar menos os recursos computacionais (tempo de processamento, IO, memória, etc).


Perguntas interessantes