Multitasca: diferència entre les revisions

Contingut suprimit Contingut afegit
m Corregit: es a dir > és a dir
S'han traduit tres apartats de l'edicio anglesa
Línia 1:
En [[informàtica]], '''multitasca''' és un mètode on múltiples tasques (tambe conegudes com a [[Procés informàtic|processos]]) s'executen durant el mateix periode de temps - s'executen [[Computació concurrent|concurrentment]] (en periodes de temps solapats, amb tasques començant abans que altres acabin - en comptes de seqüencialment (una tasca acaba abans de que comenci la següent). Les tasques comparteixen recursos de computació comuns, com [[Unitat central de processament|processadors]] (CPUs) i [[Memòria d'accés aleatori|memoria principal]].
'''Multitasca''' és literalment la capacitat de dur a terme simultàniament diverses activitats. En el cas de la [[informàtica]], podem parlar de multitasca en dos camps diferents: [[programari]] i [[maquinari]].
 
La multitasca ''no'' necessariament significa que multiples tasques s'estàn executant exactament al mateix instant. En altres paraules, la multitasca no implica [[Computació paral·lela|execució paral·lela]], però significa que mes d'una tasca pot estar a mitja execució, i que mes d'una tasca està avançant en un periode de temps donat.
En el cas del programari, és freqüent (avui en dia, inevitable) parlar de [[Sistemes operatius]] multitasca. Aquests permeten fer servir diverses aplicacions de forma aparentment simultània, encara que l'equip físic només tingui una Unitat de Procés ([[CPU]]).
 
En el cas d'un ordinador amb només una CPU, nomès una taska s'està executant un un instant de temps, es a dir, la CPU nomès esta 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]]. L'ilusió de pararelisma s'aconsegueix amb canvis de context molt frequents.
En el cas del maquinari, parlem de '''Multitasca Real''' quan ens referim a processadors que poden dur a terme diverses operacions en el mateix moment (en el mateix ''clock'' o ''batec'' del processador). Per aconseguir-ho s'han fet servir diverses tècniques al llarg del temps:
 
Fins i tot en sistemes multiprocessador o multicore, que tenen múltiples CPUs/nuclis de manera que es pot executar mes d'una tasca a la vegada (fisicament, una per CPU o per nucli), la multitasca permet que s'estiguin executant moltes mes tasques que processadors hi han.
# [[Pipelining]]: tècnica que consisteix a preparar l'execució d'una instrucció en [[codi màquina]] mentre l'anterior s'executa.
# [[HyperThreading]]: tecnologia desenvolupada per [[Intel]] que permet executar una instrucció al processador mentre l'anterior encara no ha acabat. Només és viable amb processadors [[CISC]], on la durada d'execució de cada instrucció és diferent. En els processadors [[RISC]] no és aplicable.
# [[Dual core]] i [[Multi core]]: dues o més unitats de procés incrustades en el mateix [[microprocessador]] permeten l'execució simultània de diverses instruccions sense que interfereixin. És a partir d'aquest moment quan podem començar a parlar de multitasca real, tot i que, estrictament, només podrem tenir dos tasques funcionant simultàniament en un ordinador amb un processador dual core.
 
Els Sistemes Operatius poden adoptar una de varies estrategies de planificació, que generalment entren en alguna de les següents categories:
Cal aclarir que en qualsevol Sistema Operatiu actual, el nombre de tasques que funcionen alhora són centenars o milers i que, per tant, sempre serà necessari donar suport multitasca al maquinari amb la virtualització de la multitasca des del programari.
* En sistemes multiprogramats, la tasca en execució continua executant-se fins que realitza alguna operació que requereixi esperar un event extern (per exemple llegir del disc) o fins que el planificador de l'ordinador força el canvi de context. Els sistemes multiprogramats estàn disenyats per maximitzar l'utilització de la CPU.
* En sistemes de [[temps compartit]], s'espera a que la tasca renuncii a la CPU, ja sigui voluntariament o a través d'un event extern com una [[Interrupció|interrupció hardware]]. Els sistemes de temps compartit estàn disenyats per permetre varis programes d'executarse de forma aparentment simultània.
* En sistemes de [[Computació en temps real|temps real]], es garanteix que algunes tasques rebràn la CPU quan es produeix un event extern. Els sistemes en temps real estàn disenyats 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èric|perifèrics]] molt lents. Quan l'ordinador executava un programa que necessitava accedir a un perifèric, l'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 britanic Leo III, propietat de J. Lyons and Co. Varis 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'us de la multiprogramacó va augmentar amb l'arribada de la [[memòria virtual]] i les [[Màquina virtual|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 practics, inexistents i invisibles per a ells.
 
La multiprogramació no garanteix que un programa s'haura 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 havien usuaris esperant en un terminal inactiu, això no era cap problema: als usuaris se'ls sonava una tarjeta per identificar-los i tornaven unes hores mes tard a recollir els resultats imprimits. La multiprogramació va reduir significativament els tems d'espera quan s'havien d'executar multiples programes.
 
== Multitasca cooperativa ==
L'expresió "temps compartit" (time sharing) solia designar ordinadors compartits per usuaris inactius als terminal, com el TSO de IMB i VM/CMS. El terme time-sharing ja no s'utilitze gaire sovit, ja que s'ha substituit per "multitasca", segint el creixement dels ordinadors personals.
 
Els primers sistemes multitasca utilitzaven aplicacions que cedien el temps a les altres voluntariament. Aquesta aproximació, que va arribar a ser suportada per varis [[sistema operatiu|sistemes operatius]], avui es coneix coma multitasca colaborativa. Tot i que actualment s'utilitza poc en sistemes grans excepte en aplicacions especifiques com CICS o el subsitema JES2, la multitasca cooperatica va ser l'esquema de planificació utilitzat per [[Microsoft Windows]], (fina a [[Windows 95]] i [[Windows NT]]) i [[Mac OS]] (fins a [[OS X]]) per permetre que multiples aplicacions s'executessin simultaniament. 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 utilizava multitasca cooperativa fins a la versió 6.5. La multitaca cooperativa encara s'utilitza en sistemes RISC OS.
 
Com que el sistema de multitasca cooperativa depén de que cada procés cedeixi la CPU regularment, un programa mal disenyat pot consumir tot el temps de CPU ell sol, ja sigui fent calculs molt extensos o fent [[espera activa]]; que farien que tot el sistema "es penji". En un servidor aquest problema fa que tot l'entorn sigui inacceptablement fràgil.
 
== Multitasca preventiva (apropiativa) ==