Linux

Linux Logo

Il termine Linux, a rigore, si dovrebbe riferire solo al kernel, un computer con Linux oltre al kernel contiene molto altro:

Questa collezione eterogenea di software costituisce un sistema GNU/Linux, ciascuno potrebbe mettersela insieme da solo, poiche' e' quasi tutta fatta con materiale "free"; cioe' liberamente reperibile su internet, ma si preferisce usare una distribuzione, che e' una "compilation" gia' fatta, contiene alcuni gigabyte di software, organizzato in modo coerente, ed e' venduta a costi contenuti da ditte specializzate. Le distribuzioni comprendono anche tools di configurazione e gestione del sistema, fatti apposta dal distributore, e manuali.
Ci sono decine di distribuzione, le piu' diffuse sono la Red-hat, La Suse, la Mandrake. Un caso a parte e' la Debian: una distribuzione non commerciale, fatta da volontari e del tutto gratuita.
Le distribuzioni mettono spesso a disposizione in rete versioni gratuite del loro sistema, e prevedono procedure per l'aggiornamento del sistema Linux via rete, distribuendo aggiornamenti e patch di sicurezza, certe riviste di informatica comprendono CD con distribuzioni Linux.
Recentemente sono anche disponibili "live CD" delle principali distribuzioni. Sono distribuzioni che contengono solo l'essenziale, stanno su un solo CD-ROM, "bootabile": inserendo il CD e "facendo il boot" dal CD si puo' provare la distribuzione, senza doverla installare, e senza scrivere nulla sui dischi. Il primo di questi "live CD" e' stato il Knoppix, ( vedi http://knopper.net ), di cui poi sono state prodotte innumerevoli varianti.

Caratteristiche principali di Linux



I dischi



I dischi sono organizzati in partizioni, viste come dischi indipendenti dal sistema:

Il file system





I files





Il file system globale



Il file system globale ha la seguente struttura, anche se possono esserci differenze fra una distribuzione e l'altra:

Partenza del sistema ed organizzazione dei processi





Processi utente e processi di sistema



Ci sono 2 modi operativi della CPU : user mode (o protected mode) e system mode, i processi di sistema sono eseguiti in system mode, quelli degli utenti in user mode, ed in questa modalita' non hanno accesso a risorse di sistema od a memoria al di fuori della loro memoria virtuale. Per indicare questi due modi operativi si parla anche di kernel-space ed user-space.

I processi utente che hanno bisogno di interagire con l'hardware (I/O od altro) utilizzano per questo chiamate a routines di sistema. Allora il processo si interrompe ed il controllo passa al kernel.

Un processo si interrompe anche quando gli arrivano particolari segnali da altri processi. Il comando kill puo' essere usato per mandare segnali ai processi, Es.:
kill -9 729 : manda il segnale 9 al processo con pid 729
Il segnale 9 fa terminare un processo.

L'hardware interagisce col sistema operativo tramite interrupts. La fine di un'operazione di I/O, il click del mouse etc. innescano meccanismi hardware che fanno arrivare un segnale di interrupt alla cpu ( per questo c'e' un apposito cip: l'interrupt controller); la cpu reagisce salvando i registri in un'apposita area di memoria ed eseguendo una routine in un'altra area predefinita (in dipendenza dal tipo di interrupt). Ogni dispositivo hardware ha il suo numero di interrupt (IRQ).

Quando un processo viene interrotto interviene lo scheduler, che in base a code di eventi decide a quale processo tocca la cpu, fra quelli pronti. Questo in base a complicati algoritmi basati su priorita'. L'utente puo' abbassare la priorita' di un suo processo (col comando nice oppure renice). Il passaggio della CPU da un processo ad un'altro e' detto context switch, comporta il salvataggio dei registri (es altri dati), per poter riprendere il processo da dove si era fermato.

SMP: simmetric multi process: sono sistemi con piu' cpu, in questi sistemi sono in esecuzione piu' processi contemporaneamente ( su diverse CPU) ci sono code usate dallo scheduler per assegnare i processi alle cpu libere.
Un processo quindi puo' correre ora su una cpu, ora su un'altra, ( ma sempre su una sola) Il kernel di Linux, che e' un processo monolitico, occupa anche lui sempre una cpu sola.

I processi sono quindi organizzato secondo il diagramma che segue, in una struttura a strati (layers): l'utente interagisce con la shell, via terminale od un'interfaccia grafica e tramite la schell fa partire i suoi processi ed accede al sistema; programmi utente e shell usano le system call, che lavorano in kernel mode; queste a loro volta si interfacciano con le diverse componenti del kernel, come gestione memoria, accesso ai files, device drivers, rete etc. Il kernel si interfaccia poi con l'hardware.

-----------------------------------------------------------
  diagramma generale:
  -----------------------------------------------------------
 
                           Utente 
		             | 
		           shell 
		             |
	programmi utente             accesso al sistema 	    

              |                             | 
                        
 .................... sopra user mode, sotto kernel mode ........
 
			 System Calls 
                              |
			      
  Memoria        Device drivers      Processi  File system    Rete 
  
  
                           Hardware