Processo (informatica)

attività di esecuzione di un programma
Versione del 1 ago 2005 alle 12:10 di Hce (discussione | contributi) (tolto thread da voci correlate, visto che è un redirect a questa stessa pagina :~})

In Informatica per processo si intende, intuitivamente, un programma in esecuzione. Non esiste una definizione rigorosa di processo.

Strutture dati relative al processo

Nel sistema operativo, ciascun processo è identificato da un numero detto PID (Process IDentifier).

Ad un processo in esecuzione sono associate alcune strutture dati

Processi e programmi

Un programma è costituito dal codice oggetto generato dalla compilazione del codice sorgente. Esso è un'entità statica, che rimane immutata. Un processo, invece, è un'entità dinamica, che dipende dai dati che vengono elaborati, dalle operazioni eseguite ecc. Il processo, quindi, oltre al codice oggetto è l'insieme di tutte le informazioni necessarie a definirne lo stato, come il program counter, lo stack, il contenuto dei registri del processore, i file e le periferiche in uso.

Stati di Un processo

 
Stati di un processo.

In un sistema operativo multitasking, ci sono più processi contemporaneamente in esecuzione. Di questi, al massimo un numero pari al numero di processori può avere effettivamente il controllo di un processore. Gli stati in cui un processo si può trovare sono:

  • esecuzione (running): il processo ha il controllo di un processore
  • pronto (ready): il processo è pronto ad essere eseguito, ed è in attesa che lo scheduler lo metta in esecuzione
  • bloccato (suspended): il processo ha eseguito una chiamata di sistema, ed è fermo in attesa del risultato

Con Commutazione di contesto si indica il meccanismo per cui 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 dei processi

Un processo può generare, attraverso apposite chiamate al sistema operativo, un processo figlio. Capita spesso, quindi, che un solo programma dia l'avvio a più processi.

Generalmente, il processo padre può proseguire la propria esecuzione concorrentemente con il figlio. Questo può comportare, in architetture multiprocessore (SMP), miglioramenti prestazionali grazie alll'esecuzione contemporanea dei processi.

In unix, tutti i processi sono generati, direttamente o indirettamente, da un processo speciale detto init, che viene creato al bootstrap del sistema operativo.

La creazione di un processo figlio può anche essere bloccante, ovvero il processo padre blocca la propria esecuzione fino a che non riceve dal sistema operativo un segnale che lo informa che il processo figlio è terminato, indicando il codice d'uscita, in genere un valore numerico, necessario per verificare se il processo figlio ha concluso l'esecuzione correttamente oppure risalire all'errore generato.

Thread

Per consentire ad un processo di eseguire contemporaneamente più compiti è stato introdotto il thread. Un thread è formato da una sequenza di istruzioni, da un program counter, dai registri. Condivide con gli altri thread dello stesso processo tutti gli altri dati che sono in comune, quale ad esempio la lista dei file allocati o delle periferiche, e la memoria. L'uso dei thread rende i programmi più responsivi per l'utente. Possiamo prendere ad esempio i browser. Un browser inizia il download di una pagina web ed inizia a visualizzarla. Quando trova un'immagine avvia un nuovo thread che si occupa di farne il rendering, mentre il thread principale continua a scaricare e visualizzare il testo. Un thread introduce meno overhead rispetto ad un processo aggiuntivo perché il passaggio dell'esecuzione da un thread ad un altro richiede meno risorse ma possiede meno meccanismi di protezione proprio perché condivide molte delle risorse.

Voci correlate