# Multitasca

En informàtica, multitasca és un mètode on múltiples tasques (també conegudes com a processos) s'executen durant el mateix període -s'executen concurrentment (en períodes solapats, amb tasques començant abans que altres acabin - en comptes de seqüencialment (una tasca acaba abans que comenci la següent). Les tasques comparteixen recursos de computació comuns, com processadors (CPUs) i memòria principal.
La multitasca no necessàriament significa que múltiples tasques s'estan executant exactament al mateix instant. En altres paraules, la multitasca no implica execució paral·lela, però significa que més d'una tasca pot estar a mitja execució, i que més d'una tasca està avançant en un període donat.
En el cas d'un ordinador amb només una CPU, només una tasca s'està executant un instant de temps, és a dir, la CPU només està executant instruccions per a aquesta tasca. La multitasca soluciona aquest problema planejant (en anglès scheduling) quina tasca s'ha d'estar executant en cada moment, i quan una tasca en espera rep el seu torn. El fet de reassignar la CPU d'una tasca a una altra s'anomena canvi de context. La il·lusió de paral·lelisme s'aconsegueix amb canvis de context molt freqüents.
Fins i tot en sistemes multiprocessador o multicore, que tenen múltiples CPUs/nuclis de manera que es pot executar més d'una tasca a la vegada (físicament, una per CPU o per nucli), la multitasca permet que s'estiguin executant moltes més tasques que processadors hi ha.
Els sistemes operatius poden adoptar una de diverses estratègies de planificació, que generalment entren en alguna de les següents categories:
* En sistemes multiprogramats, la tasca en execució continua executant-se fins que realitza alguna operació que requereixi esperar un esdeveniment extern (per exemple llegir del disc) o fins que el planificador de l'ordinador força el canvi de context. Els sistemes multiprogramats estan dissenyats per a maximitzar la utilització de la CPU.
* En sistemes de temps compartit, s'espera que la tasca renunciï a la CPU, sigui voluntàriament o a través d'un esdeveniment extern com una interrupció hardware. Els sistemes de temps compartit estan dissenyats per permetre diversos programes d'executar-se de forma aparentment simultània.
* En sistemes de temps real, es garanteix que algunes tasques rebran la CPU quan es produeix un esdeveniment extern. Els sistemes en temps real estan dissenyats per controlar dispositius mecànics que requereixin fer coses en un moment concret.

## Multiprogramació

En els primers temps de la computació, el temps de CPU era car, i els perifèrics molt lents. Quan l'ordinador executava un programa que necessitava accedir a un perifèric, la unitat de procés (CPU) havia de deixar d'executar instruccions fins que el perifèric havia processat les dades. Això era molt ineficient.
El primer ordinador a utilitzar un sistema de multiprogramació va ser el britànic Leo III, propietat de J. Lyons and Co. Diversos programes diferents en batch eren carregats a la memòria de l'ordinador, i el primer començava a executar-se. Quan el primer arribava a una instrucció que necessitava esperar un perifèric, es desava el context del programa, i es començava a executar el segon programa en memòria. Aquest procés es repetia fins que s'acabava d'executar tots els processos.
L'ús de la multiprogramacó va augmentar amb l'arribada de la memòria virtual i les màquines virtuals, que permetien a programes individuals utilitzar recursos de memòria i de sistema operatiu com si els altres processos que s'executaven concurrentment fossin, a efectes pràctics, inexistents i invisibles per a ells.
La multiprogramació no garanteix que un programa s'haurà executat dins d'un lapse de temps. De fet, el primer programa pot estar-se executant durant hores sense necessitar accedir a cap perifèric. Com que no hi havia usuaris esperant en un terminal inactiu, això no era cap problema: als usuaris se'ls sonava una targeta per identificar-los i tornaven unes hores més tard a recollir els resultats impresos. La multiprogramació va reduir significativament els tems d'espera quan s'havien d'executar múltiples programes.

## Multitasca cooperativa

L'expressió "temps compartit" (time sharing) solia designar ordinadors compartits per usuaris inactius als terminals, com el TSO de IMB i VM/CMS. El terme time-sharing ja no s'utilitza gaire sovint, ja que s'ha substituït per "multitasca", seguint el creixement dels ordinadors personals.
Els primers sistemes multitasca utilitzaven aplicacions que cedien el temps a les altres voluntàriament. Aquesta aproximació, que va arribar a ser suportada per diversos sistemes operatius, avui es coneix com a multitasca col·laborativa. Tot i que actualment s'utilitza poc en sistemes grans excepte en aplicacions específiques com CICS o el subsistema JES2, la multitasca cooperativa va ser l'esquema de planificació utilitzat per Microsoft Windows (fins a Windows 95 i Windows NT) i Mac OS (fins a OS X) per permetre que múltiples aplicacions s'executessin simultàniament. Windows 9x també utilitzava multitasca cooperativa, però només en aplicacions de 16-bits, de la mateixa manera que les versions pre-Leopard PowerPC de Mac OS X feien amb les aplicacions Classic. El sistema operatiu en xarxa NetWare utilitzava multitasca cooperativa fins a la versió 6.5. La multitasca cooperativa encara s'utilitza en sistemes RISC OS.
Com que el sistema de multitasca cooperativa depèn del fet que cada procés cedeixi la CPU regularment, un programa mal dissenyat pot consumir tot el temps de CPU ell sol, sigui fent càlculs molt extensos o fent espera activa; que farien que tot el sistema "es pengi". En un servidor aquest problema fa que tot l'entorn sigui inacceptablement fràgil.

## Multitasca preventiva (apropiativa)

La multitasca preventiva permet que el sistema informàtic que garanteixi de manera més fiable cada procés una "llesca" regular de temps de funcionament. També permet que el sistema per bregar ràpidament amb esdeveniments externs importants com les dades d'entrada, que podrien requerir l'atenció immediata d'un procés o un altre. Es van desenvolupar sistemes operatius per a aprofitar aquestes capacitats de maquinari i executar diversos processos de forma preventiva. Multitasca preventiva va ser recolzat en PDP-8 ordinadors de desembre, i implementat en OS / 360 MFT en 1967, en MULTICS (1964) i Unix (1969); és una característica fonamental de tots els sistemes operatius Unix, com Linux, Solarisi BSD, amb els seus derivats.
En qualsevol moment específic, els processos es poden agrupar en dues categories: els que estan a l'espera de l'entrada o sortida (anomenat "I/O obligats"), i els que estan utilitzant plenament la CPU ("CPU obligat"). En els sistemes primitius, el programari sovint "enquesta", o "busywait" a l'espera de l'entrada sol·licitada (com el disc, el teclat o l'entrada de xarxa). Durant aquest temps, el sistema no estava realitzant un treball útil. Amb l'adveniment de les interrupcions i multitasca preventiva, I / O processos vinculats podria ser "bloquejat", o en suspens, a l'espera de l'arribada de les dades necessàries, permetent altres processos per utilitzar la CPU. Com l'arribada de les dades sol·licitades podrien generar una interrupció, els processos bloquejats podrien garantir-se un retorn oportú a l'execució.
El primer sistema operatiu multitasca preventiva a disposició dels usuaris domèstics era Sinclair QDOS al Sinclair QL, llançat en 1984, però molt poca gent va comprar la màquina. Commodore Amiga, llançat l'any següent, va ser el primer ordinador personal d'èxit comercial per utilitzar la tecnologia i les seves capacitats multimèdia que sigui un avantpassat clar dels ordinadors personals multitasca contemporanis. Microsoft va fer multitasca preventiva una característica central del seu sistema operatiu insígnia al principi de 1990 en el desenvolupament de Windows NT 3.1 i Windows 95. Més tard es va adoptar en l'Apple Macintosh Mac OS X que, com a sistema operatiu Unix, utilitza multitasca preventiva per a totes les aplicacions natives.
Un model similar s'utilitza en Windows 9x i la família de Windows NT, on les aplicacions de 32 bits natius són multitasca preventiva, i heretats de 16 bits de Windows 3.x on els programes són multitasca cooperativa dins d'un mateix procés, encara que en la família NT és possible per forçar una aplicació de 16 bits per executar-se com un procés multitasca preventiva separat. Les edicions de 64 bits de Windows, tant per als x86-64 i Itanium arquitectures, ja no donar suport a l'herència aplicacions de 16 bits, i així proporcionar multitasca preventiva per a totes les aplicacions compatibles.

## Temps Real

Una altra raó per a la multitasca és el disseny de computació en temps real de sistemes, on hi ha un seguit d'activitats externes no relacionades necessàriament, per a ser controlat per un sistema amb un únic processador. En aquests sistemes un sistema d'interrupció jeràrquica és, juntament amb la prioritat, una eina per assegurar que les activitats clau se'ls dona una major proporció de disposició del temps de procés, assegurant així l'execució de processos importants.

## Multifil (multihreading)

Com a multitasca millora molt el rendiment dels ordinadors, els programadors van començar a implementar aplicacions com a conjunts de processos cooperants (per exemple, un procés de recopilació de dades d'entrada, les dades d'entrada de processament d'un procés, un procés escrivint resultats en el disc). Això, però, requereix algunes eines per permetre que els processos intercanviïn de dades de manera eficient.
Els fils (thread en anglès) van néixer de la idea que la forma més eficient per als processos que cooperen per intercanviar dades seria compartir la totalitat del seu espai a la memòria. Per tant, les discussions són efectivament els processos que s'executen en el mateix context de la memòria i altres recursos comparteixen amb els seus processos pare, com els arxius oberts. Fils es descriuen com processos lleugers perquè la commutació entre els fils no implica canviar el context de memòria (un canvi de context endarrereix molt l'execució).
Si bé les discussions s'han programat de forma preventiva, alguns sistemes operatius proporcionen una variant de fils, anomenats fibres, que es programen de forma cooperativa. En els sistemes que no proporcionen fibres, una aplicació pot implementar les seves pròpies fibres mitjançant trucades repetides a les funcions dels treballadors. Les fibres són més lleugers que els fils, i una mica més fàcil de programar, encara que tendeixen a perdre part o la totalitat dels beneficis de les discussions en les màquines amb múltiples processadors.
Alguns sistemes donen suport directament multifil en el maquinari.

## Protecció de memòria

Article principal: Protecció de memòria
Essencial per a qualsevol sistema multitasca és compartir de manera segura i efectiva l'accés als recursos del sistema. L'accés a la memòria s'ha de gestionar estrictament per assegurar que cap procés de manera inadvertida o deliberadament pot llegir o escriure en posicions de memòria fora del seu espai d'adreces. Això es fa amb el propòsit d'estabilitat general del sistema i la integritat de dades, així com la seguretat de dades.
En general, la gestió d'accés a memòria és responsabilitat del nucli del sistema operatiu, en combinació amb els mecanismes de maquinari (com la unitat de gestió de memòria (MMU)) que proporcionen funcionalitats de suport. Si un procés intenta accedir a una posició de memòria fora del seu espai de memòria, la MMU nega la sol·licitud i assenyala el nucli per prendre les mesures adequades; aquesta en general resulta en l'acabament a la força del procés. Segons el programari i del nucli disseny i l'error específic de què es tracti, l'usuari pot rebre un missatge d'error d'accés com "violació de segment".
En un sistema multitasca ben dissenyat i correctament implementat, un procés donat mai pot accedir directament a la memòria que pertany a un altre procés. Una excepció a aquesta regla és en el cas de la memòria compartida; per exemple, en el mecanisme de comunicació entre processos de System V el nucli assigna memòria per ser mútuament compartida per múltiples processos. Tals característiques són d'ús freqüent pel programari de gestió de base de dades com PostgreSQL.
Els mecanismes de protecció de memòria inadequats, ja sigui a causa de defectes en el seu disseny o implementacions pobres, permeten vulnerabilitats de seguretat que poden ser potencialment explotats per programari maliciós.

## Intercanvi de memòria

L'ús d'un arxiu d'intercanvi o swap de partició és una manera que té el sistema operatiu per proporcionar més memòria que està físicament disponible mantenint porcions de la memòria principal a l'emmagatzematge secundari. Mentre que la multitasca i l'intercanvi de memòria són dues tècniques completament aïllades, s'utilitzen molt sovint juntes, l'intercanvi de memòria per exemple permet que més tasques es carreguin al mateix temps.
En general, un sistema multitasca permet que un altre procés s'executi quan el procés en execució realitza un punt en el qual ha d'esperar que una part de la memòria de tornar a carregar des de l'emmagatzematge secundari, és a dir aprofitar els espais de temps on un procés no ma res més que esperar.

## Programació

Processos que són totalment independents no són un problema per al programa en un entorn multitasca. La major part de la complexitat en els sistemes multitasca prové de la necessitat de compartir recursos informàtics entre les tasques i per sincronitzar el funcionament de les tasques que s'executen a la vegada i al mateix espai.
S'utilitzen diverses tècniques de computació concurrent per a evitar possibles problemes causats per múltiples tasques que intenten accedir-hi recurs.
Els sistemes més grans de vegades es construeixen amb un processador central (s) i un nombre de processadors d'E / S, una mena d'asimetria multiprocessament, tal com passa al model Master / Worker.
Amb els anys, els sistemes multitasca s'han refinat. Els sistemes operatius moderns generalment inclouen mecanismes detallats per a la priorització dels processos, mentre que el multiprocessament simètric ha introduït noves complexitats i capacitats.

## Vegeu també

* Arquitectura Harvard
* Arquitectura Eckert-Mauchly
* Sistemes redundants

## Referències

* The Intel Microprocessors 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, and Pentium Pro Processor Architecture, Programming, and Inter- facing (ISBN: 9780139954085), Prentice Hall (2000), Autor:Brey. Barry B.
* Multiprocessing online community Arxivat 2012-01-07 a Wayback Machine.
* Chip_Multiprocessing Arxivat 2011-06-05 a Wayback Machine.

## Enllaços externs

* multiprocessing online community Arxivat 2012-01-07 a Wayback Machine.