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 nenhuma fonte ou referência, o que compromete sua credibilidade (desde novembro de 2012).
Por favor, melhore este artigo providenciando fontes fiáveis e independentes, inserindo-as no corpo do texto por meio de notas de rodapé. Encontre fontes: Googlenotícias, livros, acadêmicoYahoo!Bing. Veja como referenciar e citar as fontes.

Em computação, Multitarefa é a característica dos sistemas operativos que permite repartir a utilização do processador entre várias tarefas aparentemente simultaneamente.

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