Multitarefa

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Question book.svg
Esta página ou secção não cita fontes confiáveis e independentes, o que compromete sua credibilidade (desde novembro de 2012). Por favor, adicione referências e insira-as corretamente no texto ou no rodapé. Conteúdo sem fontes poderá ser removido.
Encontre fontes: Google (notícias, livros e acadêmico)

Em informática, multitarefa é a característica do sistema operativo que permite repartir a utilização do processador entre várias tarefas aparentemente simultâneas.

História[editar | editar código-fonte]

O primeiro sistema informatizado a usar multitarefa foi o britânico LEO III, completado 1961.

A multitarefa preemptiva foi implementada nas versões iniciais do Unix em 1969, e é o padrão no Unix e em sistemas operacionais similares, incluindo Linux, Solaris e BSD em suas variações.

Pode parecer difícil de imaginar um computador monotarefa, i.e., que apenas permita utilizar uma aplicação mas, de facto, houve um percurso histórico notável até se atingir o nível actual de paralelização de processos. Com efeito, os primeiros computadores apenas permitiam executar uma única tarefa de cada vez. O Apple DOS é um excelente exemplo disso, já que foi dos primeiros sistemas operativos para computadores pessoais.

O primeiro passo para a multitarefa no MS-DOS foi a criação dos TSR's (Terminate and Stay Resident), pequenos programas que permaneciam em memória enquanto se executava outro programa, e que podiam instalar rotinas de tratamento de interrupções para serem ativados posteriormente. Ou seja, estando o utilizador a escrever um texto num processador de texto, por exemplo, poderia apertar uma combinação de teclas que dispararia uma interrupção e chamaria a TSR de uma agenda pessoal para tirar notas. Assim, do ponto de vista do processador, o processo do processador de texto era bloqueado e passava-se o controle para a agenda. Quando o utilizador terminasse, voltava-se ao processador. Ambos programas coexistiam, mas não podiam ser executados simultaneamente.

O passo seguinte foi a emulação de multitarefa. Exemplos disto eram as primeiras versões de Windows, que este executava sobre DOS (monotarefa), mas o núcleo do Windows fazia a sua própria gestão dos processos. Curiosamente, se um processo bloqueasse o Windows, todas as aplicações teriam que ser terminadas pois eram todas dependentes.

Posteriormente, surgiu uma das principais componentes dos SO actuais: o escalonador de processos, ou (em inglês) scheduler, que faria a gestão, qualificação e o gerenciamento de prioridade dos processos sem afectar o núcleo do sistema operativo. Ou seja, todas as tarefas núcleo são críticas, e todo o tempo que sobrar é legado aos processos. Adivinha-se, portanto, a necessidade de estabilizar o núcleo, por forma a minimizar o tempo de execução de tarefas internas.

O escalonador de processos é uma componente muito polêmico em termos de inovação e de aplicações. Dependendo das situações, um escalonador de processos deve gerir os seus processos por forma a diminuir a latência entre aplicações interactivas, ou assegurar a coerência em termos de critérios no escalonamento: se uma tarefa não é crítica, então não devia estar a ser executada.

Tarefas[editar | editar código-fonte]

Os conceitos ligados ao paralelismo de tarefas não são consensuais. A linguagem vulgar no UNIX sugere, no entanto, alguns termos razoavelmente universais.

No UNIX, existem dois níveis de tarefa: o processo e a thread. Os processos têm uma série de threads associadas. Tipicamente, cada processo tem um determinado espaço de endereçamento que as diferentes threads compartilham. Cada thread tem o seu próprio estado de processador e a sua própria pilha.

Alternância de tarefas[editar | editar código-fonte]

Cada processador pode executar apenas um programa de cada vez. Por esta razão, a multitarefa num sistema uniprocessador (ou monoprocessador) é apenas uma ilusão conseguida com a alternância rápida entre as várias tarefas.

O núcleo do sistema operativo é responsável por isolar os contextos de execução das diversas tarefas. Para conseguir isto, é necessário que uma rotina do núcleo seja chamada a dada altura. Essa rotina (que pode ser chamada por uma interrupção provocada por um temporizador interno do computador) geralmente executa as seguintes operações:

  • Salva o estado do processador numa estrutura de dados do núcleo (a árvore de processos);
  • Seleciona, com base num algoritmo, a próxima tarefa a executar;
  • Se for necessário, reconfigura o espaço de endereçamento de modo a que a próxima tarefa encontre a memória no estado que espera;
  • Carrega o estado do processador referente à tarefa que vai receber tempo de processador;
  • A rotina retorna permitindo que o programa execute.

Ver também[editar | editar código-fonte]

Ícone de esboço Este artigo sobre Informática é um esboço. Você pode ajudar a Wikipédia expandindo-o.