Multitarefa: diferenças entre revisões

Origem: Wikipédia, a enciclopédia livre.
Conteúdo apagado Conteúdo adicionado
EmausBot (discussão | contribs)
m r2.7.3) (Robô: A modificar: sk:Multitasking (počítače)
Linha 1: Linha 1:
paulo jorge sousa lopes nascido a 30 de fevereiro de 1950 ama a olga que por sorte anda neste escola!
Em [[computação]], '''Multitarefa''' é a característica dos [[sistema operativo|sistemas operativos]] que permite repartir a utilização do [[processador]] entre várias tarefas aparentemente simultaneamente.


==História==
==História==
Linha 9: Linha 9:
O primeiro passo para a multitarefa no MS-DOS foi a criação dos TSR's (''[[Terminate and stay resident|Terminate and Stay Resident]]''), pequenos programas que permaneciam em memória enquanto se executava outro programa, e que podiam instalar [[Interrupção de hardware|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 [[programa]]s coexistiam, mas não podiam ser executados simultâneamente.
O primeiro passo para a multitarefa no MS-DOS foi a criação dos TSR's (''[[Terminate and stay resident|Terminate and Stay Resident]]''), pequenos programas que permaneciam em memória enquanto se executava outro programa, e que podiam instalar [[Interrupção de hardware|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 [[programa]]s coexistiam, mas não podiam ser executados simultâneamente.


O passo seguinte foi a emulação de multitarefa. Exemplos disto eram as primeiras versões de [[Windows]], que este executava sobre [[MS-DOS|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.
O passo seguinte foi a emulação de Exemplos disto eram as primeiras versões de [[Windows]], que este executava sobre [[MS-DOS|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 [[língua inglesa|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 (informática)|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.
Posteriormente, surgiu uma das principais componentes dos SO actuais: o [[escalonador de processos]], ou (em [[língua inglesa|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 (informática)|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.
Linha 16: Linha 16:


== Tarefas ==
== Tarefas ==
Os conceitos ligados ao paralelismo de tarefas não são consensuais. A linguagem vulgar no UNIX sugere, no entanto, alguns termos razoavelmente universais.
Os s 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'' partilham. Cada thread tem o seu próprio estado de processador e a sua própria [[pilha]].
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'' partilham. Cada thread tem o seu próprio estado de processador e a sua própria [[pilha]].

Revisão das 13h43min de 21 de setembro de 2012

paulo jorge sousa lopes nascido a 30 de fevereiro de 1950 ama a olga que por sorte anda neste escola!

História

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 simultâneamente.

O passo seguinte foi a emulação de 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êmica 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

Os s 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 partilham. Cada thread tem o seu próprio estado de processador e a sua própria pilha.

Alternância de tarefas

Cada processador pode executar apenas um programa de cada vez. Por esta razão, a multitarefa num sistema uniprocessador é 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.

Tipos de multitarefa

Existem dois tipos de sistemas operativos multitarefa: os de antecipação e os de cooperação.

Multitarefa de antecipação

Os sistemas operativos com multitarefa de antecipação (ou multitarefa preemptiva) esforçam-se por conseguir uma "democratização" dentro do processador. Os seus núcleos mantêm em memória um registo de todos os processos em execução. A esse registo dá-se o nome de árvore de processos, em virtude de a estrutura de dados interna ser geralmente uma árvore.

Entre outros atributos acerca de cada processo, essa "árvore" inclui uma informação de prioridade (chamada "nice" nos sistemas Unix-like e simplesmente "Priority" nos Windows NT), com a qual o núcleo calcula o tempo de CPU que deve dar a cada processo; quando esse tempo acaba, o núcleo tira o controle da CPU do processo e o fornece ao processo que vem a seguir na fila. Quando a fila acaba, o núcleo volta a dar o controle da CPU ao primeiro processo, fechando assim o ciclo.

Exemplos:

Multitarefa de cooperação

A multitarefa de cooperação pouco difere do outro sistema. A única diferença é que, neste caso, há uma preempção explícita, sendo que o programa instrui o núcleo a fazer o task switching em certos pontos do código, e o núcleo apenas passa ao processo seguinte quando o programa o permite.

Actualmente, a maioria dos sistemas operativos utiliza a multitarefa de antecipação. Em certos casos, no entanto, o núcleo não é antecipável, obrigando à utilização deste método para permitir a multitarefa enquanto o processo executa uma chamada de sistema.

Exemplos:

Ver também