Old:Un kernel UNIX libero: Linux

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Emblem-important.png Attenzione. Questa guida è obsoleta. Viene mantenuta sul Wiki solo per motivi di natura storica e didattica.


Mi sono accorto che molti nuovi utenti di Linux vengono disorientati dal fatto di ritrovarsi per la prima volta a che fare con un S.O. di tipo UNIX, e spero di fare cosa utile trattando qui le principali caratteristiche di un tale sistema. L'articolo è ancora nel primo stadio di elaborazione, e chi volesse partecipare alla stesura è assolutamente il benvenuto ;-).

Cosa significa UNIX

Linux è un kernel UNIX-like, e questo di fatto sancisce delle regole ben precise che vengono rispettate in fase di progettazione del Sistema Operativo:

  • Il kernel è il nucleo software del sistema, e ha il compito di amministrare le risorse: un processo non può e non deve accedere all'hardware, ma dialoga solo con il kernel.
  • Ogni oggetto con cui è possibile interagire nel sistema è un file, e in quanto tale ha tutte e sole le caratteristiche dei file: un proprietario, un gruppo proprietario, dei permessi impostabili per lettura, scrittura ed esecuzione, e il metodo di interazione è unico.
  • altro..

Gestione della RAM

Un processo in esecuzione deve risiedere in RAM, e oltre al programma in sè vengono messe in RAM anche tutte le librerie a cui è linkato il programma.

Il kernel amministra le risorse del sistema e, in particolare, al lancio di un processo vede se c'è abbastanza RAM, e se no ne libera un po' (se può, altrimenti usa la swap, e se è finita anche quella dà errore).

Quando un processo viene terminato, non c'è necessariamente bisogno di liberare completamente la RAM occupata dal processo, anzi, c'è una certa probabilità che almeno le librerie condivise possano servire ad un altro programma, quindi il sistema operativo le mantiene in RAM finché non c'è la reale necessità di quello spazio.

Lo stesso concetto vale per i dati: la probabilità di utilizzare più volte parte degli stessi dati è più alta di quella di usarne sempre di diversi, quindi vengono cancellati dalla RAM solo quando ce n'è bisogno.

Questo significa "mantenere una cache".

Per verificare che funzioni, si può provare ad aprire Openoffice, per poi chiuderlo, e poi riaprirlo: si noterà che i tempi di apertura la prima e la seconda volta sono molto diversi.

Gestione dello swap

Sui kernel vanilla si può modificare la "facilità" con cui Linux usa lo swap. Questa proprietà si chiama swappiness ed il suo valore va da 0 (evita di usare swap) a 100 (usa lo swap il più possibile).

Per vedere quale valore è impostato basta dare:

# cat /proc/sys/vm/swappiness

mentre per impostare un valore basta dare: Linux

# echo 100 > /proc/sys/vm/swappiness

Notare che Andrew Morton consiglia di impostare la swappiness a 100 per migliorare le prestazioni del sistema. Anche se in alcuni casi particolari questo potrebbe portare ad attese più lunghe nello switching tra grosse applicazioni, si capisce che incrementare l'uso dello swap non significa diminuire le prestazioni ma ottimizzare la gestione della memoria.

Una soluzione a questi corner case in cui può esserci un'attesa più lunga del normale nello switching tra grosse applicazioni può essere usare le patch Con Kolivas. Queste patch implementano lo swap prefetching, ovvero il precaricamento dello swap non appena si libera della RAM. L'uso della RAM e dello stesso swap sembrerà aumentato ma le prestazioni interattive miglioreranno.