Multitarefa

En informática, a **multitarefa** (*multitasking* en lingua inglesa) refírese á capacidade dun software para executar varios programas simultaneamente: por exemplo, se se lle pide ao sistema que execute dous procesos, A e B, simultaneamente, a CPU executará o proceso A durante uns instantes, despois o proceso B durante uns instantes, despois volverá a executar o proceso A e así sucesivamente; a transición do proceso A ao proceso B e viceversa chámase cambio de contexto  (*context switch* en inglés).

As decisións relativas á execución dun cambio de contexto entre dous programas tómaas un compoñente de software do sistema operativo, o planificador (*scheduler* en inglés), que enviará as súas decisións, principalmente dadas polo comando *nice*, a outro módulo do sistema operativo, o *dispatcher* («despachador»), que executará o cambio de contexto. Dependendo da estratexia de servizo (algoritmo de programación) que se siga, o planificador controla a distribución do tempo de CPU entre todos os procesos activos. Existen dúas técnicas principais para controlar a terminación e a pausa da multitarefa: a antiga, non preventiva («cooperativa») e a nova, preventiva («preemptiva»), pero hoxe en día o verdadeiro poder da multitarefa reside unicamente no algoritmo de programación utilizado.

## Multiprogramación 
[miniatura|300px|[Ordenador central *Bull Gamma 60* na SNCF en Auteuil, Francia, 1960.]]
Nos primeiros tempos da informática, o tempo da CPU era caro e os periféricos eran moi lentos. Cando o ordenador executaba un programa que necesitaba acceder a un periférico, a unidade central de procesamento (CPU) tiña que deixar de executar as instrucións do programa mentres o periférico procesaba os datos. Isto adoitaba ser moi ineficiente. A multiprogramación é unha técnica informática que permite cargar e executar varios programas simultaneamente na memoria dun ordenador, o que permite que a CPU cambie entre eles rapidamente. Isto optimiza o uso da CPU manténdoa ocupada na execución de tarefas, o que é especialmente útil cando un programa está á espera de que se completen as operacións de E/S.

O *Bull Gamma 60*, deseñado inicialmente en 1957 e lanzado por primeira vez en 1960, foi o primeiro ordenador deseñado pensando na multiprogramación. A súa arquitectura incluía unha memoria central e un «Distribuidor de Programas» que alimentaba ata vinte e cinco unidades de procesamento autónomas con código e datos, e permitía o funcionamento simultáneo de varios clústeres.

Outro ordenador deste tipo foi o LEO III, lanzado por primeira vez en 1961. Durante o procesamento por lotes, varios programas diferentes cargábanse na memoria do ordenador e o primeiro comezaba a executarse. Cando o primeiro programa chegaba a unha instrución que agardaba por un periférico, o contexto deste programa almacenábase e o segundo programa na memoria tiña a oportunidade de executarse. O proceso continuaba ata que todos os programas remataban de executarse.

A multiprogramación non garante que un programa se execute a tempo. De feito, o primeiro programa podería tardar horas en executarse sen necesidade de acceso a un periférico. Dado que non había usuarios esperando nun terminal interactivo, isto non era un problema: os usuarios entregaban un conxunto de tarxetas perforadas a un operador e volvían unhas horas despois para obter os resultados impresos. A multiprogramación reduciu significativamente os tempos de espera cando se procesaban varios lotes.

### Tipos 
Hai dous tipos principais de multiprogramación:

* Por lotes (*batch*): na que non hai interacción do usuario. O obxectivo deste tipo de multiprogramación é maximizar os recursos de hardware dispoñibles. É unha metodoloxía típica dos primeiros tempos da informática, un período no que a dispoñibilidade de ordenadores era baixa.

O *grao de multiprogramación* refírese á capacidade dun sistema para executar varios procesos na memoria.

## Multitarefa cooperativa 
Os primeiros sistemas multitarefa empregaban aplicacións que cedían tempo voluntariamente entre si. Esta estratexia, que finalmente foi apoiada por moitos sistemas operativos informáticos, coñécese hoxe en día como multitarefa cooperativa. Aínda que agora raramente se usa en sistemas máis grandes, agás para aplicacións específicas como CICS ou o subsistema JES2, a multitarefa cooperativa foi nalgún momento o único esquema de programación empregado por Microsoft Windows e o Mac OS Classic, para permitir que varias aplicacións se executasen simultaneamente. A multitarefa cooperativa aínda se usa hoxe en día nos sistemas RISC OS.

Como un sistema multitarefa cooperativo depende de que cada proceso ceda tempo regularmente a outros procesos do sistema, un programa mal deseñado pode consumir todo o tempo de CPU para si mesmo, xa sexa realizando cálculos extensos ou en espera activa; ambas as situacións provocarían o fallo de todo o sistema. Nun contorno de servidor, isto é un perigo que fai que todo o contorno sexa inaceptablemente fráxil.

## Multitarefa preventiva 
miniatura|Kubuntu (KDE Plasma 5) con catro escritorios virtuais que executan varios programas ao mesmo tempo.
A multitarefa preventiva permite que o sistema informático garanta de forma máis fiable a cada proceso unha "porción" regular de tempo de funcionamento. Tamén permite que o sistema xestione rapidamente eventos externos importantes, como datos entrantes, que poderían requirir a atención inmediata dun ou outro proceso. Os sistemas operativos foron desenvolvidos para aproveitar estas capacidades do hardware e executar varios procesos de forma preventiva. A multitarefa preventiva implementouse no PDP-6 Monitor e Multics en 1964, en OS/360 MFT en 1967 e en Unix en 1969, e estaba dispoñible nalgúns sistemas operativos para ordenadores tan pequenos como o DEC PDP-8; é unha característica fundamental de todos os sistemas operativos de tipo Unix, como Linux, Solaris e BSD cos seus derivados, así como das versións modernas de Windows.

Posiblemente o primeiro sistema operativo multitarefa preventivo dispoñible para usuarios domésticos foi o Microware OS-9, dispoñible para ordenadores baseados no Motorola 6809, como o TRS-80 Color Computer 2, co sistema operativo subministrado por Tandy como unha actualización para sistemas equipados con disco. O Sinclair QDOS no Sinclair QL seguiu en 1984, pero non foi un grande éxito. O Amiga de Commodore foi lanzado ao ano seguinte, ofrecendo unha combinación de capacidades multitarefa e multimedia. Microsoft converteu a multitarefa preventiva nunha característica central do seu sistema operativo insignia a principios da década de 1990 ao desenvolver Windows NT 3.1 e despois Windows 95. En 1988, Apple ofreceu A/UX como unha alternativa baseada en UNIX System V ao Mac OS clásico. En 2001, Apple cambiou ao Mac OS X influenciado por NeXTSTEP.

Un modelo similar úsase en Windows 9x e na familia Windows NT, onde as aplicacións nativas de 32 bits realizan multitarefas de forma preventiva. As edicións de 64 bits de Windows, tanto para as arquitecturas x86-64 como para as de Itanium, xa non admiten aplicacións herdadas de 16 bits e, polo tanto, proporcionan multitarefa preventiva para todas as aplicacións compatibles.

## Tempo real 
Outra razón para a multitarefa foi o deseño de sistemas de computación en tempo real, onde hai unha serie de actividades externas posiblemente non relacionadas que deben ser controladas por un sistema de procesador único. Nestes sistemas, un sistema de interrupcións xerárquico está acoplado á priorización de procesos para garantir que as actividades clave reciban unha maior parte do tempo de proceso dispoñible.

## Notas 
## Véxase tamén 
### Outros artigos 
* Fío (informática)
* Multiusuario

### Ligazóns externas 
*  no DiGaTIC (Dicionario Galego das TIC).