Sistemi Operativi - robertomana.it

Pagina creata da Chiara Volpe
 
CONTINUA A LEGGERE
Sistemi Operativi - robertomana.it
Sistemi - Classe Quarta                                                   robertomana.it
                                        Sistemi Operativi

                                Sistemi Operativi
                                                                        Rev. Digitale 1.0 del 01/09/2016

Architettura dei Sistemi Operativi ……………………………..………...              2
Introduzione ……………………….………………………………..………                            2
Classificazione ed evoluzione dei Sistemi Operativi ……..………………….    3
Il Kernel di un SO : il modello Onion Skin ……..……………..…………….        4
Interrupt e System Call ……..……………..………………………………….                   6
SO monolitici e microkernel ……..……....………………………………….                7

La Gestione delle Memorie di Massa : il File System ……….………...      9
Formattazione Fsica ………….……….………………………………….                         9
Codici di Rilevazione e Correzione degli errori .………………………….        9
Partizionamento………………………………….………………………….                           11
Formattazione Logica: il File System …………………………………….               12
Il File System Manager …………………………………….……...………                     13
La Gestione dei volumi …………………………………….……...………                     14
La Gestione fisica dei files ………………………………….……...………                16
FAT ………………………………………………..……….……...………                               17
EXT2 / EXT3 ………………..……………………..……….……...………                         20
NTFS …………..…………………………………..……….……...………                             22
ISO 9660 …………..………………………………..……….……...………                          23

La Gestione dei Processi …………………….…………………..………...                  24
Gli Stati di un processo …………....………………………………..………                 25
Le tre tipologie di scheduler ……....………………………………..………              26
Algoritmi di scheduling dei processi …...…………………………..………           28
Thread ……....………..………………………..…………………..………                          31
Cenni sugli schedulatori nei principali SO …………………………………           32
Inter Process Comunication ……………….…………………..………...                  33
Sezioni critiche e Mutua Esclusione ……..……………….………..………            33
Semafori e Primitive semaforiche ……....…………………..……..………            35
La Sincronizzazione fra processi …………..……….……………..………              37
Shared Memory ……....………..……………....…………………..………                     38
Deadlock ……....………..……………....…………………………..………                       40

La Gestione della Memoria ……………….…………………..…………...                  41
Tecniche di allocazione contigua ……..…………………………...………              42
Allocazione non contigua: paginazione ……..……………………...………           43
Allocazione non contigua Segmentazione paginata …...…………….……       44
Paginazione dinamica …....…………………………………………………                      45
Strategie di paginazione dinamica …...……………………………….……              46
Gestione delle memorie cache ……………………………………………...                  49
Gestione della memoria nell‟architettura IA32 ……..…………..………...     50

La Gestione delle Periferiche …………….…………………..…………... 53
Accesso diretto e accesso tramite Device Driver ……..…………...……… 54
Device Driver di tipo concorrente ………………………………………….. 56
La comunicazione seriale ………………………………………………….. 58
Gestione della porta seriale in dot Net …………………………………….. 60

                                                                                                  pag 1
Sistemi - Classe Quarta                                                                      robertomana.it
                                                Sistemi Operativi

                                Architettura dei Sistemi Operativi
Definizione di Processo
Si definisce processo l’istanza di un programma caricato in memoria centrale e in esecuzione su un certo
insieme di dati. Ogni programma può generare più processi indipendenti (tramite le funzione fork o spawn).
Istanza significa allocazione dinamica (in continua evoluzione) di un programma, che viceversa è una entità statica.
Due istanze di word aperte su file differenti possono essere viste come due processi separati.
I termini task e job sono sinonimi di processo. Il processore è il dispositivo che esegue il processo.

Definizione di File
Archivio elettronico, cioè archivio di dati memorizzati su un supporto elettronico (memoria di massa).

Definizione di Risorsa
Si definisce risorsa di un computer un qualunque componente hardware e software che può essere utilizzato da un
processo in esecuzione e che ne condiziona l‟avanzamento (CPU, memoria, dispositivi di IO e relativi driver, ma
anche, ad esempio, i files di un disco).

Definizione di Sistema Operativo (SO)
Il SO un software di base mirato alla gestione delle risorse hw e sw presenti un personal computer, facendo in
modo che un utente possa utilizzare la macchina nel modo più semplice ed efficiente possibile.
Il SO, mediante un vasto insieme di funzioni e procedure, esegue una virtualizzazione della macchina, mostrando
all‟utente una machina virtuale “più bella” e molto più semplice, i cui componenti sono simulati sulla base del
calcolatore reale. Più in dettaglio si possono individuare i seguenti obiettivi fondamentali:
     Gestione delle risorse hardware della macchina mostrando all‟utente un’immagine astratta delle risorse
      disponibili, nascondendo i dettagli dell‟hardware ed esponendo un insieme di funzioni dette primitive (es le
      API di Windows) che il programmatore può utilizzare nei suoi programmi. Grazie all‟astrazione realizzata dal
      SO, due macchine utilizzanti hardware differenti ma lo stesso SO sono viste dall‟utente allo stesso modo.
      Questo costituisce il primo passo verso la portabilità dei programmi. Modifiche o upgrade sull‟hardware
      (cambio di monitor, stampante, modem, HD) vengono “assorbite” dal SO senza modifica delle applicazioni.
     Gestione delle applicazioni utente : dal caricamento dei programmi in memoria alla loro esecuzione, evitando
      che un processo possa accedere ad aree di memorie esterne rispetto a quelle di sua competenza, ed evitando
      eventuali conflitti fra processi che tentano di utilizzare una medesima risorsa (ad esempio devono entrambi
      accedere alla stampante o ad uno stesso file).
     Implementazione di una interfaccia utente semplice e funzionale, attraverso la quale l‟utente possa interagire
      con il SO (e quindi con la macchina) ed inviare i propri comandi all’interprete dei comandi del SO (in
      inglese shell). L‟interfaccia utente può essere
      - di tipo CLI (Command Line Interface) cioè a linea di comando, es DOS, sessioni TTY di Linux)
      - di tipo GUI (Graphical User Interface) cioè tale da consentire l‟accesso al sistema tramite un insieme di
         elementi grafici (finestre, icone e menù) con il puntamento mediante mouse. Sono oggi sempre più ricche di
         funzionalità e user friendly, cioè facili da usare, anche da parte di personale non specializzato.
     Realizzazione di un meccanismo di protezione e sicurezza nell‟accesso ai dati. Ogni utente deve poter
      accedere ai propri dati con la possibilità di concedere/ negare l‟accesso anche agli altri.
Poiché un SO non può conoscere a priori i dettagli hardware di ogni possibile dispositivo presente sul mercato, è
indispensabile che ogni dispositivo sia dotato di un apposito software denominato “device driver” (pilota del
dispositivo) e che il SO, in qualunque momento, possa essere “ampliato” con l‟installazione di un nuovo driver. Il SO
deve essere in grado di installare correttamente il driver in modo tale che non si creino conflitti con dispositivi
preesistenti, assegnandogli ad esempio un numero di interrupt libero ed aggiornando la propria Interrupt Vector Table

                                                                                                                 pag 2
Sistemi - Classe Quarta                                                                       robertomana.it
                                                Sistemi Operativi

Portabilità di un programma
Un software si dice portabile quando può essere compilato ed eseguito indipendentemente sia dalla
piattaforma hardware sottostante, sia dal SO stesso.
       L‟indipendenza dell‟hardware viene assicurata dal SO: i software applicativi non comunicano con l‟hardware
        ma con il SO
       L‟indipendenza del SO è più difficile da realizzare. Occorre che i vari SO mettano a disposizione delle
        applicazioni client le stesse chiamate di sistema (detta System Call), realizzate internamente in modo
        differente, ma che presentano al programma sorgente (testuale) la stessa firma. Il primo esempio di software
        portabile è stato JAVA che ha introdotto il concetto di un ulteriore substrato di interfacciamento fra
        Applicazione utente e SO, cioè la Virtual Java Machine. Per poter eseguire un programma JAVA su una
        certa macchina occorre installare sulla macchina la Virtual Java Machine relativa al SO in uso e che con esso
        si interfaccia. Dopo di che l‟applicazione finale non comunica più con il SO, ma soltanto con la Virtual Java
        Machine, che gli espone le stesse primitive di interfacciamento in modo indipendente dal SO sottostante

Classificazione ed evoluzione dei SO

Sistemi Dedicati
I sistemi di elaborazione, nella loro struttura iniziale, erano in grado di gestire un solo processo per volta,
completamente residente in memoria a cui erano destinate tutte le risorse a disposizione. Il SO ha lo scopo di gestire
caricamento, inizializzazione e terminazione del programma, oltre che fornire supporto base per l‟accesso
all‟hardware. Anche i primi Personal Computer erano sistemi dedicati (ms DOS), mono utente e single task.

Sistemi Batch Sequenziali
Fin dagli anni 60 apparve evidente che era inaccettabile che un sistema di elaborazione dal costo estremamente
elevato fosse a disposizione di un unico utilizzatore che occupava tempo macchina con lunghe e onerose procedure di
caricamento del programma. Nacquero così i primi sistemi batch, cioè sistemi di elaborazione a lotti, in cui i vari
lavori (job) caricati tramite schede da utenti diversi (ciascuno con il proprio UID), venivano poi uno alla volta
caricati in memoria centrale dal SO ed eseguiti in rigida sequenza.
Se un job andava in errore veniva terminato e si passava immediatamente al job successivo. L‟utente non ha
interazione con l‟elaboratore. Pur essendo i sistemi batch ormai caduti in disuso, il termine batch è ancora oggi
utilizzato per indicare una qualunque sequenza di comandi da eseguire uno dopo l‟altro (file .BAT del DOS).

Sistemi Batch Multiprogrammati (multitask non preemptive)
In un sistema di elaborazione la risorsa più importante, sia come capacità di elaborazione sia come costo, è la CPU.
Nei sistemi batch il processore risultava decisamente sottoutilizzato in quanto doveva spesso fermarsi per attendere
l‟esecuzione delle operazioni di IO, infinitamente più lente rispetto ai tempi di elaborazione di CPU. Nacque così
molto presto il concetto di multiprogrammazione che consiste nel caricare simultaneamente più programmi in
memoria centrale, ciascuno all‟interno di una sua ben precisa zona di competenza. Quando un processo si arresta per
eseguire una operazione di IO viene avviato il processo successivo. Il processo sospeso potrà riprendere la propria
attività nel momento in cui il nuovo processo termina o richiede a sua volta una operazione di IO.
       A livello di terminologia il termine task sostituisce il termine job. Pur essendo sostanzialmente dei sinonimi,
        il termine job indica stretta sequenzialità, mentre task indica parallelismo.
       Il termine non preemptive significa che i sistemi batch multiprogrammati erano non prelazionali, nel senso
        che il SO non aveva la prelazione, cioè la facoltà, (il diritto) di interrompere un processo a meno che questo
        non decidesse spontaneamente di fermarsi per eseguire una operazione di IO.

                                                                                                                  pag 3
Sistemi - Classe Quarta                                                                        robertomana.it
                                                 Sistemi Operativi

Sistemi multitask time sharing
Si tratta di sistemi in grado di eseguire più task in parallelo, assegnando alternativamente ad ognuno di essi
una porzione di tempo detta TIME SLICE (quanto di tempo): Un task può sospendere la propria attività
       Di sua volontà, perché deve eseguire una operazione di IO
       Contro la propria volontà, perché è scaduto il suo time slice.
Si tratta appunto di un sistema preemptive, in quanto il SO ha la prelazione (facoltà , diritto) di interrompere un
processo dopo un certo tempo di esecuzione, anche contro la volontà del processo stesso.
Grazie al time sharing, è come se ogni processo avesse una macchina virtuale completamente dedicata.
Il Time Sharing nasce con i grandi mainframe degli anni 70 (VAX) in cui gli utenti erano collegati all‟elaboratore
centrale tramite semplici terminali utente. Poiché gli utenti operano con tempi molto più lunghi rispetto ai tempi di
CPU, si crea nell‟utente l‟illusione di avere tutto il sistema a propria disposizione.
Notevole appesantimento del SO, che deve continuamente eseguire dei Context Switch da un processo all‟altro, cioè
       Memorizzare lo stato del processo corrente (in modo da poterlo poi riprendere da dove era arrivato)
       Caricare in CPU lo stato del nuovo processo, aggiornando le pipiline
Occorre inoltre gestire i problemi di condivisione delle risorse disponibili, gestendo eventuali conflitti che possono
sorgere per l‟assegnazione di una risorsa a diversi processi in esecuzione parallela

Concetto di System Overhead
Nel time sharing il tempo di CPU non è più interamente utilizzato per l‟esecuzione dei programmi utente, ma viene
ripartito fra questi e le routine del SO. Cioè parte del tempo di CPU viene “sprecato” per l‟esecuzione del sistema
operativo anziché dedicato all‟esecuzione dei programmi utente, diminuendo l’efficienza del processore.. Il System
Overhead rappresenta appunto la percentuale di tempo di CPU utilizzato per l‟esecuzione del SO rispetto al tempo
utilizzato per l‟esecuzione dei processi utente.

Sistemi multi user
Fin dai primi sistemi batch era già presente il concetto di sistema multiuser, in cui job eseguiti sequenzialmente
potevano comunque appartenere proprietari diversi. Anche i sistemi time sharing tipo VAX erano multiuser.
Per quanto riguarda invece i Personal Computer, DOS è single user. Anche Windows è tipicamente single user,
tranne che nelle ultime versioni XP e Vista. UNIX e LINUX sono invece per loro natura sistemi multi user, in cui più
utenti possono aprire sessioni parallele ed eseguire parallelamente processi differenti.

Il Kernel di un SO
Un SO in prima analisi può essere suddiviso in due parti principali:
  Il kernel (nocciolo), che costituisce il cuore del SO. Esso comunica direttamente con l‟hardware e si occupa della
   gestione dei processi fornendo loro un accesso sicuro e controllato alle risorse hardware della macchina.
   Il kernel viene caricato in memoria centrale al momento dello start up della macchina e vi risiede per tutta la
   durata del funzionamento del PC.
  La shell dei comandi, che funge da interfaccia tra kernel e utente, consentendo all‟utente di poter lanciare in
   esecuzione allo stesso modo qualsiasi tipo di programma, anche programmi molto differenti fra loro.
   La shell può essere di due tipi: CLI o GUI. Nel caso del CLI il SO presenta un semplice PROMPT in
   corrispondenza del quale l‟utente digita i comandi in modalità testuale. Nel caso della GUI l‟utente interagisce
   tipicamente con icone e immagini visualizzate sullo schermo. Molto più amichevole. La maggior parte dei SO
   mettono a disposizione entrambe queste interfacce. Nel caso di Linux l‟interfaccia GUI è detta Desktop
   Manager (es Gnome, KDE, OpenBox). UNIX è stato il primo SO a introdurre il concetto di interfaccia utente
   (shell) come processo esterno al kernel, con la possibilità di cambiare shell senza dover ricompilare il kernel.
  Insieme alla shell, il SO rende di solito disponibili anche un insieme di utility aggiuntive come un editor di testi
   (es vi nel CLI o gedit nella GUI). Nei sistemi Unix / Linux anche il compilatore C fa parte delle Utilità del SO

                                                                                                                      pag 4
Sistemi - Classe Quarta                                                                         robertomana.it
                                                  Sistemi Operativi

Il modello Onion Skin
Modello proposto nel 1983 da H. Deitel. Fornisce una rappresentazione modulare gerarchica (Onion Skin, cioè a
buccia di cipolla) su come dovrebbe essere strutturato il kernel di un SO, cioè suddiviso in 4 moduli che
rappresentano le quattro principali funzionalità del SO :
       Gestore dei Processi
       Gestore della Memoria
       Gestore delle Periferiche
       Gestore del File System

                                               Gestore      Gestore delle
                                    Gestore                 periferiche di       File     Shell e
                                      dei       della
                                               memoria            IO            System    Utility
                                    processi

                                                           kernel

Nella gerarchia onion skin il centro è costituito dall‟hardware ed ogni livello comunica soltanto con i livelli adiacenti.
Compito di ogni livello è quello di fornire servizi al livello superiore ed è visibile dal livello superiore soltanto
attraverso un insieme ben definito di funzioni dette primitive.

Primitive di un kernel
Sono dette primitive tutte quelle funzioni che costituiscono il kernel di un SO e che ogni modulo del kernel espone
ai livelli superiori (che possono essere altri moduli del kernel, la shell o direttamente i processi utente).
Sono normalmente scritte in linguaggio C o nel linguaggio macchina specifico del processore in uso.

Il Gestore dei Processi si occupa di creare e cancellare i processi utente e i processi di sistema; mantenere
aggiornato lo stato dei vari processi e del processore; decidere a quale processo assegnare il processore e per quanto
tempo. Gestisce inoltre la comunicazione fra i vari processi. Al sopra di questo livello i processi vedranno ciascuno
un proprio processore virtuale completamente dedicato.
Il Gestore della Memoria si occupa di mantenere uno stato della memoria; assegnare ai vari processi un apposito
spazio in memoria (assicurandosi che i vari processi non possano, per errore o per volontà, andare ad operare nelle
aree di memoria dedicate ad altri processi o al SO); liberare spazio in memoria quando è piena. Al di sopra di questo
livello gli altri livelli vedranno una unica area di memoria completamente dedicata al processo. Se un processo
tenta di accedere ad un‟area esterna a quella di sua competenza viene generato un interrupt di sistema (trap)
Il Gestore delle Periferiche si occupa di mantenere aggiornato lo stato di tutte le periferiche e dei dispositivi di
controllo; virtualizzare le risorse, facendo in modo che ogni processo veda la risorsa tutta per se; gestire il mapping
tra risorsa reale e risorsa fisica. In realtà il processo dispone di risorse virtuali che il SO simula servendosi delle
risorse del calcolatore reale. Ad esempio la tecnica di spool (Simultaneus Peripheral Operations On-line) consente al
SO di scaricare temporaneamente su disco i dati destinati alla stampa, gestendo così una coda di stampa condivisibile
fra più processi. Un apposito modulo si occupa di inoltrare progressivamente la coda di stampa alla stampante.
Il Gestore del File System si occupa della gestione dei dischi. Deve mantenere traccia di tutti i file e diretory
memorizzati, cioè la loro dislocazione, la loro lunghezza, nonché i diritti di accesso su di essi; gestire l‟assegnazione
degli archivi ai vari processi; supportare primitive per la manipolazione di file e cartelle.

                                                                                                                     pag 5
Sistemi - Classe Quarta                                                                        robertomana.it
                                                 Sistemi Operativi

  Pregi del modello Onion Skin Il pregio fondamentale è quello di individuare i 4 moduli fondamentali di un SO.
   L‟elevata modularità del modello Onion Skin garantisce una notevole robustezza al SO che potrebbe facilmente
   essere portato su macchine differenti sostituendo soltanto i moduli più interni che operano sull‟hw
  Difetti del modello Onion Skin Il modello Onion Skin risulta estremamente carente dal punto di vista delle
   prestazioni. Se ad es la shell necessita di servizi forniti dal Gestore dei Processi deve passare diversi confini.
   L'attraversamento dei vari confini si traduce ovviamente in elevati tempi di risposta, in contrasto con il fatto che
   il SO dovrebbe offrire un ambiente per l'esecuzione delle applicazioni il più efficiente e rapido possibile. Tutto
   ciò che si contrappone a questa esigenza è detto sovraccarico (overhead). In una struttura onion skin l‟overhead
   è massimizzato. Elevato overhead significa bassa efficienza.

Interrupt e System Call
Nei SO più datati non esisteva il concetto di System Call. I processi comunicavano con il SO soltanto attraverso i
cosiddetti Interrupt Software. Nei SO più moderni gli Interrupt Software entrano a far parte di un più ampio gruppo
di procedure messe a disposizione dal SO denominate System Call, cioè chiamate di sistema, che il processo utente
può utilizzare per richiamare una primitiva del kernel.
Le system call rappresentano lo strumento principale attraverso cui un processo utente comunica col kernel il quale a
sua volta comunica con l‟hardware (virtualizzazione dell‟hardware).
Ad esempio se si vuole stampare un file, invece che inviare i comandi fisici al gestore dell‟HD per la ricerca del file
e poi i relativi comandi fisici alla stampante, è sufficiente fare una System Call ad una apposita primitiva del SO
indicandogli quale file stampare e su quale stampante.
Il termine Interrupt è ora riservato soltanto più per gli interrupt hardware, generati dai dispositivi esterni per
avvisare la CPU riguardo alla terminazione di una certa operazione. In corrispondenza del sopraggiungere
dell‟interrupt, il SO avvia la Routine di Riposta all‟Interrupt (RRI), detta normalmente interrupt handler

Gli stati di un processore: Kernel Mode e User Mode
Tutti i processori Intel con architettura IA32 (a partire dal 80386 fino ai processori attuali) sono in grado gestire 4
livelli di protezione delle istruzioni (Kernel Mode, System Services, OS Extension, User Mode), cioè in sostanza ad
ogni istruzione è assegnato un livello di protezione e può essere eseguita soltanto da processi aventi un livello di
protezione uguale o superiore a quello dell‟istruzione. Scopo di queste protezioni è quello di impedire o consentire
l‟accesso a particolari aree di memoria in base allo stato del processore.
A tal fine le istruzioni del processore sono state suddiviso in due categorie: le istruzioni standard, eseguibili da
chiunque in ogni momento, e le istruzioni privilegiate che interagiscono con il sistema (ad es le istruzioni IN e
OUT) che possono essere eseguite soltanto in particolari condizioni. In corrispondenza si possono individuare 2 stati
del processore: uno stato utente (user mode) in cui è consentita soltanto l‟esecuzione delle istruzioni standard, ed
uno stato supervisore (kernel mode) con diversi livelli di privilegio in cui è consentita qualunque istruzione.
Un processo utente, normalmente, viene avviato con un livello di protezione pari a “user mode”. Nel momento in cui
il processo esegue una System Call al SO, il SO provvede ad eseguire un Mode Switch (cambio di modo) del
processore elevandolo dal livello user mode al livello kernel mode (modalità privilegiata), avviando il processo di
sistema richiesto. Terminato il processo di sistema, il SO provvede a riportare il processore in stato utente e
rassegnarlo al process utente In questo modo solo i processi di sistema possono utilizzare le istruzioni privilegiate
Esempio tipico di istruzioni privilegiate sono le istruzioni IN e OUT che possono essere eseguite soltanto in kernel
mode in modo da evitare che il programma utente possa eseguire un accesso diretto e incontrollato all‟hardware della
macchina. Per cui, per poter eseguire le istruzioni IN e OUT, il programma utente dovrà necessariamente eseguire
una System Call ai driver del SO i quali, soltanto loro, potranno eseguire le istruzioni IN e OUT sui registri di IO.
Per comunicare con dispositivi del quali non si dispone del driver occorre scriverselo o reperirlo su Internet.
Ad esempio i SO attuali non contengono più il driver relativo alla porta parallela, ritenuta ormai obsoleta. Per cui,
volendo comunicare con la parallela in ambiente Windows occorre necessariamente realizzare un apposito driver.

                                                                                                                     pag 6
Sistemi - Classe Quarta                                                                        robertomana.it
                                                 Sistemi Operativi

Sistemi Operativi monolitici
Un SO monolitico è composto da un insieme di moduli e procedure tutte compilati insieme e caricate all‟interno dello
stesso spazio di memoria. Ogni funzione ha una ben definita interfaccia (in termini di parametri e risultati) e può
indifferentemente chiamare tutte le altre in qualsiasi momento ne abbia bisogno.
Per costruire un sistema operativo monolitico occorre compilare tutti i vari moduli e poi collegarli insieme mediante
il linker in un unico file eseguibile di sistema. Anche se ogni modulo è normalmente separato dal resto
(programmazione modulare), l'integrazione del codice è comunque molto stretta.
Il programma utente può accedere ai servizi forniti dal SO tramite speciali istruzione di trap, le System Call, che
cambiano la modalità della macchina da user mode a kernel mode trasferendo il controllo al sistema operativo.
I parametri da passare al SO vengono posizionati in locazioni ben definite (tipicamente i registri di CPU o lo stack).
  Pregi: Quando l'implementazione del sistema è completa e sicura, la stretta integrazione interna dei componenti
   rende un buon kernel monolitico estremamente efficiente e veloce.
  Difetti: 1) Siccome tutti i moduli operano nello stesso spazio di memoria, un bug in uno di essi può bloccare
   l'intero sistema. 2) Ma lo svantaggio principale dei kernel monolitici è tuttavia che non è possibile aggiungere
   un nuovo dispositivo hardware senza aggiungere il relativo modulo al kernel, operazione che richiede la
   ricompilazione del kernel. I kernel monolitici contengono solitamente al loro interno i driver relativi a tutti
   i principali dispositivi hardware presenti sul mercato.

Esempio di sistema monolitico: il kernel di Unix
In figura è riportato uno schema a blocchi semplificato del kernel monolitico di Unix.

Quello che un utente vede del kernel è la system call interface, interfaccia che traduce le richieste esterne (ovvero le
invocazioni alle system call) in opportune procedure di sistema. La fig suddivide le System Call in due gruppi: quelle
che interagiscono con il modulo di gestione dei file e quelle che interagiscono con il modulo di gestione dei processi.
Un punto di forza di Unix è che gran parte dei comandi sono realizzati a livello utente per mezzo di applicazioni
che usano le chiamate di sistema e che non fanno parte del SO. Trattandosi di programmi estremamente efficienti,
diventa abbastanza semplice scrivere applicazioni interpretate (script di shell) come estensione dei comandi del SO.

                                                                                                                   pag 7
Sistemi - Classe Quarta                                                                          robertomana.it
                                                  Sistemi Operativi

Microkernel e Modello client-server
L'approccio microkernel consiste nel definire delle macchine virtuali molto semplici sopra l'hardware, con un set di
primitive per implementare servizi minimali quali semafori, gestione dei thread, spazi di indirizzamento o
comunicazione interprocesso, spostando quanto più possibile il codice di sistema verso i livelli superiori con un
kernel minimale. L'approccio consueto consiste nell'implementare molti servizi di sistema all'interno di processi
esterni al kernel. Per richiedere un servizio, come la lettura di un blocco di un file, un processo utente (chiamato ora
processo client) invia la richiesta a un processo server esterno al kernel che effettua il lavoro e ritorna la risposta.
In questo modello il kernel, dovendo solo gestire la comunicazione tra processi client e server, diventa estremamente
leggero e si limita a svolgere la funzione di Gestore dei Processi, demandando gran parte delle altre
funzionalità a moduli esterni che vengono caricati in memoria soltanto al momento della necessità (soprattutto i
driver). Inoltre un servizio non funzionante non provoca il blocco dell'intero sistema, ma il singolo servizio può
essere riavviato indipendentemente dal resto

Nota: Un altro vantaggio del modello client-server è la sua adattabilità all'utilizzo in sistemi distribuiti. Se un client
comunica con un server inviandogli messaggi, il client non ha bisogno di sapere se il suo messaggio viene gestito
localmente sulla macchina o se viene inviato ad un processo server su una macchina remota. I processi server
possono girare anche su macchine con altri SO dal client. Unica differenza è che nei sistemi distribuiti il kernel non
può occuparsi solo del traffico dei messaggi ma deve saper gestire la comunicazione con altri nodi della rete

Monolitico o microkernel ?
Sia Unix che Linux utilizzano sostanzialmente un kernel monolitico, molto più modulare nel caso di Linux, scritti
entrambi prima che fosso dimostrato che i microkernel puri potevano comunque avere performance elevate
confrontabili con quelle dei kernel monolitici. Comunque è tutt‟ora aperta la disputa sul fatto che sia migliore il
sistema monolitico o il microkernel. Il progetto di Linux nato come kernel monolitico anziché come microkernel è
stato uno degli argomenti della famosa guerra di religione fra Linus Torvalds (creatore di Linux) e Andrew
Tanenbaum (celebre docente di SO, autore di Minix).
In ogni caso i kernel monolitici più moderni come il Kernel Linux e FreeBSD possono caricare dei moduli in fase di
esecuzione, a patto che questi fossero previsti in fase di compilazione, permettendo così l'estensione del kernel
quando richiesto e mantenendo al contempo le dimensioni del codice nello spazio del kernel al minimo
indispensabile. Non si tratta più di un kernel monolitici puri ma sostanzialmente di kernel ibridi.

Kernel ibridi
I kernel ibridi sono essenzialmente dei microkernel che hanno del codice "non essenziale" al livello di spazio del
kernel in modo che questo codice possa girare più rapidamente che se fosse implementato ad alto livello.
Compromesso adottato da molti sviluppatori di SO, in particolar modo Windows che introduce il concetto di DLL.

                                                                                                                      pag 8
Sistemi - Classe Quarta                                                                           robertomana.it
                                                   Sistemi Operativi

                                   Gestione delle Memorie di Massa

                             Formattazione Fisica e Partizionamento
Struttura di un HD
L‟HD è costituito da un insieme di dischi rotanti su uno stesso asse e ricoperti di materiale magnetico.
Ogni faccia del disco contiene un insieme di tracce circolari concentriche e una apposta testina di lettura.
Le tracce corrispondenti sulle diverse facce costituiscono un cilindro
Le tracce sono suddivise in settori di dimensione fissa (typ 512 bytes) numerati sequenzialmente all‟interno della
traccia. I settori sono suddivisi da piccoli intervalli non magnetizzati detti gap

Formattazione Fisica
La Formattazione Fisica di un HD può essere ese4guita mediante formattatori di basso livello quali fdisk o Partition
Magic. Consiste essenzialmente nella creazione fisica di tracce e settori sul disco.
La Formattazione Fisica provvede a creare, per ogni settore :
       una intestazione contenente indirizzo fisico del settore(numero d‟ordine del settore all‟interno della traccia)
        e dimensione del settore stesso
       una coda in cui verrà memorizzato un Controllo di Parità per le rilevazione e correzione degli errori.
La formattazione fisica determina univocamente la capacità del disco.
Ad es un disco con 6 Testine (cioè 3 dischi a doppia faccia), 1024 cilindri (cioè 1024 tracce per facciata), 36 settori
per traccia (da 512 bytes), ha una capacità fisica pari a 6 x 1024 x 36 x 512 = 113.246.108 bytes, cioè 108 MBytes.

Codici di Rilevazione e Correzione degli Errori

Controllo di Parità Semplice (Redundancy Check)
Si consideri un settore grande 512 bytes che può essere visto come una matrice di bit con 8 colonne e 512 righe.
Il metodo più semplice per controllare la presenza di errori all‟interno del settore è quello di aggiungere al fondo
della matrice un byte di parità verticale in cui viene scritto un 1 oppure uno 0 in modo da rendere pari il numero
complessivo di uni su ogni colonna.
Ogni volta che il settore viene aggiornato, viene aggiornato anche il byte di parità. Ogni volta che il settore viene
letto viene ricalcolato anche il byte di parità che viene confrontato con quello memorizzato al fondo del settore.
Se le due informazioni coincidono, i dati contenuti nel settore sono considerati validi,
altrimenti significa che i dati sono corrotti ed il sistema provvede a visualizzare un messaggio di errore.
Un sistema di questo tipo (con distanza 2 secondo la codifica di Hamming) :
    è in grado di:Rilevare errori singoli ( o comunque un numero dispari di errori)
    non è in grado di Applicare nessuna correzione

Controllo di Parità Incrociato
Il controllo incrociato consiste nell‟applicare 2 controlli di parità, uno in verticale ed uno in orizzontale. Cioè oltre al
byte di parità verticale viene aggiunta in coda anche una sequenza di 512 bit di parità orizzontale che controllano la
cortezza di ogni singolo byte. In questo modo, in caso di errore singolo, facendo l‟intersezione tra riga e colonna in
cui si riscontra l‟errore, è possibile eseguire una correzione automatica dell‟errore.

                                                                                                                       pag 9
Sistemi - Classe Quarta                                                                         robertomana.it
                                                 Sistemi Operativi

Un sistema di questo tipo (con distanza 4 secondo la codifica di Hamming) :
    è in grado di:Rilevare con certezza fini a 3 error
    è in grado di Correggere automaticamente 1 singolo errore

Controllo Polinomiale CRC (Cyclic Redundancy Check)
Gli N bit di un intero settore o pacchetto dati vengono considerati come i coefficienti di un polinomio P(x) da
dividere per un polinomio G(x), detto Polinomio Generatore, formato da una sequenza prestabilita di M bit:
    agli N bit del pacchetto vengono aggiunti M-1 zeri;
    il polinomio ottenuto viene diviso per il polinomio generatore
    gli M-1 bit del resto così ottenuto sono accodati agli N bit del pacchetto (codice CRC).
    In fase di lettura viene eseguita la divisione del pacchetto completo (lungo N + M bit) per G(x): se il resto è
      nullo, presume che non vi siano stati errori, viceversa c'è qualche bit alterato e il pacchetto è rifiutato.
Scegliendo opportunamente il polinomio generatore, il metodo risulta molto affidabile, (l‟errore dovrebbe essere
esattamente multiplo di G(x)) e molto veloce in quanto il calcolo viene eseguito via hardware. Non è autocorrettivo.

Codici di Hamming
I vari codici di Hamming aggiungono più bit ridondanti ad ogni singolo byte, trasformando un codice di (n) bit, con
distanza uno, in un codice di (n + c) bit (dove c sono i bit aggiunti) con distanza superiore, in modo da poter
verificare e correggere più errori sul singolo byte. La rilevazione e l‟autocorrezione degli errori sarà tanto più
efficienti quanto maggiore è il numero di bit di ridondanza aggiuntii. Ovviamente la migliorata efficienza nel
controllo degli errori si paga con un notevole rallentamento nella lettura e trasmissione delle informazioni.

Indirizzamento fisico dei settori
L‟indirizzamento fisico dei settori può essere effettuato in due modi.
a) Mediante una terna C H S (cilindro, testina, settore). I cilindri sono numerati dall‟esterno verso l‟interno; le
   testine dall‟alto verso il basso; i settori in verso orario, tutti a partire da 0. Storicamente nella letteratura
   informatica la numerazione dei settori è fatta partire da 1, ma operativamente poi la partenza è riferita allo 0.
b) Mediante in numero progressivo crescente, detto LBA (Linear Base Address), che parte da 0 e segue le regole
   precedenti (il primo settore LBA coincide con il primo settore CHS del cilindro più esterno sul disco più alto).
   Nei dischetti da 3 ½ che hanno 80 * 2 * 18 = 2880 settori, gli indirizzi LBA vanno da 0 a 2779

Calcolo dell’indirizzo LBA a partire dalla terna CHS:
La numerazione lineare LBA è ottenuta partendo dalla traccia più esterna della prima faccia (su cui vengono
conteggiati tutti i settori), proseguendo poi sulla traccia più esterna della seconda faccia e così via fino al completo
scorrimento dell‟intero cilindro. Si passa quindi a considerare il secondo cilindro, scorrendo di nuovo tutte le tracce
dalla prima all’ultima faccia, e così via fino all‟ultimo cilindro più interno. La formula da utilizzare è la seguente:
        LBA = ((C * NTESTINE + H) * NSETTORIxTRACCIA ) + S
Supponendo che il disco abbia 80 tracce per faccia (da 0 a 79), 2 testine (cioè due facce 0 e 1), 18 settori per traccia
(da 0 a 17) (dischetto da 3 1/2 ), l‟indirizzo lineare LBA del settore 16 del disco 0 del cilindro 3 può essere così
ottenuta :
        LBA = ((3 * 2+ 0) * 18) + 16 = 124

Calcolo della terna CHS a partire dall’indirizzo LBA
Algoritmo noto come ASSISTED LBA, utilizzato dalle procedure di bootstrap per interpretare il contenuto del MBR
        C = LBA / (NTESTINE * NSETTORIxTRACCIA ) = 124 /(2*18) = 3
        resto = LBA % (NTESTINE * NSETTORIxTRACCIA ) = 124 % 36 = 16
        H = resto / NSETTORIxTRACCIA = 16 / 18 = 0
        S = resto % NSETTORIxTRACCIA = 16 % 18 = 16

                                                                                                                   pag 10
Sistemi - Classe Quarta                                                                         robertomana.it
                                                  Sistemi Operativi

Tempi di accesso ad un settore fisico
L‟accesso ai vari settori avviene facendo ruotare il disco e spostando radialmente le testine di lettura.
Il movimento di tutte le testine è controllato mediante un unico braccio meccanico ad altissima precisione.
Il tempo di posizionamento radiale delle testine sulla traccia è detto tempo di seek, e presenta oggi un valore medio
di 8 – 10 msec (inteso come metà del tempo massimo di spostamento fra i due estremi). Durante la lettura il disco è
in rotazione a velocità costante. Ad ogni passaggio la testina legge normalmente un singolo settore completo,
Il tempo medio per il posizionamento della testina su un settore (metà del tempo di rotazione completa) è detto
tempo di latenza che è comunque un tempo trascurabile rispetto al tempo di seek di posizionamento delle testine.

Partizionamento
Il partizionamento di un disco fisico consiste nella sua suddivisione in più unità logiche, dette volumi. I singoli
volumi sono visti come unità separate su cui è possibile applicare formattazioni logiche indipendenti. Due obiettivi:
     Poter installare ed eseguire SO differenti su una stessa macchina
     Creare partizioni dati separate, di facile backup ed accessibili anche in seguito ad eventuali “disastri” sul SO

MBR - Master Boot Record
Il primo settore fisico di un disco (cilindro 0, testina 0, settore 0) è detto MBR o Settore di Avvio. MBR non
appartiene a nessuna partizione ed è il settore che il BIOS, terminata la fase di POST ed eventuali istruzioni base,
provvede a leggere per caricare il SO dal volume indicato nella sequenza di boot. MBR contiene 2 informazioni :
          Il Master Boot Program MBP che può avviare direttamente il SO oppure avviare una interfaccia utente
           che consenta all‟utente di scegliere un SO (sistemi attuali sia Linux e Windows Vista, mentre XP avvia
           direttamente se stesso, dunque deve essere installato per primo modificando poi MBP).
          Una Tabella delle Partizioni articolata in 4 record contenenti una descrizione di ciascuna partizione
Le partizioni si suddividono in 2 gruppi:
        Partizioni Primarie, referenziate direttamente nella Partition Table e in grado di avviare un SO
        Partizione Estesa in grado di contenere fino a 24 partizioni logiche non avviabili.
Ogni disco può contenere al massimo 4 partizioni primarie oppure tre partizioni primarie ed una partizione estesa
suddivisibile (al massimo) in 24 sottopartizioni non avviabili.

Ogni partizione, primaria o estesa, (volume) contiene a sua volta uno speciale settore detto VBR Volume Boot
Record, costituito dal primo settore della partizione, creato in fase di partizione logica di alto livello e contenente
          Nel caso delle partizioni primarie il codice di boot del SO
          Una descrizione della struttura interna della partizione
Questa doppia struttura permette al BIOS di caricare qualunque SO indipendentemente dalla sua posizione sul disco.

Struttura di MBR (nel formato ereditato da FAT)
Primi 446 Bytes          Master Boot Program (di cui i primi 30 relativi ai BIOS Parameters)
Successivi 66 Bytes      Partition Table suddivisa in 4 record da 16 bytes ciascuno, contenenti rispettivamente le
                         informazioni relative alle varie partizioni
                         Gli ultimi 2 byte sono un identificativo di riconoscimento della fine del MBR e contengono il
                         valore AA55H (memorizzati secondo la convenzione little endian).
Il Master Boot Program effettua uno scan della tabella delle partizioni e localizza la prima partizione primaria
marcata con il flag di partizione avviabile (bootable - codice 80). Appena il codice dell'MBR trova una partizione
così marcata, viene letto in memoria il primo settore di tale partizione ed eseguito il codice presente in questo settore
che costituisce il vero e proprio boot sector, quello che in definitiva provvede ad avviare il SO presente.
Utilizzando come Master Boot Program un loader quale GRUB si può richiedere all‟utente quale SO avviare.
GRUB provvede a caricare in memoria il primo settore della partizione selezionata.

                                                                                                                    pag 11
Sistemi - Classe Quarta                                                                           robertomana.it
                                                       Sistemi Operativi

Struttura delle entry della Partition Table
Byte      Contenuto
0         Indicatore di boot (contiene il valore 80H per le partizioni bootable, 0 per le altre partizioni)
1-3       Cilindro, Testina, Settore del primo blocco della partizione
4         Identificatore del filesystem contenuto nella partizione. 17=NTFS; 0B=FAT32 primaria; 0F=FAT32 estesa
5-7       Cilindro, Testina, Settore dell’ultimo blocco della partizione
8-11 Numero LBA del primo settore della partizione
12-15 Numero di settori che costituiscono la partizione
Per quanto concerne i campi Testina, Settore e Cilindro, si hanno a disposizione 3 byte suddivisi in 8 bit per le testine
(max 256), 6 bit per i settori (max 64) e 10 bit per i cilindri (max 1024). Indipendentemente dalla suddivisione, i 3
byte limitano comunque la dimensione max del disco a 16 Milioni di settori da 512 cioè 8 GB.
Al posto della terna CHS si possono utilizzare gli identificatori LBA contenuti negli ultimi 2 campi da 4 byte. I valori
LBA vengono poi convertiti dal SO nella terna CHS dall‟algoritmo ASSISTED LBA.

Gli identificatori LBA consentono una capacità massima del disco pari a 232 settori cioè 4 G settori cioè 2 TBytes.
che rappresenta il limite massimo della capacità di un HD gestito tramite il formato standard del MBR.

                                  Formattazione Logica : il File System
La Formattazione Logica di un volume consiste nel definire il formato di memorizzazione dei file sul volume
stesso, cioè nel creare sul disco uno specifico File System (sistema di files).
Con il termine File System si intende l’organizzazione dei Dati su un certo volume. Definire un File System
significa definire l‟organizzazione dei dati sul volume.
Con il termine File System Manager si intende il modulo del SO che gestisce il File System,
In dettaglio definire un File System significa definire:
         La dimensione dei blocchi logici, detti cluster, (grappolo), insieme di settori contigui il cui numero dipende
          dal file system in uso. Il cluster rappresenta l’unità minima di allocazione logica su disco. Esso può
          raggruppare un numero generico di settori (tipicamente 1, 2, 4 8). La dimensione del cluster è omogenea su
          un certo volume, ma può variare fra volumi diversi utilizzati in uno stesso sistema.
          Nota: Il raggruppamento in cluster viene di solito applicato soltanto al Blocco Dati e non ai settori iniziali
         Una Tabella di Descrittori in cui vengono memorizzate le posizioni su disco di tutti i blocchi che
          compongono ogni file.
Il File System Manager, tramite la Tabella dei Descrittori, gestisce l‟organizzazione del file all‟interno del disco,
mostrando all‟utente i vari file come un vettore continuo e lineare, esattamente come la memoria centrale. Fornisce
cioè un livello di astrazione nascondendo all‟utente sia la posizione fisica dei files su disco, sia i dettagli di lettura /
scrittura. La Tabella dei Descrittori consente al File System Manager di passare dalla rappresentazione logica
virtuale di un file (mostrato all‟utente come una sequenza continua di byte) ad alla rappresentazione fisica del file
su disco (cioè la reale posizione sul disco di tutti i vari blocchi che compongono il file) e viceversa.
Tra gli scopi del File System Manager
         Tradurre gli indirizzi logici in indirizzi fisici (tramite l’apposita Tabella dei Descrittori)
         Gestire lo stato di allocazione / deallocazione di tutti i vari cluster che costituiscono il volume
         Gestire i diritti dei vari utenti sui vari file

Tipica Struttura di un File System

                  Tabella dei
      VBR                           Root Directory                         Blocchi Dati                 .

                  Descrittori

                                                                                                                      pag 12
Sistemi - Classe Quarta                                                                          robertomana.it
                                                  Sistemi Operativi

Il VBR è posizionato sul primo settore della partizione e contiene di solito le seguenti informazioni::
     il Boot Program. Al momento dell'accensione della macchina un piccolo programma posto nella ROM
       carica e manda in esecuzione il boot program relativo al volume di avvio, il quale carica il SO in RAM
     Il tipo di File System utilizzato
     La dimensione dei cluster
     Il settore di inizio del blocco dati (posizione della Root Directory)

La Tabella dei Descrittori contiene i descrittori di tutti i files del volume. Ogni descrittore contiene i seguenti campi:
    nome e tipo di file (testo, eseguibile, etc)
    dimensione
    uno o più puntatori ai cluster che compongono il files
    data di creazione, data dell‟ultimo accesso, data dell‟ultima modifica
    identificatore del proprietario (UID)
    criteri di protezione del file (lettura / scrittura /esecuzione per proprietario, gruppo e altri)

Criteri di Dimensionamento dei cluster
Un qualsiasi file, per piccolo che sia, occupa sull‟HD sempre almeno un cluster. La dimensione del cluster può essere
impostata in fase di formattazione logica del disco. Spesso è decisa dal File System che si sta utilizzando.
  Utilizzando cluster di grandi dimensioni (ad esempio 8 settori, cioè 4 kBytes) vengono migliorati i tempi di
    IO in quanto ogni blocco trasferisce più informazioni, ma viene aumentata la cosiddetta frammentazione
    interna del disco. Ogni file infatti occuperà sempre almeno 4 kBytes. Anche nei file di grandi dimensioni,
    l‟ultimo cluster sarà sempre mediamente mezzo vuoto, con notevole spreco di spazio disco.
  Utilizzando cluster di piccole dimensioni, i file “grandi” vengono spezzettati su un numero elevatissimo di
    cluster, appesantendo enormemente le gestione e peggiorando i tempi di IO. Nei Floppy 1 cluster = 1 settore

Il File System Manager

File regolari e Stream
Un file è visto dall‟utente come una sequenza di byte registrata su memoria di massa (dischi, nastri,pen drive). Si
parla in questo caso di file regolari. Un file può essere visto anche come una sequenza di byte non necessariamente
statica. Ad esempio un flusso, continuo o meno, di dati che arrivano da Internet, o vengono inviati a una scheda
audio, o scambiati, attraverso delle code, da due programmi in esecuzione. Si parla in questo caso di Stream.

Tipi di files Regolari
                              Testuale Ascii
                              Formattato tramite opportuni algoritmi (Word, Excel, JPG, etc.)
                              File Dati cioè inizialmente file di record oggi database
                              Binario, contenente tipicamente l‟immagine di un processo.

Files Speciali : Directory e Collegamenti
   - = file regolare, cioè un file nel senso classico del termine
   d = file directory, il cui contenuto non può essere editato dall‟utente. Sono visualizzati in blu
   l = file link, cioè collegamento ad un file / directory esterni rispetto alla directory corrente. Meccanismo di
         condivisione dei files. I link sono visualizzati in cyano
Ad ogni file (file regolare, file directory o link) corrisponde un Descrittore che in EXT3 è detto i-node (index node)
che contiene varie informazioni relative al file, prima fra tutte la posizione del file su disco.
Directory
   I file directory (in Windows CARTELLE) rappresentano l‟elemento centrale nell'organizzazione di un file
   system. Sono “file di servizio” modificabili soltanto dal SO e contenenti un elenco testuale di file che, a loro
   volta, possono essere file regolari, directory o link Un file directory contiene di solito un elenco testuale di coppie:
   nome file (assegnato dall‟utente) - numero di descrittore corrispondente (assegnato dal SO). I nomi dei file
   sono nomi ASCII con lunghezza max 255 caratteri con esclusione dei caratteri / e NULL.

                                                                                                                    pag 13
Sistemi - Classe Quarta                                                                         robertomana.it
                                                  Sistemi Operativi

   I file directory sono di solito organizzati mediante una struttura gerarchica a più livelli articolata ad albero.
   Il nodo principale dell‟albero è detto root (radice) o master directory identificata dal nome / (slash o barra).
   La root directory deve essere collocata in una posizione precisa del volume, nota a priori, in modo che il SO possa
   accedere ad essa in qualunque momento senza bisogno di informazioni aggiuntive. La root directory contiene un
   certo numero di file e directory di primo livello, le quali a loro volta contengono altri file e directory.
   Ogni directory rappresenta un nodo dell‟albero, mentre i file rappresentano le foglie.
   Ogni directory contiene sempre almeno due elementi, cioè
           . single dot che rappresenta un link all‟i-node della directory corrente
            .. double dot che rappresenta un link all‟i-node della directory genitore rispetto alla directory corrente

Collegamenti
  Anziché ripetere i file / directory in più posti, i link consentono di creare riferimenti multipli (detti alias) ad uno
  stesso file. Il link è sostanzialmente un nuovo nome riferito ad un Descrittore già esistente. Ogni volta che si
  crea un link ad un file, all‟interno del Descrittore viene incrementato un contatore dei riferimenti al file.
  Cancellando il link non si cancella il file associato, ma viene semplicemente decrementato il contatore dei
  riferimenti. Se l‟utente cerca di cancellare un file che ha dei link attivi, il SO segnala un warning. Il comando per
  creare un link è ln. L‟introduzione dei link trasforma la struttura del File System da un albero ad un grafo.

Home Directory
Per ogni utente viene automaticamente montata all‟interno di /home una directory personale detta Home Directory.

Working Directory
Per ogni sessione di lavoro esiste una working directory che all'inizio della sessione coincide con la Home Directory
dell'utente. Il comando pwd mostra la Working Directory corrente. Il comando cd modifica il valore della Working
Directory. In Eclipse la Working Directory corrente è costituita dalla directory del progetto all'interno del Workspace

Pathname
Il pathname di un file rappresenta il percorso che il SO deve seguire per individuare l‟i-node del file. Può essere:
           Assoluto, cioè a partire da root                   es        /home/miaCartella/mioFile
           Relativo, rispetto alla Working Directory corrente es         ./mioFile
           Relativo, rispetto alla Home Directory             es        ~/miaCartella/mioFile
La lunghezza massima di un pathname è di solito 256 caratteri. Notare che il pathname di un certo file non è
memorizzato da nessuna parte, ma viene costruito navigando l’albero delle directory.
Nel momento in cui l‟utente “apre” una directory (es clickando sopra oppure tramite un comando cd), il file directory
viene caricato in memoria centrale all‟interno di una struttura ad albero che :
     consente di effettuare rapidamente operazioni di aggiunta / cancellazione di elementi
     ben si presta a supportare meccanismi di protezione legati agli utenti, associando specifici diritti di accesso ai
        vari file e sottodirectory contenute. Ogni utente può essere proprietario di una porzione di albero, all‟interno
        della quale può creare sottocartelle annidate e file a suo piacimento (home directory)

Gestione dei volumi all’interno del File System

Windows
In Windows i volumi vengono identificati da una lettera progressiva a partire da C: Le lettere A e B sono storicamente
riservate per i floppy disk. Ogni volume ha un suo albero indipendente. Questo crea non pochi problemi nella
portabilità delle applicazioni. A livello di interfaccia grafica i vari alberi vengono raggruppati in un unico albero
denominato Risorse del Computer all’interno della quale vengono “montati”, con lettere crescenti, tutti i volumi
individuati in fase di avvio (disco fisso e relative partizioni, lettore floppy, CD ROM, HD esterni, pen drive USB).
Anche i device aggiunti “a caldo” vengono montati automaticamente sempre nella cartella “Risorse del Computer”.

                                                                                                                    pag 14
Puoi anche leggere