]> git.piffa.net Git - doc/.git/blob - source/sistemi.txt
Modified sistemi
[doc/.git] / source / sistemi.txt
1 =====================
2 Sistemi operativi
3 =====================
4 ---------------------------------------------
5 Appunti introduttivi ai sistemi operativi
6 ---------------------------------------------
7
8   :Author: Andrea Manni
9   :Copyright: GFDL
10   :Version: 1.51
11
12 .. contents:: Indice degli argomenti
13
14 Generato con: http://docutils.sourceforge.net/rst.html 
15
16 Appunti introduttivi alla trattazione dei sistemi operativi, le loro caratteristiche, componenti essenziali, tratti distintivi.
17
18 Sistema operativo
19 ==================
20
21 Il sistema operativo e' un software, ma per poter comprendere la funzione e il suo particolare rapporto con gli altri software disponibili sul vostro computer sara' prima necessario introdurre alcune sue caratteristiche e elementi distintivi.
22
23 Quando questi concetti saranno stati acquisiti verra' presentata una definizione *ragionevole* del termine "sistema operativo".
24
25
26 Concetti introduttivi
27 ----------------------
28
29 Un elaboratore e' una macchina in grado di seguire una serie di istruzioni al fine di permettere all'utente di raggiungere il risultato voluto. Possiamo partire da alcuni concetti di base per poterne studiare le caratteristiche.
30
31 Hardware:
32 ------------
33     Tutto quanto c'e' di *fisico* in un computer, quanto ha un peso (in senso materiale: grammi o kilogrammi) e occupa dello spazio. Il monitor, la tastiera, i supporti di storaggio dati, il computer stesso in ogni suo singolo componente interno e periferico sono l'**hardware** del computer, dall'inglese *ferraglia*.
34
35 Software:
36 ----------
37     Tutti i dati e i programmi (questi ultimi altro non sono che sequenze di istruzioni, quindi dati) che vengono elaborati o prodotti nel corso dell'esecuzione del programma. I software e i dati tipicamente risiedono su una memoria RAM volatile al momento dell'esecuzione, ma vengono archiviati sui *supporti di storaggio* (hard disk, CD-Rom, floppy...) in base alle necessita' del momento.
38
39 Input
40 ---------
41     I flussi di dati in ingresso inseriti  generalmente dall'utente tramite le perifieriche dedicate a queste funzioni. Tastiera e mouse sono perifieriche di *solo Input*, una scheda di rete invece e' una periferica che puo' ricevere e trasmette dati. Questi dati sono utilizzati per modificare il corso dei programmi, nel caso ci siano piu' programmi utilizzati contemporaneamente per raggiungere il risultato voluto dall'operatore potra' accadere che il nostro programma riceva Input da un altro programma. Nei sistemi operativi *Unix si fa riferimento allo **standard Input** (stdin, la sua collocazione piu' elementare in un sistema basato sul kernel \*Linux si basa sul device ``/dev/input`` ).
42
43 Output
44 ---------
45     I flussi di dati in uscita, normalmente i risultati aspettati dall'operatore. Tipiche periferiche di output dedicate sono i monitor, le casse audio, le stampanti. Come nel caso dell'input possiamo considerare periferiche come le schede di rete come di input/output. Nei sistemi operativi *Unix si fa riferimento allo **standard output** (stdout, fisicamente puo' essere dirottato sul diverse periferiche a seconda della natura dei dati (pensiamo a un file audio: verra' mandato alla scheda audio e da questa alle casse. Sarebbe poco significativo se visualizzato a schermo, e poco gradevole il caso inverso: ad es. telefonare a qualcuno e sentirsi rispondere da un FAX.) ma normalmente ci aspettiamo di vedere i risultati *a schermo*: sul nostro terminale ``/dev/tty*`` o equivalente. ).
46
47
48 Stdout verso un file::
49
50         ls -l > ls-l.txt
51
52 Stdout di un comando verso lo stdin di un altro comando (un pipe!)::
53
54         ls | toilet
55         
56 Stdout verso il primo teletype virtuale [ALT+F1]::
57
58         echo "Questo l'ho scritto io" > /dev/tty1
59
60         
61 Errors
62 ---------
63     Non sempre le nostre aspettative nei confronti dell'elebarotore vengono soddisfatte, talvolta il nostro programma genera errori e un risultato solo parziale. Nei sistemi *Unix questo tipo di *output* viene indicato come **standard error** (stderr) e puo' essere reindirizzato su una canale diverso dal normale output. Ad esempio suonando una serie di brani musicali l'output viene indirizzato fino alle casse del computer, ma se un brano risulta illeggibile viene visualizzato un errore a *schermo*. Situazione simile nel caso di una stampa: l'output va' alla stampante me se durante la stampa si generano messaggi di errore questi non compariranno sulla carta. 
64
65 Questa possibilita' di canalizzare lo stdout e lo stderr verra' utile in seguito quando si avra' l'esigenza di pianificare operazioni svolte in automatico (es. script di back-up) durante le quali l'operatore non e' disponibile per leggere gli errori, che potranno essere re-indirizzati su un file di log o altro.
66
67 Stderr verso un file::
68
69         ls non-esiste 2> error
70
71
72 Interfaccia utente
73 --------------------
74     Il sistema formato da periferiche (es tastiera e monitor) che permette lo scambio di informazioni tra l'utente e l'elaboratore. Tutti i sistemi multifunzione (cioe' che possono svolgere piu' di un singolo compito) sono dotati di una interfaccia utente. I sistemi *multi-pourpose* hanno interfacce utente piu' sofisticate rispetto alle macchine dedicate: ad es. un personal computer ha un'interfaccia utente piu' completa rispetto ad una console per videogiochi o a un cellulare. Le interfacce utente possono essere di diverso tipo:
75
76 Riga di comando
77 ~~~~~~~~~~~~~~~~
78
79 CLI (Common Line Interface). Interfaccia testuale: input e output sono solo o prevalentemente caratteri, quindi niente grafica, finestre, icone. E' ad esempio l'interfaccia che ci si trova davanti a un terminale \*Unix ( CTR + ALT + F1 sotto Gnu/Linux) oppure stabilendo una sessione remota con SSH o telnet.
80
81 Interfaccia grafica
82 ~~~~~~~~~~~~~~~~~~~~
83
84 Permette la visualizzazione di icone finestre e quant'altro, grazie ad un server grafico che trasforma le informazioni piu' semplici in una rappresentazione grafica. Generalmente piu' *pesante* dal punto di visto delle risorse di sistema del computer, permette di eseguire solo le operazioni espressamente previste e rese disponibili dai vari *menu*, a differenza della CLI che puo' permettere la combinazioni di singoli comandi (pipes) e la creazione di script per automatizzare operazioni anche di relativa complessita'. 
85
86 Generalmente si accompagna a un sistema di puntamento come un mouse, touch pad, tavoletta grafica. track ball...
87
88 La superiore complessita' la rende sconsigliabile per le sessioni remote, per lo meno quando e' possibile svolgere le stesse operazione tramite un'interfaccia CLI. Questo per non sottrarre risorse ai software di nostro interesse e per motivi di sicurezza (piu' una cosa e' complessa e piu' e' soggetta a problemi di sicurezza).
89
90 Touch screen
91 ~~~~~~~~~~~~~~~
92
93 Schermi sensibili al tocco, come su palmari, cellulari IPhone o i *tablet PC*. Le caratteristiche sono analoghe a una interfaccia grafica, cambia solo il sistema di puntamento (non avete un mouse o un  touch pad ma si tocca direttamente lo schermo con una penna o le dita).
94
95
96 Caratteristiche di un Sistema Operativo
97 ========================================
98    
99 Alcune delle caratteristiche dei sistemi operativi ci aiuteranno a capire la funzione prevalente di questo in rapporto con gli altri programmi in esecuzione sul computer.
100
101
102 Multitasking
103 -------------
104         Capacita' di un OS di eseguire piu' programmi contemporaneamente.
105
106 Un personal computer generalmente ha in esecuzione centinaia di singoli programmi (o per la precisione: *processi*), oltre a quelli direttamente lanciati dall'utente ce ne saranno altri dedicati alla gestione dell'hardware o al mantenimento del sistema operativo.
107
108 Una cellulare (si pensi ai vecchi modelli) o una piccola calcolatrice invece possono eseguire solo un compito (task) alla volta.
109
110 Tipicamente risiede nel kernel_ la capacita' del sistema di poter eseguire con stabilita' piu' processi, utilizzando uno scheduler_. 
111
112 .. _scheduler: http://it.wikipedia.org/wiki/Sistema_operativo#Scheduler
113
114 Multiutenza
115 --------------
116         I sistemi multiutenti possono avere piu' utenti attivi contemporaneamente (ma anche uno alla volta a seconda della disponibilita' di input). 
117
118 Il sistema e' comunque in grado di distinguere tra gli utenti: ad es. mia sorella non ha la possibilita' di eliminare le MIE foto, e viceversa. Per garantire una *vera* multiutenza sara' necessario un sistema di autenticazione per distinguere gli utenti, oltre a funzionalita' delegate al file system per limitare accessi ed esecuzione dei file ai diversi utenti di sistema. Ad esempio il filesystem FAT32_ dei vecchi sistemi Windows (e usato sulla maggior parte delle chiavette USB e  memory card varie) non permette la gestione della propieta' dei files.
119
120 .. _FAT32: http://it.wikipedia.org/wiki/FAT32#FAT32
121
122 La presenza di piu' utenti in genere porta a  una gerarchia tra questi (ad esempio *user, power user, administrator* sotto sistemi Windows o l'utente *root* per sistemi Unix). In genere si ha un solo utente abilitato alle modifiche delle funzionalita' del sistema (l'amministratore, che puo' abilitare le periferiche o installare nuovo software nel sistema) e semplici *utenti di sistema* (``system users``) che possono solo usufruire dei programmi messi a loro disposizione. Questa soluzione, oltre che a garantire la presenza di un account in grado di rimediare in caso di emergenza a eventuali errori fatti da altri, permette di avere un ambiente di lavoro piu' sicuro dato che una volta loggati come *utenti di sistema* non si ha la possibilita' di causare danni gravi all'intero sistema per una semplice distrazione. **Mai lavorare come amministratori quando non e' assolutamente necessario.**
123
124
125 Sistema operativo
126 ==================
127
128 Possiamo ora cercare di dare una definizione di sistema operativo:
129         Il Sistema Operativo (OS: Operative System) e' quell'insieme di software che servono per far funzionare il sistema *in generale* piu' che svolgere un compito particolare come modificare un file o visualizzare un video. E' l'*ambiente* in cui potranno convivere ed essere utilizzati tutti i software applicativi usati dall'utente.
130
131 Sara' il sistema operativo a identificare gli utenti al momento di cominciare una sessione di lavoro, e garantisce gli accessi ai files in base a queste credenziali (e alle caratteristiche del file system, cosa che approfondiremo successivamente). 
132
133 L'OS si pone poi come tramite tra i singoli applicativi e le risorse di sistema. Ad esempio se sono disponibili diversi programmi in grado di produrre stampe ma una sola stampante, sara' il sistema operativo a gestire le code di stampa in modo che non si intralcino (a dire il vero l'esempio potrebbe non essere tecnicamente esatto. Ma rende l'idea.) I singoli programmi non utilizzeranno direttamente la stampante, ma semplicemente si *interfacceranno* all'OS al momento della stampa.
134
135 Quando installiamo un nuovo editor di testo non ci preoccupiamo di fornirgli un *driver* per la stampa. Sappiamo che questo e' gia' disponibile al sistema operativo, e i singoli applicativi si appoggeranno a questo. Questo "*layer di astrazione*" sull'utilizzo delle periferiche (al quale partecipa anche il kernel) semplifica di molto la realizzazione e l'installazione dei singoli software, garantendo maggiore stabilita' all'intero *sistema*.
136 Lo stesso vale per alcune funzionalita' di base dei software identificabili nelle cosi' dette *librerie condivise* gestite dal sistema operativo e utilizzate da piu' applicativi, riducendo cosi' ridondanza, spazio utilizzato su disco, possibilita' di conflitti. 
137
138 In modo simile tutti gli applicativi che utilizziamo si *appoggiano* al sistema operativo, tanto che siamo abituati ad avere *versioni diverse* degli stessi software rilasciate per i *diversi sistemi* (c'e' una versione di Openoffice.org per sistemi Microsoft, Gnu\Linux, Apple e cosi' via). Ovviamente la versione per il sistema [#]_  ``X`` generalmente non funziona sul sistema ``Y``. 
139
140 .. [#] Sarebbe piu' corretto parlare di incompatibilita' tra i membri di famglie di sistemi operativi tra loro diversi, ma allo stato attuale delle nostre conoscenze non complichiamoci la vita: l'eseguibile di Openoffice.org per Windows non funziona su Gnu/Linux.
141
142 I sistemi operativi, come del resto i singoli applicativi, sono rilasciati (quando possibile) in versioni a 32 o 64 bit, oppure per architetture diverse (x86, PPC, Arm, RISC...). In genere si indica la possibilita' di un OS di *girare* su architetture hardware diverse col termine *portabilita'*. Una maggiore portabilita', oltre che per l'intrinseco vantaggio, e' spesso indice di maggiore stabilita' in quanto il test del sistema in ambienti diversi permette di evidenziare *bug* difficilmente riscontrabili altrimenti.
143
144
145 I vari Sistemi Operativi
146 ==========================
147
148 Per ulteriori informazioni sulle caratteristiche di alcuni dei sistemi operativi attualemnte in uso si seguano i seguenti link:
149
150 MS Windows
151 -----------
152
153  * http://it.wikipedia.org/wiki/Windows
154
155 Unix
156 -----
157
158 http://it.wikipedia.org/wiki/Unix
159
160 Gnu/Linux
161 ----------
162
163  * http://it.wikipedia.org/wiki/Gnu/Linux
164
165 BSD
166 ------
167
168  * http://it.wikipedia.org/wiki/Berkeley_Software_Distribution
169
170  * http://it.wikipedia.org/wiki/FreeBSD
171
172  * http://it.wikipedia.org/wiki/Openbsd
173
174 Apple Mac OS
175 --------------
176
177  * http://it.wikipedia.org/wiki/Mac_OS
178
179  * http://it.wikipedia.org/wiki/Mac_OS_X
180
181
182 Kernel
183 ========
184
185         In informatica, il **kernel** Costituisce il nucleo di un sistema operativo. Si tratta di un software avente il compito di fornire ai processi in esecuzione sull'elaboratore un accesso sicuro e controllato all'hardware. Dato che possono esserne eseguiti simultaneamente più di uno, il kernel ha anche la responsabilita'à di assegnare una porzione di tempo-macchina e di accesso all'hardware a ciascun programma (multitasking).
186
187 Tra tutti i processi in esecuzione su un computer uno ha un'importanza speciale: il kernel.
188
189 Il kernel ha il compito di far funzionare l'hardware (tastiera, monitor, RAM, CPU) e di attribuire le risorse di sistema agli altri processi, ne consegue che un malfunzionamento nel kernel (*kernel panic*) puo' compromettere qualunque altro processo in esecuzione. Considerando che il kernel gestisce anche le periferiche di input / output, nel caso di blocco del kernel l'intera macchina potrebbe diventare irraggiungibile. In questo caso l'unita soluzione sarebbe un *rese* hardware della scheda madre, con conseguente perdita di tutti i dati in 3 e possibile corruzione dei filesystem.
190
191 Il kernel gestisce l'attribuzione della memoria RAM tra i vari processi in esecuzione: tramite la protezione della memoria_ si evita che un applicativo andato fuori controllo possa trasbordare nello spazio RAM di un altro, compromettendo anche questo e magari l'intero sistema. La protezione della memoria e' una funzione necessaria per garantire l'efficenza del multitasking.
192
193 .. _memoria: http://it.wikipedia.org/wiki/Memoria_protetta
194
195 Debian utilizza un Kernel Linux. Windows attualmente usa un kernel di derivazione NT. Mac OSX utilizza un kernel "Darwin" su un sistema operativo derivato da BSD (Unix).
196 Il sistema operativo e' composto da una serie di processi che girano sopra il kernel. I software applicativi a loro volta girano sul sistema operativo.
197
198 Il kernel e' sostituibile e aggiornabile rispetto al sistema operativo.
199
200 ====================  =====================
201 Gnu/Linux                OS
202 Linux                    kernel
203 Microsoft Windows XP     OS
204 NT                      kernel di MS Windows XP
205 ====================  =====================
206
207 Le distribuzioni
208 ==================
209
210 Differenze principali tra le varie distribuzioni:
211         
212         * utility di installazione
213
214         * gestione dei pacchetti: es dpkg e RPM (portage e altri)
215
216         * numero e qualita' dei pacchetti
217
218         * licenze
219
220         * target di utilizzo
221
222         * tempi di rilascio
223
224  * http://it.wikipedia.org/wiki/Distribuzione_Linux
225
226  * http://it.wikipedia.org/wiki/Categoria:Distribuzioni_Linux
227
228 Memoria virtuale
229 ===================
230
231 O memoria di swap.
232 Si utilizza quando il sistema esaurisce la RAM fisicamente disponibile.
233 Si utilizza un altro supporto di storaggio per sopperire alla mancanza di RAM.
234 Tipicamente viene usato l'hard disk, che e' piu' lento della RAM.
235
236 Con il termine swap si intende, in informatica, l'estensione della capacita'à della memoria volatile complessiva del computer, oltre il limite imposto dalla quantita'à di RAM installata, attraverso l'utilizzo di uno spazio su un altro supporto fisico, ad esempio il disco fisso.
237
238 A seconda del sistema operativo utilizzato è possibile avere file di swap (chiamato anche 'Memoria virtuale'), residenti nel normale file system del sistema, oppure partizioni di swap, cioe'è sezioni di disco integralmente dedicate allo swap ed inizializzate con un proprio specifico tipo di file system. L'uso della partizione è generalmente migliore dal punto vista delle prestazioni, perché evita che lo swap vada soggetto alla  tipica di alcuni file system. Per contro, occupa una delle (poche) partizioni disponibili sul disco fisso.
239
240 In pratica, quando la memoria RAM libera non è più sufficiente per contenere tutte le informazioni che servono ai programmi, il sistema operativo si fa carico di spostare una certa quantita'à di dati (quelli meno recentemente utilizzati) dalla memoria volatile a quella di massa, liberando quindi una parte della RAM per permettere il corretto funzionamento dei programmi. È chiaro che nel momento in cui si rende necessaria tale operazione, le prestazioni del sistema crollano bruscamente, essendo la scrittura su hard disk molto più lenta di quella in RAM (oltre cento volte, al 2006).
241
242 Swap space per Linux
243 ----------------------
244
245 Sui sistemi basati sul kernel di Linux viene creata una partizione con un file-system dedicato per la memoria virtuale: una o piu' cosidette *partizioni di swap*.
246
247 Per le normali work-station si segue la regola di creare una partizione di swap pari al doppio della memoria RAM, ma non superiore a ``512MB`` (questo per via della buona ottimizzazione del gestore della memoria di Linux: raramente nell'uso normale si arriva ad aver bisogno di piu' di ``512MB`` di swap.
248
249 Caso particolare sono i portatili: vista la lentezza degli Hard Disk dei portatili e il maggior consumo elettrico causato dall'utilizzo di questi supporti per lo swap si tende ad avere un po' piu' di RAM (``512MB - 1GB``) ed evitare completamente lo spazio di swap. Ma attenzione: se si vuole utilizzare il *Suspend to disk* (S4_) servira' una partizione di swap pari a circa il doppio della RAM.
250
251 .. _S4: http://www.e-moka.net/2005/06/20/suspend-to-ramdisk-con-linux/ 
252
253
254 Devices a blocchi
255 ==================
256
257 I device a blocchi sono suddividisibili in blocchi (unita) ed e' possibile scrivere e/o leggere su questi (input/output) Ad esempio gli hard disk o i supporti di storaggio in generale sono visti dal kernel come block device. Tipicamente per poterli utilizzare al fine dello storaggio dati sara' necessario creare un filesystem su di essi.
258
259 Devices a caratteri (seriali)
260 ===============================
261
262 I device seriali sono continui, e non prevedono il "ritorno" (si pensi a una stampante, o all'output delle casse, a un terminale seriale) [#]_. 
263
264
265 .. [#] Questa definizione di device a *caratteri* non e' esatta, ma allo stato attuale delle nostre conoscenze e necessita' risulta piu' utile caratterizzare i due tipi di device dal punto di vista funzionale. Una definizione piu' *tecnica* di questo particolare tipo di device dovrebbe citare il fatto che questi in genere non supportano buffers_ e non permettono di accedere ai dati in modalita' random_access_. Oltre al fatto che trattano singoli caratteri per volta invece che per *blocchi* di dati.
266
267 .. _buffers:  http://it.wikipedia.org/wiki/Buffer_(informatica)
268
269 .. _random_access: http://en.wikipedia.org/wiki/Random_access
270
271
272 Dati
273 ======
274
275 Dato
276 --------
277
278 Il termine dati e' fondamentale nell'informatica, essendo i dati l'oggetto e il risultato di tutto il nostro lavoro.
279
280 Potremmo definire un dato come un'informazione elementare, significativa ed autonoma.
281
282 Si prenda ad esempio un sistema realizzato per gestire elettronicamente la contabilita': il guadagno del mese di Gennaio 2009 potrebbe essere ``1200``.  Oppure l'indirizzo di un contatto ``Via Mazzini 8``.
283
284 Questi *valori* possono essere l'oggetto di elaborazioni, o il risultato di procedure che hanno manipolato altri dati.
285
286 Metadato
287 ----------
288
289 I metadati sono informazioni che qualificano i dati. Essi non hanno un'esistenza e un valore autonomo, sono funzionali ai dati che descrivono e senza di essi non avrebbero valore.
290
291 Tornando al precedente esempio del software per la contabilita', ``Gennaio 2009`` potrebbe essere un metadato, in quanto la sua funzione e' di descrivere il periodo a cui fa riferimento il dato ``1200``. Senza quest'ultimo non ci interesserebbe sprecare risorse di storaggio per conservare ``Gennaio 2009``.
292
293 ========  ===============
294 Dato          Metadato
295 ========  ===============
296 1200       Gennaio 2009
297 ========  ===============
298
299 Spesso i metadati vengono utilizzati per stabilire le relazioni tra i vari dati, in modo da poterli caratterizzare e distinguere tra loro. Si pensi a un supporto di storaggio in cui vengano mantenuti terabytes di dati: senza la possibilita' di distinguerli l'uno dagli altri diventerebbero inutili (o meglio inutilizzabili), maggiore e' il numero dei dati tanto piu' si avverte la necessita' di caratterizzarli in modo da poterli *gestire* piu' facilmente e *incrociarli* tra loro in modo da ottenere le informazioni che veramente ci interessano.
300
301 Si tenga conto che buona parte dell'informatica consiste nello storaggio di *enormi* quantitativi di dati (che bisognera' essere in grado di distinguere e recuperare), e la funzione fondamentale degli elaboratori e' la capacita' di confrontare rapidamente questi dati tra loro. Quindi con l'aumentare del numero dei dati i metadati diventano sempre piu' importanti e *significativi*. Si pensi alla natura dei database_.
302
303 .. _database: http://it.wikipedia.org/wiki/Database
304
305 I filesystem
306 ===============
307
308 File
309 -------
310
311 Un file e' un insieme di dati  con un inizio e una fine identificabile in mezzo ad altri.
312
313 Quindi avremo:
314         * un identificatore, come un ``nome_file`` accoppiato al suo *percorso* sul file system: possono esserci molti file con lo stesso nome ma non possono esserci due file con lo stesso nome nella stessa cartella. Es:
315                 * /home/lisa/documento_testo
316                 * /home/bob/Desktop/documento_testo
317         
318         * Un qualche *sistema* per recuperare quel file in mezzo ad altri. Ad esempio potremmo pensare, in un sistema molto rudimentale, a una coppia di coordinate che ci permettano di identificare il punto di inizio e il termine della parte di dati di nostro interesse sul  block device su cui e' contenuto.
319
320 ====================== ========== ============
321      Filesytem elementare
322 ----------------------------------------------
323 Identificatore          inizio         fine
324 ====================== ========== ============
325 pippo                    12             21
326 ====================== ========== ============
327
328
329 Filesystem
330 ------------
331
332 Il file system e' una struttura logica che ci permette di individuare i diversi file. Sostanzialmente e' un'insieme di metadati che caratterizzano i singoli file piu' quanto necessario per poterli gestire.
333
334 Alcuni esempi: e' il filesytem a poter caratterizzare i file con propietari, gruppi, permessi (lettura, scrittura, esecuzione), data di creazione e cosi' via. Alcuni filesytem permettono certe funzionalita', altri (sopratutto quelli piu' datati) sono piu' *rudimentali*.
335
336 Tipicamente i filesystem sono strutturati secondo un modello gerarchico basato su *files e cartelle*: quindi per poter identificare un file ci serve il suo *nome proprio* piu' il suo *percorso* nella struttura del filesystem. Il progressivo aumento del numero dei files sta cominciando a far sentire i limiti di questo modello. 
337
338 Con l'aumentare delle informazioni tendono ad essere piu' efficaci modelli relazionali, che permettono di interagire coi file in modo simile a un database. Ad esempio pensiamo alle librerie che contengono centinaia di migliaia di brani musicali MP3, oppure migliaia di fotografie: cercare di gestirli tramite nome del file e cartelle diventa poco pratico. Meglio raggrupparli per autore, data, album o quant'altro si adatti alla loro natura e al loro utilizzo.
339
340
341
342 Tabella di allocazione files
343
344 non solo su device fisici: esempio NFS
345
346 File system distribuito: citati il NBD e ATA over ethernet
347
348
349 Gestione dei Pacchetti
350 ========================
351
352 Un Sistema di gestione dei pacchetti e' una collezione di strumenti che automatizzano il processo di installazione, aggiornamento, configurazione e rimozione dei pacchetti software di un computer. 
353
354 Tali strumenti sono diffusi tipicamenti sui sistemi basati su software libero, in quanto i gestori della distribuzione (cosidetti *mantainers*) avendo accesso al codice sorgente del software hanno la possibilita' di prepararne una versione ottimizzata e adattata all'infrastruttura del sistema operativo (si pensi a librerie condivise, API, standard per la collocazione dei files di importanza particolare). 
355
356 Cerchiamo di capire meglio il processo: L'autore / sviluppatore di un software (ad esempio un browser web come Mozilla Firefox) rilascia il suo lavoro con una licenza libera, che prevede la possibilita' di ottenere il codice sorgente, modificarlo e redistribuirlo. A questo punto un **mantainer** della distribuzione, che non deve per forza essere l'autore del software originale, scarica il sorgente, lo modifica in modo che si integri con gli altri software del sistema operativo, preoccupandosi che i file di configurazione, temporanei, ecc. vengano collocati sul file-system in modo analogo agli altri software del sistema operativo, in modo da ottenere un sistema il piu' possibile omogeneo e *strutturato*. Il mantainer quindi non introduce nuove funzionalita' nel software (per lo meno non nella distribuzione di cui si occupa, nel caso provvederebbe a fornire le modifiche all'autore in modo che sia lui stesse ad integrarle nella versione *ufficiale*, cosi' che poi anche chi non usa quella determinata distribuzione possa avantaggiarsene): si limita ad *adattarlo* perche possa ben funzionare nella distribuzione.
357
358 Quindi possiamo dire che un software come ad es. Apache o Firefox sono funzionalmente identici in ogni distribuzione, cambia solo il loro livello di integrazione nel sistema operativo. Come gia' detto le distribuzioni si caratterizzano per la *qualita'* di questa integrazione, il numero di pacchetti che mettono a disposizione, l'efficacia dei software di installazione / aggiornamento / rimozione. 
359
360 Non ultima per importanza: l'attenzione alle problematiche legate alla sicurezza. Infatti e' bene tener presente che sara' il mantainer a dover provvedere tempestivamente all'aggiornamento del pacchetto in caso di problemi di sicurezza, non essendo l'utente finale a interagire direttamente con l'autore del software. Il che puo' porre il seguente problema: quando l'autore rileva un problema tende spesso a risolverlo con una versione aggiornata del software (quindi si passa ad es dalla versione 1.0 alla 1.1 , e gia' che si rilascia magari si coglie l'occasione per introdurre nuove funzionalita'). Ma una distribuzione per essere definita *stabile* **deve** rimanere costante, altrimenti diventa impossibile controllare possibili conflitti tra i diversi software. In questo caso, i mantainers delle distribuzioni dedicate al *lato server* o comunque con particolare vocazione alla sicurezza, si attivano per *portare* i soli aggiornamente della sicurezza alla versione precedente del software in modo che eventuali nuove funzionalita' non possano rischiare di compromettere l'interazione del software con altri presenti sul sistema o creati dall'utente.
361
362 Distribuzioni come *Debian* lavorano in questo modo, altre preferiscono un approccio piu' *rilassato*: tipicamente perche' mettono a disposizione dell'utente software aggiornato piu' frequentemente, atteggiamento molto gradito sulle *work station* degli utenti che possono cosi' avvantaggiarsi piu' rapidamente di nuove funzionalita'. Se il software viene aggiornato *molto rapidamente* l'utente fianale non puo' aspettarsi che l'integrazione tra i vari pacchetti sia stata testata per lunghi periodi!
363
364 Cio' non toglie che gli utenti di Debian possano decidere di utilizzare le release *Sid/unstable* o *testing* che vengono aggiornate quotidianamente. Ma sulle macchine che vogliamo restino stabili senza creare problemi quotidianamente si puo' contare sulla versione *stable*, che garantisce due o tre anni di *ragionevole quiete senza sorprese*. Dal momento in cui si raggiunge la stabilita' del sistema con le funzionalita' richieste, in ambiente *aziendale* non si avverte la necessita' di avere sempre a disposizione l'ultima release disponibile di un software con la possibilita' che si possano verificare problemi. Un software appena rilasciato non puo' vantare stabilita': questa infatti  non e' un concetto *assoluto*: la stabilita' si ottiene facendo girare sempre la stessa versione del software  sul piu' ampio bacino di utenza disponibile in modo da poter individuare e risolvere gli eventuali problemi che mano a mano si individuano. La stabilita', per quanto riguarda il software  *consumer*, e' relativa (allo stesso modo la *sicurezza* non e' uno *status* ma piuttosto un *processo*: i problemi si possono sempre verificare, la differenza  sta nelle capacita' e tempi di reazione per risolverli con aggiornamenti, nelle precauzioni e test preliminari ritenuti necessari per poter introdurre nuove versioni dei software nel sistema).
365
366 I gestori di pacchetti principali sono tre:
367
368
369 ========= ================  ===========
370 Gestori di pacchetti
371 ---------------------------------------
372 Nome       Distro            estensione
373 ========= ================  ===========
374 DPKG_       Debian            .deb
375 RPM_        Red Hat            .rpm 
376 Portage_    Unix               ---
377 ========= ================  ===========
378
379 .. _DPKG: http://it.wikipedia.org/wiki/Dpkg
380 .. _RPM: http://it.wikipedia.org/wiki/RPM_Package_Manager
381 .. _Portage:    http://it.wikipedia.org/wiki/Portage
382
383 Lo stesso software viene pacchettizzato in *formati* diversi (deb,rpm,...)
384
385 In alternativa c'e' generalmente una versione binaria generica del software, che viene distribuita con un archivio (targz ). Questo non usufruisce delle agevolazioni e integrazioni offerte dal gestore dei pacchetti della distro.
386
387 In alternativa per tutto il software libero e' sempre disponibile il codice sorgente da compilare in un binario eseguibile. Permette l'ottimizzazione e la customizzazione del software. Portage si basa su questo sistema: si scaricano i sorgenti modificati e poi si compilano. Si faccia attenzione all'ottimizzazione: dipende da chi la fa...
388
389
390 Per la gestione dei pacchetti su distribuzioni Debian o derivate (quindi anche Ubuntu) si legga: l'Apt Howto = http://www.debian.org/doc/manuals/apt-howto/index.it.html
391
392
393 DPKG
394         Il gestore dei pacchetti. Il software che si occupa dell'istallazione, rimozione e risoluzione dei conflitti e dipendenze. Apt e' il *front-end* di DPKG.
395
396 Elementi:
397 ============
398
399 Dipendenze 
400 ------------
401 Talvolta un pacchetto per poter funzionare necessita di un altro pacchetto. Si deve quindi installare anche l'altro oltre a  quello richiesto.
402
403 Il software di installazione si preoccupa quindi dell'ordine in cui installare i vari pacchetti (dato che il pacchetto dovrebbe essere un'entita' indipendente / modulare rispetto agli altri pacchetti) e la configurazione di tutti e del sistema.
404 Per i pacchetti rimossi vengono tolte anche le dipendenze quando queste non compromettano altri software, in caso di incomprensioni si puo' usare il comando ``apt-get autoremove`` (su sistemi dotati di DPKG).
405
406 Si tenga presente che Debian, di default, quando rimuove un pacchetto non elimina i file di configurazione dello stesso, nel caso si deve usare l'opzione ``--purge``. In questo modo se l'utente rimuove un particolare software per provare un alternativa o liberare dello spazio temporaneamente, al momento opportuno re-installando lo stesso software questi si comportera' esattamente come quando era presente sul sistema. E' doverso far notare che in caso di problemi di configurazione di un programma l'idea di rimuoverlo per poi re-installarlo sia poco seria: i problemi vanno tracciati e risolti, non evitati. In caso contrario  ripeteranno. Piuttosto si faccia sempre un una copia di *back-up* del file di configurazione **prima** di cominciare a modificarlo, in modo che in caso non si riesca ad arrivare ad arrivare nei tempi richiesti ad una nuova configurazione funzionale si possa per lo meno tornare alla precedente.
407
408 Stessa cosa per la rimozione per dpkg, ma Portage non permette la rimozione di software.
409         
410 Conflitti
411 -----------
412
413 Alcuni software non possono essere presenti sul sistema contemporaneamente ad altri. Si pensi a un server di posta (o a qualunque servizio che ascolta su una porta determinata), o a versioni incompatibili dello *stesso* software. In questo caso il gestore di pacchetti avvertira' l'utente che al momento dell'installazione del software richiesto verranno rimossi i pacchetti in conflitto.
414
415
416