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#	UC2#<( 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#	UC2?( 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%oDopDvBnxn9Bk 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 n7Hp%vHn1k rw'uu9mx%pBr u%% } xCvBu%oD.spvHx<xCk l)<>u@m>n%j9x%u<l } niCr k n%vBn7ln7x?p%v nD%vBn } nxn%j'p p+\qH7u1z?z.qHn7p%r m:v>k9x.k l)'ul)k m:k %k9Ctp%r kXk <u<l } s9nx?p7xCk vHn9m>n. # G!#"$% ' 5 !#"#$&% '& H ) ¡9¢ £ ¤ ¡ ) ¥ VV¦ ¥ § ¢ ¨ ¨ © £ ¤ ¡ ) § ¡ ~ H ) ¡)¢ £ ¤ ¡ ) ¥ VV¦ ¥ § @¢ ¨ ¨ © £ ¤ ¡ ) § ¡ ¶%·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 l9ul)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?kp%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°HP±:²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