# Risorsa di sistema

In informatica, una risorsa di sistema è un qualsiasi componente fisico o virtuale che offra una certa funzionalità con disponibilità limitata all'interno di un sistema.

## Descrizione

Una risorsa è un elemento o componente, sia hardware, come la RAM o le periferiche I/O, sia software, come file, necessario al sistema.
Tali risorse vengono assegnate dal sistema operativo ai singoli processi in esecuzione su di esso, in modo che essi ne possano usufruire. Le risorse possono, però, sembrare insufficienti, in quanto sono di numero limitato rispetto ai processi che le richiedono ed è per questo che si può parlare di risorse “condivise”.

## Classificazioni

In informatica, le risorse sono soggette a varie classificazioni che possono riguardare la modalità di assegnazione e la tipologia di utilizzo.

### Classificazione per modalità di assegnazione

Le singole richieste possono essere assegnate ai processi tramite due modalità differenti:
* Modalità statica:
    Questo tipo di assegnazione avviene al momento della creazione del processo interessato e la risorsa rimane assegnata fino alla sua terminazione.
* Modalità dinamica:
    I processi richiedono una determinata risorsa in un qualunque momento della loro esistenza e si occupano di rilasciarla quando non è più necessaria.

### Classificazione in base alla tipologia di risorsa
#### In base alla mutua esclusività

Questa classificazione include due categorie:
* Le risorse seriali:
    tutte le risorse che non possono essere assegnate a più di un processo contemporaneamente (per esempio la stampante e il processore). In questo caso, i processi interessati non possono cooperare parallelamente sulla medesima risorsa. Ogni processo che vuole accedere alla specifica risorsa deve attendere che essa venga "rilasciata".
* Le risorse non seriali:
    Tutte le risorse che ammettono l’accesso a più processi contemporaneamente (per esempio i file di sola lettura).

#### In base alla modalità di utilizzo

Questa classificazione include due categorie:
* Risorse prerilasciabili (preemptable resource):
    questa tipologia di risorse può essere sottratta al processo interessato prima che esso abbia terminato di utilizzarle, senza creare effetti dannosi (un esempio è la memoria centrale).
* Risorse non prerilasciabili (no preemptable resource):
    una volta acquisite da un processo, non possono essere sottratte ad esso prima che l’esecuzione sia terminata (un esempio sono i masterizzatori CD).

## Assegnazione delle risorse

Per poter definire conclusa l’assegnazione di una risorsa ad uno specifico processo si devono sviluppare tre eventi:
* Richiesta della risorsa: il processo interessato si occupa di richiedere la risorsa di cui ha bisogno; se la richiesta non può essere soddisfatta perché la risorsa è già stata assegnata ad un altro processo, esso deve attendere finché non viene ‘rilasciata’.
* Utilizzo della risorsa: Una volta che riesce ad accedere alla risorsa, il processo può operare su di essa.
* Rilascio: Quando il processo termina di utilizzare la risorsa esso la rilascia, in modo da garantire l’utilizzo ad altri processi.
Il sistema operativo si occupa di gestire costantemente lo stato in cui si trovano le singole risorse.
Essendo le risorse in numero limitato, in alcuni casi ci troviamo di fronte a situazioni di stallo (deadlock), ovvero quando uno o più processi attendono il rilascio da parte di un altro processo che sta utilizzando la risorsa richiesta.

## Condivisione

Essendo le risorse di numero finito, spesso il sistema operativo attiva dei meccanismi di condivisione per i vari processi.
Tramite questi meccanismi, più processi possono operare sulla medesima risorsa ed effettuare uno scambio di informazioni utilizzando la medesima area di memoria, dove vengono inserite delle variabili all’interno delle quali sono memorizzati i risultati delle singole elaborazioni.
Ognuna delle operazioni sopra descritte è monitorata dal sistema operativo, il quale mette a disposizione di ciascuna risorsa un gestore, che ne regola l'utilizzo, e un protocollo che permette l'accesso alla risorsa.

## Tipologia

Generalmente le risorse informatiche possono essere classificate in:
* server, macchine che erogano un servizio a client;
* dispositivi di rete di ogni tipo (concentratori, bridge, router, gateway, ecc.);
* mezzi trasmissivi per reti locali e per reti geografiche (es. modem e banda).
* risorse fisiche identificabili su un calcolatore o altro apparato:
** tempo macchina (utilizzo della CPU, come per esempio il time-sharing);
** RAM e memoria virtuale;
** spazio libero sul disco;
* risorse logiche identificabili su un sistema operativo:
** processi;
** file aperti;
** socket;
** porte di un protocollo di trasporto (UDP, TCP);
* risorse di elaborazione:
** banda su una rete;
** capacità di elaborazione di un sistema informativo, (per esempio transazioni gestibili da un database, pagine servibili da un server web);
* risorse di alto livello:
** software di base e d'ambiente (sistemi operativi, database, packages, utilities, ecc.);
** risorse applicative in sistemi informatici;
** files e banche dati in sistemi informativi;
** risorse sul Web: rappresentano a livello logico tutte le fonti di informazioni e servizi disponibili in Rete, identificate dall'URL e fisicamente presenti e accessibili su web server tramite web browser dell'host client.