Processo (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Annullate le modifiche di 80.183.121.118 (discussione), riportata alla versione precedente di DoGior
Etichetta: Rollback
m Altri progetti: Aggiunto il parametro "Wikizionario (italiano)" nel template "Interprogetto"
 
(33 versioni intermedie di 21 utenti non mostrate)
Riga 1:
{{NN|informatica|gennaio 2024}}
Il '''processo''' (in [[lingua inglese|inglese]] '''process'''), in [[informatica]] è un'entità dinamica caricata su RAM generata da un [[programma (informatica)|programma]]. Esso è identificato da un codice univoco chiamato PID. Più precisamente, esso è una sequenza di attività ('''task''') controllata da un programma che si svolge su un processore in genere sotto la gestione o supervisione del rispettivo [[sistema operativo]] (ad esempio Windows o qualsiasi altra piattaforma, come i sistemi unix).
 
Il '''processo''' (in [[lingua inglese|inglese]] '''process'''), in [[informatica]] è un'entità dinamica caricata su memoria [[Random Access Memory|RAM]] generata da un [[programma (informatica)|programma]]. Esso è: identificato da un codice univoco chiamato PID., Piùpiù precisamente, esso è una sequenza di attività ('''task''') controllata da un programma ([[scheduler]]) che si svolge su un [[processore]] in genere sotto la gestione o supervisione del rispettivo [[sistema operativo]] (ad esempio Windows o qualsiasi altra piattaforma, come i sistemi unix).
Un processo può essere [[interattività|visibile all'utente]] (es. [[applicazione]]) durante la sua esecuzione oppure può essere eseguito in [[Esecuzione in background|background]]. Per visualizzare la lista di processi eseguiti su un [[computer]] e le relative [[risorsa informatica|risorse]] impiegate è possibile utilizzare un [[task manager]], mentre la ''gestione dei processi'' da parte del [[sistema operativo]] è affidata allo [[scheduler]] attraverso opportuni ''algoritmi di scheduling''.
 
Un processo puòPuò essere [[interattività|visibile all'utente]], (es.come nel caso di un’[[Applicazione (informatica)|applicazione]]) durante la sua [[esecuzione (informatica)|esecuzione]], oppure può essere eseguito in [[Esecuzione in background|background]].; Perper visualizzare la lista di processi eseguiti su un [[computer]] e le relative [[risorsa informatica|risorse]] impiegate è possibile utilizzare un [[task manager]], mentre la ''gestione dei processi'' da parte del [[sistema operativo]] è affidata allo [[scheduler]] attraverso opportuni ''algoritmi di scheduling''.
 
== Descrizione ==
Riga 13 ⟶ 15:
=== Processi e thread ===
{{vedi anche|Thread (informatica)}}
Il concetto di processo è associato, ma comunque distinto da quello di [[Thread (informatica)|thread]] (abbreviazione di '''thread of execution''', filo dell'esecuzione) con cui si intende invece l'unità granulare in cui un processo può essere suddiviso (''sottoprocesso'') e che può essere eseguito a divisione di tempo o in parallelo ad altri thread da parte del processore. In altre parole, un thread è una parte del processo che viene eseguita in maniera [[concorrenza (informatica)|concorrente]] ed indipendente internamente allo stato generale del processo stesso. Il termine inglese rende bene l'idea, in quanto si rifà visivamente al concetto di fune composta da vari fili attorcigliati: se la fune è il processo in esecuzione, allora i singoli fili che la compongono sono i thread.
 
Il concetto di processo è associato, ma comunque distinto da quello di [[Thread (informatica)|thread]] (abbreviazione di '''thread of execution''', filo dell'esecuzione) con cui si intende invece l'unità granulare in cui un processo può essere suddiviso (''sottoprocesso'') e che può essere eseguito a divisione di tempo o in parallelo ad altri thread da parte del processore. In altre parole, un thread è una parte del processo che viene eseguita in maniera [[concorrenza (informatica)|concorrente]] ed indipendente internamente allo stato generale del processo stesso. Il termine inglese rende bene l'idea, in quanto si rifà visivamente al concetto di fune composta da vari fili attorcigliati: se la fune è il processo in esecuzione, allora i singoli fili che la compongono sono i thread.
Un processo ha sempre almeno un thread (se stesso), ma in alcuni casi un processo può avere più thread che vengono eseguiti in parallelo.
 
Un processo ha sempre almeno un thread (se stesso), ma in alcuni casi un processo può avere più thread che vengono eseguiti in parallelo.
Una differenza sostanziale fra thread e processi consiste nel modo con cui essi condividono le risorse: mentre i processi sono di solito fra loro indipendenti, utilizzando diverse aree di memoria ed interagendo soltanto mediante appositi meccanismi di comunicazione messi a disposizione dal sistema, al contrario i thread di un processo tipicamente condividono le medesime [[informazioni di stato]], la memoria ed altre [[Risorsa informatica|risorse di sistema]].
 
L'altra differenza sostanziale è insita nel meccanismo di attivazione: la creazione di un nuovo processo è sempre onerosa per il sistema, in quanto devono essere allocate ovvero assegnate risorse necessarie alla sua esecuzione (allocazione di memoria, riferimenti alle periferiche, e così via, operazioni tipicamente onerose); il thread invece è parte di un processo e quindi una sua nuova attivazione viene effettuata in tempi ridottissimi a costi minimi.
Riga 27 ⟶ 29:
In un sistema che non supporta i thread, se si vuole eseguire contemporaneamente più volte lo stesso programma, è necessario creare più processi basati sullo stesso programma. Tale tecnica funziona, ma è dispendiosa di risorse, sia perché ogni processo deve allocare le proprie risorse, sia perché per comunicare tra i vari processi è necessario eseguire delle relativamente lente chiamate di sistema, sia perché la commutazione di contesto tra thread dello stesso processo è più veloce che tra thread di processi distinti.
 
Avendo più thread nello stesso processo, si può ottenere lo stesso risultato allocando una sola volta le risorse necessarie, e scambiando i dati tra i thread tramite la memoria del processo, che è accessibile a tutti i suoi thread. Un esempio di applicazione che può far uso di più thread è un [[web browser]], che usa un thread distinto per scaricare ogni immagine in una pagina Web che contiene più immagini.
 
Un esempio di applicazione che può far uso di più thread è un [[web browser]], che usa un thread distinto per scaricare ogni immagine in una pagina Web che contiene più immagini.
 
Un altro esempio è costituito dai processi [[server]], spesso chiamati ''servizi'' o ''[[demone (informatica)|daemon]]'', che possono rispondere contemporaneamente alle richieste provenienti da più utenti.
 
Riga 36 ⟶ 35:
 
=== Supporto del sistema operativo ===
{{vedi anche|Scheduler|Interrupt|Polling (informatica)|Deadlock|Starvation}}
 
I sistemi operativi si classificano nel seguente modo in base al supporto che offrono a processi e thread:
* ''[[Monotasking]]'': non sono supportati né processi né thread; si può lanciare un solo programma per volta.
Riga 47 ⟶ 48:
 
=== Thread e handle ===
Nel [[sistema operativo]], ciascun processo è identificato da un numero, detto '''[[PID (Unix)|PID]]''' ('''P'''rocessProcess '''ID'''entifierIDentifier) oppure "process handle".
 
Nel [[sistema operativo]], ciascun processo è identificato da un numero, detto '''[[PID (Unix)|PID]]''' ('''P'''rocess '''ID'''entifier) oppure "process handle".
 
Ad un processo sono associate le seguenti [[struttura dati|strutture dati]]:
Riga 56:
* Uno o più thread.
 
L'insieme di tali informazioni è raccolto o indicizzato da una struttura, unica per ogni processo, detta '''[[process control block]]''' (abbreviata in '''PCB'''). A loro volta, tutti i PCB sono elencati in una struttura detta '''process table'''.
 
Se il sistema operativo gestisce i thread, anche ciascun thread è identificato da un numero, detto '''TID''' ('''T'''hreadThread '''ID'''entifierIDentifier) oppure "thread handle". Un '''handle''' (lett. "maniglia") è un riferimento codificato che consente ad un thread di accedere alle entità (oggetti) del sistema operativo. In pratica, gli handle sono identificatori astratti che facilitano la manipolazione (da parte dei thread dei vari processi) dei componenti del sistema (kernel in primis): sono come gli ID dei ticket. Il numero degli handle attivi (cioè quelli che sono utilizzati dai thread), in un determinato istante, è visualizzabile insieme al numero dei thread e dei processi in esecuzione.
 
Ad un thread sono associate le seguenti [[struttura dati|strutture dati]]:
* Lo [[Pila (informatica)|stack]] delle chiamate di [[funzione (informatica)|funzione]].
* I registri del processore, tra cui il [[program counter]].
 
Riga 72:
 
Gli stati in cui un processo si può trovare sono:
* ''esecuzione'' (''running''): il processo ha il controllo di un processore;
 
* '''esecuzione'pronto'' ('''running'ready''): il processo haè ilpronto controlload diessere uneseguito, processoreed è in attesa che lo [[scheduler]] lo metta in esecuzione;
* ''in attesa'' o ''sospeso'' o 'pronto'bloccato'' (''suspended'ready' o ''blocked''): il processo èha prontoeseguito aduna essere[[chiamata eseguito,di sistema]] ed è fermo in attesa che lo [[scheduler]] lo metta indel esecuzionerisultato;
* '''in attesa''' o ''sospeso'' o ''bloccato'' ('''suspended''' o '''blocked'''): il processo ha eseguito una [[chiamata di sistema]] ed è fermo in attesa del risultato;
 
Con [[commutazione di contesto]] (''Context switch'') si indica il meccanismo tramite il quale un processo in esecuzione viene fermato (perché ha eseguito una [[chiamata di sistema]] o perché lo scheduler ha deciso di eseguire un altro processo), e un altro pronto viene messo in esecuzione.
 
=== Genesi di processi e thread ===
Al [[Boot|bootstrap]] del sistema operativo ci sono in esecuzione uno o più processi creati dal sistema operativo stesso. Durante l'avvio del sistema, in base alla configurazione, possono essere creati numerosi processi. Durante la normale operatività, in base alle richieste degli utenti, possono essere creati nuovi processi e altri possono terminare. Quando il sistema operativo inizia l'esecuzione di un programma, crea un processo dotato di un solo thread. Durante l'esecuzione di tale thread, detto thread principale, il codice può creare altri thread o altri processi con apposite [[chiamata di sistema|chiamate di sistema]].
 
Al [[Boot|bootstrap]] del sistema operativo ci sono in esecuzione uno o più processi creati dal sistema operativo stesso. Durante l'avvio del sistema, in base alla configurazione, possono essere creati numerosi processi. Durante la normale operatività, in base alle richieste degli utenti, possono essere creati nuovi processi e altri possono terminare.
 
Quando il sistema operativo inizia l'esecuzione di un programma, crea un processo dotato di un solo thread. Durante l'esecuzione di tale thread, detto thread principale, il codice può creare altri thread o altri processi con apposite [[chiamata di sistema|chiamate di sistema]].
 
La creazione di un processo differisce tra i vari sistemi operativi. In ambiente [[Windows]], si usa la chiamata di sistema "CreateProcess", con cui si specifica il nome del file contenente il programma eseguibile; tale file viene caricato in memoria ed eseguito. In ambiente [[Unix]], si usa la chiamata di sistema "[[fork (programmazione)|fork]]" per creare un nuovo [[processo figlio]] identico al chiamante ([[processo padre]]) eccetto che per il valore reso dalla chiamata stessa; e si usa poi la chiamata "exec" in uno dei due per caricare il codice eseguibile di un nuovo programma nel processo corrente, e mandarlo in esecuzione.
Riga 100 ⟶ 96:
 
== Voci correlate==
* [[Ciclo macchina]]
* [[Clock]]
* [[InterruptInit]]
* [[Interrupt request]]
* [[Kernel]]
* [[Multitasking]]
* [[Multithreading]]
* [[Oggetto (informatica)]]
* [[Sistema operativo]]
* [[Scheduler]]
* [[Task manager]]
* [[Thread (informatica)]]
* [[Unlocker]]
 
* [[Deadlock]]
== Altri progetti ==
* [[Starvation]]
{{Interprogetto|preposizione=sul|wikt=processo}}
* [[Processo zombie]]
 
* [[Init]]
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{FOLDOC|process|process}}
 
{{Controllo di autorità}}