Multitasking: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Alfio (discussione | contributi)
m Multitasking con prelazione (preemptive): Corretto la formattazione di "context switch"
 
(177 versioni intermedie di oltre 100 utenti non mostrate)
Riga 1:
{{F|teorie dell'informatica|febbraio 2013|Mancano completamente le sezioni Note, Bibliografia e Collegamenti esterni}}
In [[informatica]], un [[sistema operativo]] '''multitasking''' permette di eseguire più programmi contemporaneamente: se ad esempio viene chiesto al sistema di eseguire contemporaneamente due [[processo (informatica)|processi]] A e B, la [[CPU]] eseguirà per qualche istante il processo A, poi per qualche istante il processo B, poi tornerà ad eseguire il processo A e così via. Ad occuparsi di alternare l'esecuzione dei processi è un componente del sistema operativo, lo [[scheduler]]. A seconda di quale strategia di servizio viene seguita (cioè di quale algoritmo di scheduling e di quali e quanti gradi di priorità dei processi vengono gestiti dal sistema operativo e dall'hardware), lo scheduler controlla la ripartizione del tempo di CPU tra tutti i processi attivi.
 
Con '''multitasking'''<ref>{{Cita libro|autore=Dave Crenshaw|titolo=The Myth of Multitasking: How 'Doing It All' Gets Nothing Done|anno=2008|url=https://archive.org/details/mythofmultitaski0000cren}}</ref> (in [[lingua italiana|italiano]] '''multiprocessualità'''), in [[informatica]], si indica la capacità di un [[software]] di [[esecuzione (informatica)|eseguire]] più [[programma (informatica)|programmi]] contemporaneamente: se ad esempio viene chiesto al sistema di eseguire contemporaneamente due [[processo (informatica)|processi]] <math>A</math> e <math>B</math>, la [[CPU]] eseguirà per qualche istante di tempo il [[Processo (informatica)|processo]] <math>A</math>, poi per qualche istante successivo il [[Processo (informatica)|processo]] <math>B</math>, poi tornerà a eseguire il processo <math>A</math> e così via; il passaggio dal processo <math>A</math> al processo <math>B</math> e viceversa viene definito [[commutazione di contesto]] (''context switch'')<ref>{{Cita libro|autore=Charles Duhigg|titolo=Smarter Faster Better: The Transformative Power of Real Productivity|anno=2016|url=https://archive.org/details/smarterfasterbet0000duhi_h5n8}}</ref>.
Esistono due diversi modi di implementare praticamente il multitasking: senza prelazione (''cooperative'') e con prelazione (''preemptive'').
 
Le decisioni riguardanti l'esecuzione di un cambio di contesto tra due programmi vengono intraprese da un componente software del [[sistema operativo]], lo [[scheduler]], il quale invierà le proprie decisioni date principalmente dal ''[[Nice (Unix)|nice]]'' a un altro modulo del sistema operativo, il ''[[dispatcher]]'' che eseguirà effettivamente il cambio di contesto: a seconda di quale strategia di servizio ([[algoritmo]] di scheduling) venga seguita, lo scheduler controlla la ripartizione del tempo di CPU tra tutti i processi attivi. Esistono due principali tecniche di controllo di termine e pausa del multitasking: il vecchio senza prelazione (''cooperative'') e il nuovo con prelazione (''preemptive''), ma oggigiorno la vera potenza del multitasking risiede solo nell'algoritmo di scheduling usato<ref>{{Cita libro|autore=Gary Keller e Jay Papasan|titolo=The ONE Thing: The Surprisingly Simple Truth Behind Extraordinary Results}}</ref>.
== Multitasking senza prelazione (''cooperative'') ==
 
== Descrizione ==
Detto anche multitasking ''cooperative'', in questo caso caso i programmi cedono volontariamente il controllo al sistema operativo una volta finita l'operazione in corso: è il caso di [[Mac OS]] fino alla versione 9, o di Windows 3.0 e 3.1. Il vantaggio maggiore di questo metodo è che non ha bisogno di supporto hardware e si può implementare su ogni tipo di architettura. Il grave svantaggio è che un singolo programma che si rifiuta di cedere il controllo, o che si ferma per qualche errore, può bloccare l'intero computer, perché il sistema operativo non ha modo di riprendere il controllo da solo. Lo scheduler è in questo caso meno critico, perché il "quanto di tempo" durante il quale i programmi sono attivi è mediamente piuttosto lungo.
Esistono principalmente due tipi di multiprogrammazione:
* Tipo ''[[batch]]'': in cui non c'è [[interattività]] con l'[[utente]]. L'obiettivo di questo tipo di multiprogrammazione è sfruttare al meglio le risorse hardware disponibili. È una metodologia tipica dei primordi dell'informatica, periodo in cui la disponibilità di computer era bassa.
* Tipo ''[[time-sharing]]'': in cui si permette a più utenti di utilizzare contemporaneamente e interattivamente lo stesso [[Computer|sistema]], massimizzando la praticità d'uso, a scapito delle prestazioni.
 
Per ''grado di multiprogrammazione'' si indica la capacità di un sistema di poter eseguire più [[Processo (informatica)|processi]] in [[Memoria (informatica)|memoria]].
== Multitasking con prelazione (''preemptive'') ==
 
=== Multitasking senza prelazione (''cooperative'') ===
La prelazione è l'atto di interrompere un programma a prescindere dalla volontà del programma stesso, grazie a delle particolari strutture hardware integrate nel microprocessore che automatizzano il [[context switch]], il cambio di "ambiente" software dal nuovo al vecchio programma.
Detto anche multitasking ''cooperative'', in questo caso caso i programmi cedono volontariamente il controllo al sistema operativo una volta finita l'operazione in corso: è il caso di [[Mac OSmacOS]] fino alla versione [[Mac OS 9|9]], o di [[Windows 3.x|Windows 3.0 e 3.1]]. Il vantaggio maggiore di questo metodo è che non ha bisogno di supporto hardware e si può implementare su ogni tipo di architettura. Il grave svantaggio è che un singolo programma che si rifiuta di cedere il controllo, o che si ferma per qualche errore, può bloccare l'intero computer, perchéin quanto il sistema operativo non ha modo di riprendere il controllo da solo. Lo scheduler è in questo caso meno critico, perché il "quanto di tempo" durante il quale i programmi sono attivi è mediamente piuttosto lungo.
 
Più precisamente lo scheduler senza prelazione attua un cambio di contesto solo in circostanze quali:
Un multitasking con prelazione (''preemptive'') non può quindi essere implementato se la piattaforma hardware non mette a disposizione gli strumenti necessari, ma in compenso, grazie all'hardware, il cambio di contesto è molto più veloce favorendo l'adozione di quanti di tempo più piccoli, e una esecuzione più "fluida" dei vari processi. Lo scheduler deve quindi necessariamente essere più efficiente, pena il degrado delle prestazioni globali. Tuttavia in questo caso c'è una maggior separazione fra processi. Il preemptive multitask è stato adottato dalla maggior parte dei sistemi operativi moderni:
* il passaggio di un programma dallo stato di esecuzione allo stato di attesa;
* il termine del programma stesso.
 
=== Primi sistemi operativiMultitasking con multitaskingprelazione (''preemptive'') ===
La prelazione (o rilascio anticipato) è l'atto di interrompere un programma a prescindere dalla volontà del programma stesso, ciò avviene grazie a delle particolari strutture hardware integrate nel microprocessore che automatizzano il cambio di contesto (''[[context switch]],''): ilin cambioquesto dicaso "ambiente"non softwaresolo dallo nuovoscheduler alinterviene vecchionelle programma.circostanze previste da uno scheduler senza prelazione, ma anche in casi quali:
* il passaggio di un programma dallo stato di esecuzione allo stato di pronto per essere eseguito;
* il passaggio di un programma dallo stato di attesa allo stato di pronto per essere eseguito;
 
Un multitasking con prelazione (''preemptive'') non può quindi essere implementato se la piattaforma hardware non mette a disposizione gli strumenti necessari, ma in compenso, grazie all'hardware, il cambio di contesto è molto più veloceefficiente favorendo l'adozione di quanti di tempo più piccoli,regolari e una esecuzione più "fluida" dei vari processi. Lo scheduler deve quindi necessariamente essere più efficiente, pena il degrado delle prestazioni globali. Tuttavia in questo caso c'è una maggior separazione fra processi. Il'Full preemptive multitask'' è stato adottato dalla maggior parte dei sistemi operativi moderni:.
Il primo sistema operativo di larga diffusione ad adottare il multitasking preemptive fu [[AmigaOS]], nel [[1985]], quando [[Unix]] era ancora appannaggio delle università e dei grandi centri di calcolo. Poco prima erano già usciti due computer di successo inferiore, l'[[Apple Lisa]] e il [[Sinclair QL]]. L'Apple Lisa, computer a 16 bit di fascia alta, non ebbe successo perché Apple preferì concentrarsi sui Macintosh e sul multitasking cooperativo. Il Sincair QL (Quantum Leap) era un home/personal computer basato sul [[motorola 68008|68008]] ad 8 bit. Il SO del QL, chiamato QDOS, era avanti rispetto ai suoi tempi (aveva integrati un potente interprete basic, programmi di utility e produttività e una primitiva [[GUI]] a finestre), ma risultò fortemente viziato da bug, perché immesso sul mercato troppo in fretta nell'intento di contrastare l'assai pubblicizzata uscita del Macintosh. Successivamente i problemi furono risolti, ma Sinclair aveva già venduto la divisione computer ad [[Amstrad]] che preferì abbandonare il prodotto.
 
== Punto storico sui sistemi operativi multitasking preemptive ==
Negli anni '90 il multitasking preemptive conobbe vasta diffusione con i sistemi operativi ancora oggi utilizzati: [[Windows]] dalla versione ''Windows 95'' in poi, [[BeOS]], [[GNU Linux]] e le varie versioni di [[Unix]], ecc.
I primi sistemi operativi per [[Personal computer|personal e home computer]], a uscire sul mercato, che presentavano il multitasking preemptive, sono stati: [[Minix]], [[Xenix]], [[OS-9]] (tutti e tre derivati da [[Unix]]) e il [[Sinclair QDOS]] (che equipaggiava la macchina [[Sinclair QL]]).
 
Il Sinclair QL (da ''Quantum Leap'', ''[[salto quantico]]'') era un home/personal computer basato sul [[motorola 68008|68008]] a [[8 bit]]. Il suo sistema operativo, chiamato QDOS, era multitasking e multithreading e integrava un potente interprete basic, programmi di utility e produttività e una primitiva [[GUI]] a finestre; esso tuttavia fu inizialmente viziato da parecchi bug, perché immesso sul mercato troppo in fretta nell'intento di contrastare l'assai pubblicizzata uscita dell'[[Apple Macintosh]]. Addirittura il Sinclair QL venne presentato ufficialmente al pubblico senza che il sistema operativo fosse pronto, a causa delle difficoltà incontrate in fase di programmazione e testing. In seguito i problemi furono risolti, ma Sinclair aveva a quel punto già venduto la divisione computer ad [[Amstrad]], che preferì abbandonare il prodotto.
[[categoria:Sistemi operativi]]
 
Il QL ebbe poco successo e la sfortuna di essere l'ultimo computer semi-professionale a 8 bit a uscire sul mercato all'incirca nello stesso periodo in cui vennero presentati i nuovi sistemi a [[16 bit]] quali il [[PC IBM]] e i primi sistemi ibridi a 16/32 bit [[Macintosh]], [[Atari ST]] e [[Amiga]].
[[da:Multitasking]]
 
[[de:Multitasking]]
Quest'ultimo computer in particolare è stato il primo computer di larga diffusione sul mercato ad adottare il multitasking ''preemptive'' col suo [[AmigaOS]], nel 1985, quando [[Unix]] era ancora appannaggio delle università e dei grandi centri di calcolo.
[[en:Computer multitasking]]
 
[[es:Multitarea]]
AmigaOS ha dimostrato al grande pubblico la validità di un'architettura multitasking ''preemptive'', potenziata sia dall'aggiunta di un set di coprocessori dedicati alla grafica, al suono e soprattutto al controllo del [[Bus (informatica)|bus]] di memoria, sia dalla disponibilità di schede aggiuntive con capacità di [[Direct Memory Access]].
[[fi:Moniajo]]
 
[[fr:Multitâche]]
A tali coprocessori erano delegati i calcoli aggiuntivi e il controllo diretto delle periferiche, consentendo di ottenere ottime prestazioni anche con processori dal basso numero di clock, che potevano quindi essere totalmente disponibili ai programmi di gestione e di produttività e alle necessità dei comandi di sistema.
[[hu:Többfeladatos]]
 
[[ja:マルチタスク]]
Il meccanismo del multitasking ''preemptive'' su Amiga aveva modo così di essere immediatamente percepibile dall'utente, in prima battuta per via della relativa rapidità con cui il sistema veniva gestito, e in seconda battuta perché l'utente poteva vedere di persona i diversi programmi funzionare in concomitanza, grazie anche alla gestione particolare degli schermi multipli di Amiga. Quest'ultima caratteristica, unica al tempo, permetteva all'utente di avere sullo stesso monitor più schermi indipendenti e sovrapposti (anche con risoluzioni video diverse), che potevano essere alzati e abbassati con il [[mouse]], in modo da poter vedere più programmi a schermo pieno aggiornare in parallelo i propri schermi grafici.
[[nl:Multitasking]]
 
[[sv:Multikörning]]
Negli [[anni '901990]] il multitasking ''preemptive'' conobbe vasta diffusione sui personal computer con i sistemi operativi ancora oggi utilizzati: [[Microsoft Windows|Windows]] dalla versione ''[[Windows 95'']] in poi, [[BeOSOS/2]], [[GNU LinuxBeOS]], e lei varievari versionisistemi di[[Unix]] e [[Unix-like]], ecctra cui [[GNU/Linux]] e [[macOS]].
 
== Altri significati ==
In ambito psicologico per [[Paradigma del doppio compito|multitasking]], o ''mente da cavalletta'', si intende l'uso spasmodico di più dispositivi contemporaneamente<ref>https://www.stateofmind.it/multitasking/</ref><ref>https://www.interris.it/copertina/mente-cavalletta-disattenzione-superficialita-stress/</ref>.
 
== Note ==
<references/>
 
== Voci correlate ==
* [[Monotasking]]
* [[Pre-rilascio]]
* [[Multithreading]]
 
== Altri progetti ==
{{Interprogetto|wikt=multitasking}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{FOLDOC||multitasking}}
* {{Garzanti}}
 
{{Controllo di autorità}}
{{Portale|informatica}}
 
[[Categoria:Kernel]]
[[Categoria:Concorrenza]]