File

Transcript

File
 La storia
Il sistema operativo Linux e’ stato inizialmente creato da uno
studente, Linus Torvalds, all’ Universita’ di Elsinky in Finlandia.
Era il 1991 e debutto’ la release 0.02, la prima release stabile
arrivo’ nel 1994 con la 1.0.
Approfondimenti su Linux
Oggi
siamo
stabile
( )+* ,-.0
/2143 ,14arrivati
5&673 89* :alla
1;<49release
= = >?< @ @ A2A2A0
B C13 ,145 2.6.9
B D3 EF
Il codice del kernel e’ sviluppato e distribuito con GNU General
Public License; il codice sorgente e’ quindi pubblico
Inoltre sono stati sviluppati degli standard per documentare ed
uniformare struttura e codice di Linux: http://www.linuxbase.org
!#"#$&% '&
+ Il Kernel Linux
Il Kernel
Il kernel di linux consiste di diverse parti importanti:
la gestione dei processi, la gestione della memoria,
i driver per i dispositivi hardware, i driver per i filesystem,
la gestione della rete ed altre parti minori
Alcuni dei servizi software forniti dal kernel stesso hanno
proprietà simili, e possono dunque essere astratti in classi.
Ad esempio, i vari protocolli di rete sono stati astratti in
un'interfaccia di programmazione, la BSD socket library.
Un altro esempio è il livello filesystem virtuale(VFS),
che astrae le operazioni su filesystem, senza considerare la loro
implementazione.
a gestione dei processi crea i processi ed implementa il
multitasking cambiando il processo attivo sul processore.
La gestione della memoria si occupa di assegnare le aree di
memoria e di spazio di swap ai processi e a parti del kernel
Al livello più basso, il kernel contiene un driver per ciascun
dispositivo hardware che supporta.
# G!#"$% '
2
Ciascun tipo di filesystem fornisce un'implementazione di ogni
operazione; quando un'entità prova ad usare un filesystem, la
richiesta passa per il VFS, che la gira al driver opportuno .
3
!#"#$&% '&
4
+ defg
!""#%$'&)( *%$'#+( ,.- /01&)213'/45$'*%$76*% !98:( #<;%#9=>( $?( &"@#
%* AB;C( $#<;#%(9;%#6%( "@#7;%!D2E8:( ( FF!%AB#+G'#EA#@= = #@8H8:2!AH#D( I**98J
K?-H,%//LM0.NO?L%/3<;%#%GAP( Q*D;?#6%( "#;C(I**98"*%$@8:( #%$'#+( "*;.( "#1RH*1(A>( = #%AP( Q#%$98:(9&)2;%*96#8:AB*6)!%AP *%S;%#% *!;%#A")T9#
#&#U%2'#+( I**98>&V8>AH!G;%#%9&)( &V8>#%Q7!<*G#%A !98:( 6*.J.WX#%9"!9&*<;C(
Y9( $?2ZX[XY9-HY/\*<]3C^,XJ
_?-H *!;%#%A !%$")( !+( 9"!%A>( "!%Q#%$98>*<;%#%`@#%AH$#%9;C(Y9( $?2Z%a?")T'#
&)(9"@*%G%( !1( $1Q#%Q*%A>( !<#;<#&#)U.29#+(9"@*%$98>AH*% (9#+( AP( "*%$'*&")( Q#%$98>*;%#% T!%AH;?b!EAB#DG%A #&@#E$E8>#.J
c.M=>( $#"!%A>( "!%Q7#%$@8>*1( `9#%AP$9#%9#&#9UC2#<( G%AB*"#&&*<( $%( 8:a
G'!;%AH#7;.(@8:298 8:((G%AH*"@#)&&9( a.")T'#7U%#9&V8:( &"#1( 9"!%AP( "!%Q#%$98>*7;.(
8:2E8H8:(9UC (9!% 8:A>(G?AH*U%AH!%Q<Q<(9;%!7#&#9UC2?( AB#DG#A"*%Q7G? #98>!%A #1( I'**98J
hiCj%k9l9k lVm>n%opDqHj9m>n%rs'p7l)t?r r p1ou9m:snv>wupvHx1t%j<y.q hz<l)t1{h|
} u%j } t%k@i%nl~m:k vHn<r  sp%v x?€p%v n7x%n%r9l)k lVm>n%op.
‚r r  pƒƒ%k u<xCkt?j } u%o<„t9m>nvjuj }  …Dj?t%r r p1k j1{'‚†|‡nDjnllt?j
„%vHu9iCvBp%oDopD„vBnxn9ˆBk j%k m>u<x%p } p%v>k } pEvBn.
‰n1k lVm:vPtŠ)k u%j%k9l)t } u%onD„%vBu } nxn%v nDlu%j'uDj9n%r r p+on%ou%v>k p1ju%j
ƒu%r p9m:k r n<x%n%ry.q hz.‹Xk j } t?k ‹?ˆ>vHpDr n+k oD„'ulVm>pŠ)k u%j%k9x%n9ˆ>k j?k w?k r k
x%p%r r  t9m>n%j9m>n%‹ }  n%%r pDlVnŒ%tn%j'Šp7xn%k9x.k l)„'ul)k m:k ƒ%k9x%p1tlpvHnD„'nEvk r
wuu9m
Xn%ky.q hz1„%k Ž1vHn } n%j9m:k9…<„ulVl)k w?k r n7ˆHp%vHn1k rw'uu9m†x%pˆBr u%„„%‹
} xCvBu%oD‹.spvHx<xCk l)<‘>„u@m>n%j9x%u<l } niCr k n%vBn7ln7x?p%v nD„%vBn } nxn%j'Šp
p+’“\qH“”7u1z?•z.qH–n7p%r m:v>k9x.k l)„'ul)k m:k ƒ%k9ŒCtp%r k—Xk „<u<l } s9nx?p7xCk
vHn9m>n.
# G!#"$% '
5
!#"#$&% '&
˜™ šH› œ  ™ ž)Ÿ  ¡9¢ ™ £ ¤ ¡ œ ž)›  ™ ¥ ›VŸV¦ ¥ ™ Ÿ § Ÿ¢ Ÿ ¨ ¨ © £ ¤ ¡ œ ž)› § ™ ¡ Ÿ
˜~™ šH› œ  ™ ž)Ÿ  ¡)¢ ™ £ ¤ ¡ œ ž)›  ™ ¥ ›VŸV¦ ¥ ™ Ÿ § Ÿ@¢ Ÿ ¨ ¨ © £ ¤ ¡ œ ž)› § ™ ¡ Ÿ
¶%·X¸X¹º»
Boot sector e Master Boot Record
qHry.q hz } n%v } p%‹.jn%r r  u%vHx.k j'n } u%j9ˆ>k i.tvHp9m>u%‹.k rw'uu9ml@n } m>u%vl)t?k
x.k ƒn%vHl9k9xCk l9„ul)k m:k ƒ%k9xCkw'uu9m„%vBn)ƒ%k lVm:k 
¼½V¾ ½>¿HÀ9ÁÀÂE¾ Ã)Ä)Å ½V¾)Æ À)Ç@Â)Ä)ÅÈ:É@ÄÄ9½>ÄÊËÀ9Á9À̾ Æ9Í@À)À¿ ½>¿HÅ Ç)ÎÂ9Ä)ƽ¾ ½>¿ ÄEϵÇ
À)ÎÄ9Å Ç¿H¾ Ã9ÀÌÎ@Ä)ÅXÐV¾ Á)Ë@Ñ%Ò
Ó%˽V¾ ½P¿HÄ)Ͼ9ÔHÁ¿ Ä)Æ9Õ9Ç)½PÄÂ.ÒCÐVÔHÐPÖX×ØXÙ%Ú?Õ×%ÐVÖ?ÛCÜ.ÐVÔHÝC×'Ó9ÞEÓ%ÐVÔHÝ?Úß%×
Õ9ÖCÖ?à%ÐVÔHÝ.á
½:˽:¾ ½>¿ ÄϾ~ÛCÆ Î9ÉÇ%Ò?â†ÔHÐPÖá
½:˽:¾ ½>¿ ÄϾ@Ó%ÎÇ)Å È9ÒÓ%ÔHÐPÖã
à'Ë@¿ ¿H¾@ÂE¾@ä Ç¿ ¿ ÀĽ>Ä@ÊEË@À)Á9ÀÌÆ Ç½P¿HĽV½>Çä Ë)Á@å¾ À)Á9Ä)×'Ç)Æ È:Ë9Á)¾9æHÆ À9ÇÂÆ ¾ ÁÄ
½>ç½VÆ ¾ Á)Ë@Ñ)è.½VÀ)Á@ÀÌÎÅ ÀÊÅ Ç)ÏϾ9Ü.Ö.Ó7È:É9ÄĽVÄÊËÀ)Á9À¾ Æ9éVÄ)ÅHÁ@Ä)Æ
È>Ç)Å ¾ È>Ç)Á@ÂÀ)Æ ÀÂ)ÇË)Á9ÇÎÇ9Å ¿H¾ å¾ À)Á@ÄÌÜ?ÖXÓ%×Ç9Æ ¿HÅ ¾9½PÀ)Á9ÀÇÂ9Ç¿ ¿ ÇÏÄ9Á¿H¾Â¾
Ð:ÔHÐPÖ1ÈVÉÄ7Å ¾ ÊËÇÅ Â9Ç)Á@À½:¾ ½>¿ Ä)Ͼ9Á9À)ÁÍ@Ç)½PÇ¿ ¾@½:ËÎÅ À)ÈPĽV½>ÀÅ ¾9ÔHÁ@¿ Ä)Æ ã
´r ksp%vHx<xCk l)7s'p%j%ju<tjDw'uu9mlVn } m>uv†„'n%vXui%j?k„p%v m:k Š)k u%j'nDn
t?jDt?j%k } u+|µplVm n%vy?uu9mµ{?n } u%v xM‘>|y.{C– } s9nD…Dk r„%vPk ou+w'uu9m
ln } m>u%vXxn%r r  k jEm>n%vHu1spvHx<xCk l9?
z?n<l)k9nln9iCt9n1k rwuu9mxp1tjDs'p%v xDx.k l)‹.…1k r } uxCk } n } u%j@m>n%jtEm>u
j'n%r|y.{ } s'n7ƒ%k n%j'n7nlVni%t%k m>u.
ªP¡ œ « ¡¢ ™ ¦ £ ¦ ¬H­>®%£H¯P°H­>±V²V¬H£ ³V£
6
7
ª>¡ œ « ¡¢ ™ ¦ £ ¦ ¬H­>®?£ ¯P°H­P±:²V¬H£ ³:£
8
' C %'&)( *( +, ( **+-*( .&-/10-/,-2( 3'4/51+
I principali servizi: INIT
INIT
Il servizio più importante di un sistema UNIX è fornito da init.
init viene inizializzato come primo processo di ciascun sistema
UNIX, ed è l'ultima cosa che il kernel fa all'avvio.
67-89:;-97 <>= ;-?-@-ACBD@FEB7-7 @-B-E9-:<G?= 9;-9FAB-:= ABD@H= ;HIJ9IF@:= B
Il kernel di Linux è installato compresso, quindi per prima cosa si
decomprime. L'inizio dell'immagine del kernel contiene un
programmino che fa proprio questo
Init continua il processo di boot (controlla e monta i filesystem,
avvia i demoni ecc.), si assicura che stiano girando i processi di
getty multipli (per poter far collegare gli utenti), e adotta i processi
orfani
KGL-ACA9-MM= ?-BIJ9IF9;ND 9H= ;)= O= BP7 = OOBQ=?-B:=E9-?= A9FE:= ?-9:
RS L7 DT= IFBU@V-9: B-O= @;-9U9-M9-WL= DBXE)B7-89:;97B7 7 BJY= ;-9UE97ML-@
AB:= ABIJ9;D@JZ[= 7-7 B;-A= @UE97-V:\@-A9-MM@H= ;= DT<]= 7-V^B-EP:\9FEP=CDLDDT=-=
V):@-A9-MM= _
Quando il sistema viene spento, è init che deve uccidere tutti gli
altri processi, smontare i filesystem e fermare il processore
`>BXaGL9-MD@XIJ@IF9;ND@1DTLCDD@H= 7A@-EG= A9U9-M9-WL= D@H7 B-?-@:\B[= ;
L^M9:]MVB-A9[b= ;H8C9:;-97MV^BAC9[7 B-?-@: B;-@FM@7 @[= 7-89:;^979[=ML^@=
IJ@-EPL)7 = c'_
!"# $
9
) !"T# $T
10
' C I principali servizi
I principali servizi
Login
Syslog
Il login dai terminali (attraverso linee seriali) e dalla console (quando non
si sta usando X) vengono forniti dal programma getty. init avvia una
copia di getty per ogni terminale da cui sono consentiti i login.
Il kernel e molti programmi di sistema producono messaggi di
errore, di avvertimento e di altro tipo. Spesso è importante che
questi messaggi possano essere letti in un secondo tempo,
anche dopo parecchio, quindi devono essere scritti in un file.
Il programma getty legge il nome dell'utente e avvia il programma login,
che legge la password. Se il nome dell'utente e la password sono
corretti, login avvia la shell.
Quando la shell termina, cioè l'utente si scollega, o quando login termina
perché il nome dell'utente e la password non corrispondono, init lo nota,
e avvia un'altra copia di getty.
Il programma che lo fa è syslog, che può essere configurato per
distribuire i messaggi in file diversi a seconda di chi li genera o
del loro grado di importanza.
Ad esempio, i messaggi del kernel sono spesso rediretti in un file
separato dagli altri, dato che i messaggi del kernel spesso sono
più importanti e devono essere letti regolarmente per individuare i
problemi.
Il kernel non ha nozione dei login, che vengono tutti gestiti dai programmi
di sistema.
!"# $
11
) !"T# $T
12
' C I principali servizi
I principali servizi
Graphical User Interface – GUI
Cron e at
Sia gli utenti che gli amministratori di sistema hanno spesso
bisogno di avviare periodicamente dei comandi.
UNIX e Linux non hanno incorporata l'interfaccia utente nel
kernel; invece, la fanno implementare dai programmi a livello
utente.
Questo si applica sia per l'ambiente testuale che per quello
grafico.Questo modo di agire rende il sistema più flessibile, ma ha
lo svantaggio di facilitare l’implementazione di un'interfaccia
diversa per ciascun programma, rendendo il sistema più difficile
da imparare.
Ad esempio, l'amministratore di sistema potrebbe voler avviare un
programma che ripulisca le directory che contengono file temporanei
Il servizio di cron funziona proprio per questo. Ciascun utente ha
una crontab, dove elenca i comandi che vuole eseguire ed il
momento in cui farlo; il demone cron avvia poi i comandi nel
momento specificato.
L'ambiente grafico usato principalmente con Linux si chiama
Sistema X Window (in breve, X). X stesso non implementa
un'interfaccia utente, ma solo un sistema di primitive grafiche per
il tracciamento di finestre, cioè degli strumenti con cui
implementarle.
I tre stili più conosciuti in X sono Athena, Motif e Open Look.
Gnome usa GTK e kde usa QT
Il servizio at è simile a cron, ma vale per una sola volta: il
comando viene eseguito al momento indicato, ma non viene
ripetuto.
!"# $
13
) !"T# $T
14
' C I principali servizi
I principali servizi
Login in rete
File system condivisi
Ci sono diversi modi possibili per collegarsi attraverso una rete:
nelle reti di tipo TCP/IP troviamo: telnet, rlogin e ssh
Una delle cose più utili che possono essere fatte con i servizi di
rete è la condivisione di file attraverso un filesystem di rete.
Quello che viene usato di solito si chiama Network File System,
o NFS, ed è sviluppato dalla SUN.
Invece di un insieme di getty i login di rete usano un demone per
ciascuna modalità di collegamento che stanno in ascolto per i
tentativi di login in ingresso.
Con un filesystem di rete qualsiasi operazione su file fatta da un
programma su una macchina è spedita attraverso la rete ad un
altro computer.
Quando ricevono una richiesta di connessione, inizializzano una
copia di se stessi per gestire quel singolo tentativo; l'istanza
originale continua ad aspettare altre richieste.
Questo inganna il programma che utilizza i file considerandoli
locali, mentre in realtà risiedono su un computer remoto: un modo
semplice per la condivisione di informazioni, che non richiede
modifiche ai programmi.
La nuova istanza funziona in modo simile a getty.
!"# $
15
) !"T# $T
16
' C I principali servizi
La struttura del filesystem
La posta elettronica
Esiste uno standard dei filesystem Linux, FSSTD versione 1.2
che tenta di impostare uno standard per l'organizzazione
dell'albero delle directory nei sistemi Linux.
Ciascun utente ha una casella di posta in arrivo (un file nel
formato speciale) dove viene immagazzinata tutta la nuova posta
in arrivo. Quando qualcuno spedisce della posta, il programma di
posta ritrova la casella del destinatario e aggiunge il messaggio al
file.
Uno standard del genere ha il vantaggio di rendere piu’ agevole
la scrittura o il porting del software per Linux, e amministrare le
macchine Linux, poiche’ i file si troveranno nel posto designato.
Il sistema di posta e’ realizzato mediante svariati programmi. La
distribuzione a caselle locali o remote viene fatta da un
programma mail transfer agent o MTA (ad es. sendmail o smail),
mentre i programmi utilizzati dagli utenti sono molti e vari (ad es.
pine, elm, netscape).
Non c'è nessuna autorità che impone a nessuno di uniformarsi
allo standard, ma questo ha il supporto della maggior parte, se
non di tutte, le distribuzioni Linux.
Non è una buona idea rompere con lo standard FSSTND se non
per ragioni molto particolari. Il FSSTND tenta di seguire la
tradizione Unix e le tendenze più recenti, rendendo i sistemi Linux
familiari per chi ha esperienza con altri sistemi Unix, e viceversa.
Le caselle di posta vengono in genere tenute in /var/spool/mail
!"# $
17
) !"T# $T
18
' C La struttura del filesystem
La struttura del filesystem
Il filesystem root è specifico per ciascuna macchina (generalmente viene
immagazzinato su un disco locale, anche se può trattarsi di un ramdisk o
di un disco in rete) e contiene i file necessari per avviare il sistema e per
portarlo ad uno stato tale che possa montare gli altri filesystem.
La directory principale in genere non contiene nessun file, tranne
forse l'immagine standard di avvio per il sistema, che di solito si
chiama /vmlinuz. Tutti gli altri file sono in sottodirectory del
filesystem root
Il contenuto del filesystem di root sarà quindi sufficiente per la modalità a
singolo utente. Conterrà anche gli strumenti per recuperare un filesystem
danneggiato o copiare dai backup i file perduti. Il filesystem root
dovrebbe generalmente essere piccolo, dato che contiene file
estremamente critici, e un filesystem piccolo che viene modificato poco
ha migliori possibilità di non venire corrotto.
Un filesystem di root corrotto in genere significa che diventa impossibile
avviare il sistema tranne che con misure eccezionali (ad esempio da un
floppy), quindi è meglio non rischiare.
!"# $
19
) !"T# $T
20
' C La struttura del filesystem
La struttura del filesystem
/usr/local
/usr
Il filesystem /usr contiene tutti i comandi, le librerie, le pagine man e altri
file che non vengono modificati durante le normali operazioni.
Il filesystem /usr è spesso grande, dato che vi sono installati tutti
i programmi.
Nessun file in /usr dovrebbe essere specifico per nessuna macchina
data, né dovrebbe essere modificato durante il normale uso. Questo
permette che il file venga condiviso in rete, cosa che può portare ad un
risparmio economico dato che permette di risparmiare in spazio disco e
può rendere l'amministrazione molto più semplice (basta modificare solo
/usr principale quando si aggiorna un'applicazione, e non c'e’ bisogno di
farlo separatamente su ciascuna macchina).
Tutti i file in /usr vengono di solito da una distribuzione di Linux; i
programmi installati in locale e il resto vanno sotto /usr/local; in
questo modo è possibile aggiornare il sistema a una nuova
versione della distribuzione, o addirittura ad una distribuzione
completamente nuova, senza dover reinstallare tutti i programmi
da capo.
Anche se il filesystem si trova su un disco locale, può essere montato
con accesso a sola lettura, per diminuire le possibilità di corruzione
durante un crash.
!"# $
21
) !"T# $T
22
' C La struttura del filesystem
La struttura del filesystem
/var
/home
Il filesystem var contiene dei file che cambiano, come le
directory di spool (per la posta, le news, le stampanti eccetera), i
file di log, le pagine man formattate e i file temporanei..
Il filesystem /home contiene le home directory degli utenti, cioè
tutti i dati sul sistema.
contiene i dati che vengono modificati quando il sistema lavora
normalmente, è specifico per ciascun sistema, cioè non viene
condiviso in rete con altri computer.
Separare le home directory su un albero o su un filesystem
separato rende molto più semplici i backup: le altre parti in genere
non hanno bisogno di backup, o almeno non frequentemente
(cambiano poco nel tempo).
Una /home grande potrebbe dover essere separata in vari
filesystem, cosa che richiede l’aggiunta di sottolivelli, ad esempio
/home/students e /home/staff.
!"# $
23
) !"T# $T
24
' C La struttura del filesystem
La struttura del filesystem
/bin
Contiene i comandi necessari durante il boot del sistema che
possono anche essere usati dagli utenti normali dopo il boot.
/lib
Le librerie condivise necessarie ai programmi.
Molto importante e’ /lib/modules che contiene i moduli del kernel
caricabili, specialmente quelli che sono necessari per avviare il
sistema quando lo si sta recuperando da un problema (ad
esempio i driver di rete e dei filesystem).
/sbin
Come /bin, ma i comandi non sono intesi per gli utenti normali,
anche se questi li possono usare se necessario e se hanno i
permessi.
/tmp
I file temporanei. I programmi che vengono avviati dopo il boot
dovrebbero usare /var/tmp, non /tmp, dato che il primo si trova
probabilmente in un disco con più spazio.
/root
La home directory dell'utente root.
!"# $
25
) !"T# $T
26
' C La struttura del filesystem
La struttura del filesystem
/boot
/dev
La directory dev contiene degli speciali file di device, uno per
ciascun dispositivo. I file di device vengono chiamati usando delle
speciali convenzioni, che sono descritte nel'elenco dei dispositivi
I file usati dal boot manager, come LILO. Le immagini del kernel
spesso vengono tenute qui invece che nella directory root. Se ci
sono diverse immagini di kernel, la directory può facilmente
crescere parecchio, e spesso può essere meglio tenerla in un
filesystem separato.
I file di device vengono creati durante l'installazione, ma possono
essere creati anche in seguito usando lo script chiamato
MAKEDEV.
/mnt
Il punto di mount dove l'amministratore di sistema può montare
temporaneamente delle directory. /mnt può essere diviso in
sottodirectory (esempio /mnt/dosa può essere il floppy che usa un
filesystem MS-DOS, e /mnt/exta lo stesso con un filesystem ext2)
!"# $
27
) !"T# $T
28
La struttura del filesystem
/proc
Il filesystem /proc contiene un filesystem virtuale:
In realtà non è per niente un filesystem, anche se gli somiglia.
proc permette di avere facile accesso ad alcune strutture di dati
del kernel, come la lista dei processi (da cui il nome). Fa apparire
queste strutture di dati come un filesystem, e quel filesystem può
essere manipolato con i normali strumenti di manipolazione di
file.
!"# $
29