Programma (informatica)

Da Wikipedia, l'enciclopedia libera.
Codice ed esecuzione di un semplice programma dimostrativo (chiamato "Hello world") scritto in linguaggio Perl

Un programma per computer, o semplicemente programma, in informatica, è un software che può essere eseguito da un elaboratore per ricevere in input determinati dati di un problema automatizzabile e restituirne in output le (eventuali) soluzioni.

Creazione[modifica | modifica wikitesto]

Il problema deve essere risolvibile attraverso un algoritmo, affinché un programmatore possa codificarlo in istruzioni per il più adeguato linguaggio di programmazione. Questa fase è detta programmazione e dà vita al codice sorgente del programma.

Programma e software[modifica | modifica wikitesto]

Exquisite-kfind.png Lo stesso argomento in dettaglio: Software.

Il termine programma deve essere distinto da quello, più generico, di software; per programma si intende infatti un software che può essere caricato nella memoria RAM ed essere eseguito sotto forma di processo software includendo quindi quei programmi che girano in background ad esempio in un sistema operativo in esecuzione (ad es. librerie).

Analogamente sarebbe opportuno distinguere il termine "programma" dal termine applicazione, che viene usato normalmente nella prospettiva dell'utente finale per intendere un "servizio" di cui l'utente può usufruire, a prescindere dal fatto che questo sia realizzato da un programma solo o da una collezione di programmi (i programmi che girano su sistemi embedded non sono dunque applicazioni per l'utente, ma consentono comunque la funzionalità del dispositivo). In questo caso il programma applicativo si compone di un'interfaccia utente e di un nucleo elaborativo.[non chiaro]

Una considerazione analoga si può applicare all'espressione sistema software, usata di norma per indicare esplicitamente una collezione di componenti software (programmi, librerie, file e così via) interagenti. Quindi per "programma" si intende una sequenza logicamente ordinata di comandi, istruzioni ed operazioni.

Scrittura[modifica | modifica wikitesto]

Un programma per essere scritto deve rispettare la sintassi e la semantica del particolare linguaggio di programmazione scelto. Errori di scrittura vengono poi rilevati e segnalati in fase di compilazione o interpretazione. Il presupposto base per la corretta scrittura e funzionalità del programma, secondo le specifiche desiderate, è anche la corretta elaborazione a monte dell'algoritmo di risoluzione del problema da automatizzare.

Esecuzione[modifica | modifica wikitesto]

Un programma scritto in linguaggio assembly o in un linguaggio di programmazione ad alto livello (codice sorgente), può essere eseguito solo compilando il codice sorgente in codice oggetto ovvero traducendolo in linguaggio macchina che darà vita poi al programma eseguibile, oppure servendosi di un interprete.

Da parte del sistema operativo[modifica | modifica wikitesto]

Nella maggior parte dei computer moderni, basati sull'architettura di von Neumann, l'esecuzione di un programma binario prevede che, sotto l'attività e il controllo del sistema operativo, il programma stesso sia inizialmente caricato in memoria primaria (es. RAM), tipicamente a partire da una periferica di memoria di massa (o memoria secondaria), come ad esempio un disco rigido.

Viene quindi identificato il "punto d'ingresso" (entry point) del programma (cioè la prima istruzione), e il rispettivo indirizzo di memoria viene copiato in un registro del processore detto program counter.

A questo punto viene avviato nel processore, da parte dell'Unità di Controllo, un ciclo di fetch-execute che ripetutamente preleva l'istruzione "puntata" dal program counter, incrementa il program counter in modo da farlo puntare all'istruzione successiva, ed esegue l'istruzione caricata sequenzialmente nell'ordine. Si può osservare che il ciclo fetch-execute, per default, comporta dunque l'esecuzione sequenziale delle istruzioni del programma. L'istruzione corrente, tuttavia, può modificare il program counter: questa operazione corrisponde ad un'istruzione di salto goto o ad una di salto condizionato che è il meccanismo fondamentale su cui si basa l'implementazione delle strutture di controllo più evolute da parte di compilatori e interpreti.

Un programma in esecuzione è visto dal sistema operativo come un processo o insieme di processi, gestiti attraverso chiamate di sistema, e più programmi/processi possono essere eseguiti contemporaneamente attraverso l'eventuale multitasking offerto dal sistema operativo stesso e gestito dallo scheduler.

Da parte dell'hardware[modifica | modifica wikitesto]

Un programma scritto direttamente o convertito in linguaggio macchina può essere eseguito direttamente da un computer (inteso come hardware). L'esecuzione di codice da parte di una macchina hardware è possibile in virtù della capacità del processore di eseguire una serie di istruzioni base (instruction set), sulla quale il programma è mappato/tradotto a livello di linguaggio macchina, grazie ai circuiti elettronici di base (circuiti integrati) che compongono il processore stesso.

Dal punto di vista utente, nei calcolatori moderni questo normalmente avviene grazie all'esercizio, gestione o controllo delle risorse hardware (processore, memoria, ecc...) operata dal sistema operativo che funge da piattaforma software del sistema. L'unica eccezione si verifica al momento dell'accensione del computer, quando viene fatto il boot e viene eseguito il firmware che si occupa di testare l'elettronica e di caricare il sistema operativo. Una volta che il processo di boot ha passato il controllo al sistema operativo, nessun programma può essere eseguito direttamente dall'hardware.

Macchine virtuali[modifica | modifica wikitesto]

Al giorno d'oggi, è raro che un programma sia adatto all'esecuzione diretta da parte di un computer inteso come solo hardware; di norma, esso richiede una macchina virtuale che comprende l'hardware del computer con l'aggiunta di uno o più livelli di software che contribuiscono a creare l'ambiente di esecuzione adatto per il programma stesso. Gli stessi programmi eseguibili richiedono di norma la presenza di un determinato sistema operativo, di determinate librerie, e così via. Benché le linee generali del funzionamento di una macchina virtuale siano talvolta piuttosto simili a quelle descritte sopra per la macchina di von Neumann, in molti casi esse se ne discostano in maniera sostanziale, introducendo numerosi concetti non presenti in tale architettura (per esempio, lo stack dei record di attivazione). Si può dire che un linguaggio di programmazione è tanto più ad alto livello quanto più la corrispondente macchina virtuale esibisce caratteristiche concettualmente distanti dai meccanismi fondamentali dell'architettura di von Neumann (o, in generale, dell'architettura hardware sottostante).

Voci correlate[modifica | modifica wikitesto]

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

Controllo di autorità LCCN: (ENsh85029524 · GND: (DE4047394-6
Informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica