Sistemi operativi

 

 

 

Sistemi operativi

 

Questo sito utilizza cookie, anche di terze parti. Se vuoi saperne di più leggi la nostra Cookie Policy. Scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.I testi seguenti sono di proprietà dei rispettivi autori che ringraziamo per l'opportunità che ci danno di far conoscere gratuitamente a studenti , docenti e agli utenti del web i loro testi per sole finalità illustrative didattiche e scientifiche.

 

 

Sistemi operativi

 

introduzione

 

L'elaboratore, più in generale un Sistema di Elaborazione Dati (SED), visto come sistema hardware più o meno complesso, non è di per sè una macchina facilmente utilizzabile, e ciò è tanto più realistico quanto più si evolvono le tecnologie elettronico-informatiche e le applicazioni basate su di esse.
Programmare direttamente un elaboratore sarebbe attualmente una cosa, se non riservata a ristretti team di specialisti, pressochè impossibile anche all'utente professionale, a meno che non si approntino adeguati strumenti per predisporre ed agevolare il colloquio uomo-macchina.
Un Sistema Operativo (SO) è un insieme di risorse (in pratica un opportuno corredo di software) tali da consentire una gestione controllata, coordinata ed integrata di un dato sistema hardware (elaboratore) in modo ottimizzato ed efficiente.
Un SO deve consentire l'utilizzazione dell'hardware e lo sviluppo e l'esercizio del software e delle comunicazioni da parte dell'utenza in modo efficiente, corretto e sicuro, fornendole una visione astratta della macchina reale, cioè una cosiddetta macchina estesa o virtuale, percui l'utenza accede e riesce a gestire un adeguato insieme di risorse (virtuali) tramite un linguaggio e dei meccanismi semplici e ad essa funzionali.
L'utenza, a seconda del livello di approccio e di conoscenze possedute o attribuite, deve poter arrivare alle risorse hardware per tramite di una gerarchia di interfacce le quali rendano visibili non tanto le risorse fisiche effettive bensì delle macchine virtuali, cioè insiemi di risorse e corrispondenti linguaggi per gestirle, visibili a quel livello ed implementate nei livelli sottostanti, i quali restano trasparenti a quella data utenza e vengono a costituire, a cascata, dei supporti a tempo di esecuzione (ste) dei livelli superiori.
Per una illustrazione si veda la slide SO01.
Una strutturazione di un SED (o anche sistema EDP-Electronic Data Processing) secondo vari livelli di astrazione, quale patrimonio tipico di concetti e tecniche dell’informatica, consente di individuare funzionalità, relazioni gerarchiche, metodologie di progettazione e di analisi ed implementazioni di livelli distinti del sistema, fornendo risorse e linguaggi che da un livello di astrazione a quello immediatamente più alto fa apparire in quest’ultimo come Istruzioni Primitive le operazioni implementate al livello più basso.


Si può pertanto pensare di schematizzare un SED secondo una strutturazione di tipo verticale (strutturazione gerarchica a livelli), basata sull’individuazione di distinti livelli di interpretazione tra loro interfacciati ed ordinati gerarchicamente, ed una strutturazione di tipo orizzontale (strutturazione a moduli), basata sull’individuazione di distinte entità (o moduli) di elaborazione, tra loro autonome ma comunque interfacciate ed eventualmente ordinate.
Estendendo il concetto di istruzione primitiva fino ai livelli più astratti del sistema, cioè fino ai livelli applicativi più ²esterni² in cui opera l’utente programmatore, si arriva a dotare tale soggetto di un insieme di risorse virtuali, cui corrisponderanno risorse reali, accessibili in modo indipendente dalla loro reale costituzione fisica tramite linguaggi sempre più vicini all’uomo (linguaggi di programmazione simbolici ad alto livello), demandando la realizzazione effettiva delle funzioni hardware via via ai livelli sottostanti.
Sarà così possibile, ad esempio, scrivere un programma facendo riferimento, anzichè agli indirizzi fisici di memoria, ad uno Spazio Logico Indirizzabile, purchè il complesso compito di tradurre le operazioni logiche descritte nel programma in operazioni sulle effettive locazioni fisiche di memoria sia implementato da opportuni moduli del sistema (a partire dal Memory Management), con innegabile vantaggio per il programmatore il quale concentrerà la sua attività sugli aspetti logici del problema, disinteressandosi quasi completamente degli aspetti fisici del sistema hardware.
Analogamente, l’utente farà riferimento a Tipi Astratti di Dati ed a Dispositivi Virtuali, lasciando il compito di tradurre tali riferimenti in operazioni concrete ai livelli più interni del sistema (Information Management e Device Management), i quali a loro volta, referenziando le primitive del nucleo del SO, determineranno l’implementazione fisica, cioè le Strutture Fisiche di Dati e l’I/O Fisico.
Il SO rappresenta, in pratica, il primo livello di astrazione dalla macchina reale, interfacciando l'hardware con le applicazioni e sgravando l'utenza dagli oneri della gestione delle risorse fisiche.
Il grado di complessità, la tipologia ed il livello di sofisticazione di un SO dipende da vari fattori, tra i quali rivestono fondamentale importanza gli aspetti architetturali dell'hardware e gli aspetti di destinazione d'uso del sistema hardware/software finale, ovvero le applicazioni.
Nei moderni SED, vista l'evoluzione differenziata dell'hardware e del software e la crescente espansione e specializzazione di quest'ultimo (dovuta essenzialmente alla diminuzione dei costi hardware e quindi ai maggiori investimenti sulla produzione software) si registra una certa controtendenza, percui non sono più i SO ad adattarsi all'hardware ma quest'ultimo ad essere progettato con riferimento ad essi, ciò anche per implementare SO portabili ed interfacce utente di tipo "user-friendly".


Quanto detto costituisce un altro motivo percui si richiede la diminuzione dei costi hardware: più funzioni si implementano ad alto livello più requisiti si richiedono all'hardware di base, il quale dovrà pertanto mantenersi entro costi contenuti.

Per Software di Base si intende, in genere, un corredo di programmi di supporto, eventualmente forniti anche con dell'hardware, che consente di sviluppare o utilizzare applicazioni; il software di base comprende moduli quali librerie di funzioni, programmi di compressione dei dati, editor avanzati, debugger interattivi, utilities di manipolazione di archivi, tool-kit vari, traduttori, ecc. (la differenza tra software di base e SO non è spesso così netta nei moderni SO, così ricchi di funzioni varie e di utilità).

Col termine Architettura, riferendosi ai SED, suol intendersi le modalità secondo le quali operano e si interconnettono i vari elementi costituenti il sistema ed i flussi informativi tra di essi circolanti; l'architettura di un sistema EDP è insomma il modo in cui hardware e software operano ed interagiscono per fornire i servizi e le prestazioni richieste.
L'architettura di un SED, visto ad un certo livello di astrazione, abbraccia gli aspetti strutturali e funzionali del sistema, fornendone una visione generale e caratterizzante; applicando il termine a specifiche risorse del sistema, quali le risorse hardware o i dati, ed alle modalità secondo cui si interconnettono ed interagiscono più sistemi (p.es. reti di calcolatori), allora si potrà parlare di architetture hardware, architetture dei dati, architetture dei sistemi e così via.

Il modo secondo il quale un SO gestisce l'elaboratore ed interfaccia l'utente determina il modo di operare del SED, cioè il tipo o ambiente di elaborazione; gli ambienti di elaborazione possono pertanto essere anche profondamente diversi tra loro, in  dipendenza della progettazione ed implementazione dei diversi SO e, più in generale, dei seguenti fattori:

  • architetture hardware;
  • modalità operative;
  • architetture dati;
  • architetture dei sistemi;
  • comunicazioni;
  • software ed applicazioni;
  • altri (tempi di risposta, tipi di utenze, throughput pretesi, criteri di gestione delle risorse, ecc.).

  • In via generale ed introduttiva, allo scopo di comprendere meglio la struttura e le funzioni di un SO, si può fare una panoramica concernente i suddetti fattori (gli approfondimenti saranno svolti in aula).
  •  
  •  
  • Architetture Hardware
  •  
  • Possono essere definite sulla base dell'hardware, cioè dal punto di vista della componentistica e dell'assemblaggio dei dispositivi fisici costituenti il sistema, con speciale riguardo nei confronti della CPU (in quanto vera e propria unità di elaborazione); si hanno le seguenti due tipologie fondamentali.
  •  
  • Sistemi Uniprocessor
  • Prevedono una sola CPU.
  • Nel caso più semplice ed in genere, tali architetture di calcolo prevedono una sola memoria e corrispondono alla classica macchina di Von Neumann, cioè a Sistemi Sequenziali che possono dar luogo ad Elaborazioni Sequenziali: nella memoria può essere presente un solo programma le cui istruzioni vengono eseguite in sequenza logica una per volta (macchina che esegue flussi di singole istruzioni su flussi di singoli dati o macchina SISD-Single Instruction Stream Single Data Stream).
  • Introducendo in tali sistemi apposite unità capaci di svolgere determinati compiti (processori ausiliari, quali i processori o canali di I/O, il DMA, ecc.) ed implementando opportuni meccanismi hardware/software (gestione delle interruzioni, assegnazione a tempo delle risorse, suddivisione modulare di una unità, ecc.) si riesce ad ottenere una qualche forma di Elaborazione Parallela (un cosiddetto quasi-parallelismo): tale parallelismo è in realtà un Parallelismo Virtuale - in quanto una CPU può eseguire in un certo istante una sola istruzione - ed è da intendersi come una sovrapposizione temporale di compiti diversi svolti da unità di tipo diverso (tipico il caso di sovrapposizione delle operazioni di I/O, svolte dal DMA, con quelle di elaborazione effettiva, svolte dalla CPU).
  • Comunque vadano le cose, il parallelismo (virtuale) realizzabile con un sistema uniprocessor (SO permettendo) può al massimo realmente svolgersi sui dati, nel senso di riuscire ad elaborare contemporaneamente flussi multipli di dati nell'ambito della stessa istruzione.
  • I sistemi in grado di realizzare tale forma di parallelismo si dicono macchine SIMD-Single Instruction Stream Multiple Data Stream o Sistemi Uniprocessor Paralleli (sistemi con prefetch, sistemi look-ahead, array processor).

  • Sistemi Multiprocessor
  • Prevedono più CPU.
  • Le CPU, cooperanti, possono concorrere a realizzare un Parallelismo Reale, o effettuando diverse operazioni su un unico flusso di dati (macchine MISD-Multiple Instruction Stream Single Data Stream) o operando in parallelo su flussi diversi di dati (macchine MIMD-Multiple Instruction Stream Multiple Data Stream).
  •  
  •  
  • Modalità Operative
  •  
  • Possono essere definite, dipendentemente dalle architetture hardware, sulla base delle modalità secondo le quali sono gestiti due flussi di informazioni tipiche degli elaboratori: il flusso delle istruzioni (instruction stream) ed il flusso dei dati (data stream), dando luogo alla classificazione delle seguenti tipologie di ²macchine² (tassonomia di Flynn – 1972):
  •   SISD (Single Instruction Stream Single Data Stream)
  •   SIMD (Single Instruction Stream Multiple Data Stream)
  •   MISD (Multiple Instruction Stream Single Data Stream)
  •   MIMD (Multiple Instruction Stream Multiple Data Stream).
  •  
  •  

Architetture Dati

  •  
  • Possono essere definite sulla base delle modalità secondo le quali sono gestiti e dislocati i dati (che in quanto facenti capo ai SED ne possono condizionare la progettazione, soprattutto con l'affermarsi delle reti telematiche):
  •   Accentrata
  •   Decentrata
  •   Distribuita.
  •  
  •  

Architetture Dei sistemi

  •  
  • Possono essere definite sulla base delle modalità secondo le quali sono gestiti e dislocati i SED ed in base alle loro interconnessioni e gerarchie; in analogia con le architetture dati, le architetture di base sono quella accentrata, decentrata e distribuita.

Comunicazioni

  •  
  • L'aspetto fondamentale da cogliere, a livello introduttivo, riguarda il tipo di comunicazione che si viene ad instaurare tra due sistemi rispetto alla distanza; in tal caso si distinguono:
  •   Comunicazioni Locali
  •   Comunicazioni Remote
  • Come può risultare intuitivo, l'hardware/software di un sistema che lavora con altri sistemi o dispositivi remoti, in particolare il SO, dovrà essere in grado di gestire, oltre alle comunicazioni stesse:
  •   applicazioni diverse e spesso eterogenee (per diverse utenze di diverso tipo);
  •   carichi di lavoro onerosi e variabili (per numerose richieste anche casuali);
  •   contese e protezioni (per accessi simultanei ed accessi non autorizzati o non accettabili);
  •   interfacce utente ²user-friendly² e risposte in real-time (per utenze non esperte e colloqui conversazionali);
  • gestioni che implicano una certa potenza e flessibilità del sistema nel suo insieme.
  •  
  •  
  • software, applicazioni ed altri aspetti
  •  
  • Per quanto concerne le applicazioni e le implementazioni software è abbastanza evidente che, ove conveniente o  necessario, il SO sarà progettato, unitamente al sistema hardware, in modo da soddisfare alle esigenze primarie del contesto; si potranno così realizzare sistemi che vanno da quelli di tipo general purpose a quelli dedicati per una singola applicazione (p.es. acquisizione dati, controllo di processo, applicazioni industriali, ecc.).
  • In base alla considerazione di tutte queste problematiche, parallelamente ai progressi tecnologici, i SO si sono evoluti e differenziati nel tempo, per venire incontro alle crescenti e sempre più complesse esigenze dell'utenza, offrendo prestazioni ed ambienti di elaborazione costantemente più sofisticati e vicini al modo di agire e di pensare umano.
  • Vista la notevole varietà dei SED e dei SO resta piuttosto difficile darne una caratterizzazione precisa senza entrare nel merito di ciascuno di essi; oltre a quanto già detto in via generale, possiamo quindi, per il momento, dare solo qualche idea, a grandi linee, delle principali funzioni e servizi di un generico SO, sviluppando successivamente quei concetti fondamentali che stanno alla base delle più importanti tipologie di SED attuali.

  • Segue pertanto una elencazione dei principali ambienti di elaborazione, cercando di evidenziarne, per quanto possibile, anche il loro sviluppo storico (descrizioni più approfondite saranno svolte aula).
  •  
  •  
  •  
  • Ambienti di Elaborazione
  •  
  • Monoprogrammazione
  • (dedicati 1)
  • Batch Processing
  • Time-sharing
  • Multiprogrammazione
  • (multiprogramming)
  • Real-time
  • Multielaborazione
  • (multiprocessing)
  • Virtual Machine
  • On-line
  • Transaction Oriented
  • (interattivi)
  • Dedicati 2
  • (PC e affini)
  • Specializzati
  • Di Sviluppo
  • Dedicati in Rete
  • Misti

  • struttura e funzioni di un sistema operativo
  •  
  •  
  • Moduli principali
  • Processor Management (Nucleo)
  • Memory Management
  • Device Management
  • Information Management o File System.
  •  
  • Compiti principali
  • Gestione della/e CPU e dei processori
  • Coordinamento e sincronizzazione dei processi
  • Ripartizione e gestione delle risorse tra i processi
  • Gestione di interruzioni, contese e priorità
  • Gestione della/e memoria
  • Gestione delle comunicazioni
  • Gestione delle periferiche e delle operazioni di I/O
  • Gestione delle informazioni e dei files
  • Gestione delle informazioni di stato di risorse e processi
  • Caricamento ed Esecuzione dei programmi
  • Protezione del sistema, delle applicazioni e degli accessi
  • Rilevazione e gestione degli errori
  • Gestione dell’interfaccia utente.
  •  
  • Supporti per l'utenza
  • Traduttori (interpreti, assemblatori, compilatori)
  • Loader
  • Linker
  • Editor
  • Debugger
  • Utility
  • Comandi, Macro, Supporti di configuration/control
  • Help.

  • principali sistemi operativi
  •  
  • so               costruttore          tipo               note
  • CP/M             Digital Research     Monoutente         obsoleto
  • MS-DOS           Microsoft            Monoutente         obsoleto
  • Windows 200      Microsoft            Multitasking       GUI
  • Windows XP       Microsoft            Multitasking       GUI
  • OS/2             Microsoft/IBM        Multitasking       GUI
  • MAC OS           Macintosh            Multitasking       GUI WYSIWYG
  • UNIX             AT&T Bell Labs       Multiutente        Varie versioni
  • Linux            Linus Torvalds       Multiutente        Varie versioni
  • OS/MVS           IBM                  Mainframe
  •  

processi

  •  
  • PROCESSO
  • Azione composta da una serie di azioni elementari concorrenti al raggiungimento di un certo risultato o effetto.
  •  
  • Col termine Processo si intende dunque un'azione, più o meno complessa, composta da una serie di azioni elementari, tali da conseguire un certo risultato o effetto; si osservi che la definizione di processo (in termini di azioni) implica la considerazione di entità dinamiche, cioè di entità che evolvono nel tempo: un processo viene avanzato temporalmente, assumendo degli stati, in funzione dell'evoluzione della sequenza di azioni che lo costituiscono.
  •  
  • Dal punto di vista EDP possiamo assimilare un processo, piuttosto che ad un programma (in quanto schema statico di regole logiche per la risoluzione di problemi), ad un programma in esecuzione (in quanto attività dinamica di elaborazione); è comunque possibile riguardare il processo corrispondente ad un programma in esecuzione come un "macroprocesso", scomponibile in diversi processi distinguibili (p.es. processo di immissione dati, processo di elaborazione dati, processo di emissione dei risultati) e spingerci anche oltre, in relazione al punto di vista rispetto al quale si vuole analizzare un dato fenomeno, fino ad arrivare alla considerazione di "microprocessi" via via più elementari (p.es. riguardare un programma in esecuzione, dal punto di vista della CPU, come un insieme di processi distinti, ciascuno corrispondente ad una istruzione in esecuzione in linguaggio macchina, a loro volta costituiti da determinate sequenze di azioni, corrispondenti a delle microistruzioni in esecuzione, cioè microoperazioni); la "granularità" con cui si identifica un processo, ovvero il grado di approfondimento con cui si conduce un’analisi, è quindi da relazionare al livello di approccio al problema ed alle conoscenze possedute rispetto al fenomeno in esame.
  •  
  • Per quanto detto sopra, in ambiente EDP un processo è riguardabile come un insieme formato da una sequenza di istruzioni (in esecuzione) in linguaggio macchina, atte a svolgere un lavoro finito, ed un insieme di dati sui quali le istruzioni vanno ad operare; un processo si può identificare pertanto come un compito eseguito da una CPU; è sinonimo di processo il termine Task o anche Job.
  • Alternativamente, un processo si può definire come un programma in esecuzione in un ambiente operativo (SO) multiprogrammato.

  • Processore
  • Unità in grado di eseguire istruzioni, o comunque capace di svolgere un'attività.
  •  
  • Un Processore è in sostanza un esecutore: l'attività svolta da un processore è dunque un processo.
  • In informatica col termine processore si indica generalmente una vera e propria CPU (CPU centrale o principale), esistono comunque processori diversi (unità esecutive, dispositivi hard-wired, I/O controller, DMA, processori grafici, ecc.), che normalmente implementano funzioni ausiliarie alla CPU, i cui processi vengono talvolta indicati come pseudoprocessi.
  •  
  •  
  • Microprocessore
  • Circuito che realizza su uno o più chip una completa CPU.
  •  
  • Attualmente, molti microprocessori sono implementati su un unico chip, in tecnologia microelettronica LSI, VLSI o ULSI; sono esempi di microprocessori comuni per piccoli sistemi i microprocessori: Z80 e Z8000 della Zilog, la famiglia 80x86 e Pentium della Intel (PC IBM), la famiglia 680x0 della Motorola (PC Macintosh).
  •  
  •  
  • Processori virtuali
  • Astraendo dalle risorse fisiche, cioè dalle implementazioni hardware, conviene spesso far riferimento a dei Processori Virtuali, cioè a dei processori distinti (eventualmente implementabili su di un unico processore fisico tramite opportune tecniche) cui si possa attribuire la responsabilità dell'avanzamento di uno specifico processo; a vari livelli di astrazione, l'introduzione dei processori virtuali torna utile in quanto consente di shematizzazione ed inquadrare meglio i vari processi e le relative interazioni che si manifestano in un sistema EDP.
  •  
  •  
  • Classificazione dei Processi
  •  
  • Processi Sequenziali
  • Processi in cui le singole azioni si succedono in sequenza, in modo ordinato e conseguenzale; una azione elementare di un'attività sequenziale si dice Passo o Step.

  • Processi Concorrenti o Paralleli
  • Due (o più) processi si dicono concorrenti o paralleli se le loro azioni possono procedere in parallelo nel tempo, cioè se un'azione può iniziare prima che l'altra sia terminata; possiamo distinguere tre casi, a seconda di come avanzano le azioni (step) dei processi nel tempo:
  • 1. Overlapping: l'avanzamento è sovrapposto;
  • 2. Interleaving: l'avanzamento è alternato;
  • 3. Misto: interleaving/overlapping.
  •  
  •  
  •  
  •  
  • Il caso 1 implica che ogni azione sia svolta da un distinto esecutore fisico (processore) ed equivale ad un Parallelismo Reale: p processori per a=p azioni.
  • Il caso 2 (e 3) corrisponde alla situazione in cui si dispone di un numero p di processori inferiore al numero a di azioni da eseguire ed equivale ad un quasi-parallelismo o ad un Parallelismo Virtuale: p processori per a>p azioni (allo scopo, si potrebbero introdurre a processori virtuali distinti per rappresentare lo svolgimento delle azioni; tali azioni si svolgeranno in modo asincrono).
  •  
  • Processi Comunicanti o Interagenti
  • Sono processi in cui l'avanzamento di uno può condizionare l'avanzamento degli altri (p.es. processi attivati in parallelo su un sistema distribuito i quali cooperano in una stessa applicazione); l'interazione tra processi può essere:
  • Diretta o Cooperazione: i processi evolvono, scambiandosi informazioni, cooperando ad uno scopo comune;
  • Indiretta o Competizione: i processi competono sull'uso di una risorsa comune o non fruibile da tutti in una certa situazione (tale situazione implica l'attivazione di una funzione di arbitraggio da parte di un qualche gestore della risorsa).
  •  
  • Processi Disgiunti
  • Due o più processi non interagenti, cioè indipendenti l'uno dall'altro (anche se concorrenti) si dicono Disgiunti.

  • Interazioni tra Processi
  •  
  • La comunicazione tra processi interagenti può avvenire se i rispettivi processori fisici (che eventualmente implementano processori virtuali) sui quali essi avanzano possono comunicare; allo scopo, tale comunicazione può essere preliminarmente effettuata in due modi principali:
  •   tramite canali fisici di comunicazione (scambio di messaggi, tipico nelle reti di calcolatori o nei sistemi non prevedenti una memoria comune ai vari processori); in questo caso si parla di comunicazione tramite ambiente locale (ogni processo accede a variabili locali ad esso riservate);
  •   tramite aree di memoria accessibili a tutti i processi (impiego di variabili condivise, tipico nei sistemi con architettura a memoria comune a tutti i processori); in questo caso si parla di comunicazione tramite ambiente globale (ogni processo può accedere a variabili comuni disponibili anche agli altri processi).
  •  
  • Lo scambio dei messaggi nelle comunicazioni tra processi può essere di tipo diretto o indiretto: nel primo caso il destinatario di un messaggio trasmesso deve essere subito pronto a riceverlo, pena la sua perdita (comunicazioni in tempo reale o di tipo telefonico), nel secondo caso il messaggio trasmesso può essere memorizzato dal ricevente per un'elaborazione differita (comunicazioni di tipo postale, basate sull'impiego di code o di mailbox).
  •  
  • Soprattutto nei sistemi in multiprogrammazione, come si vedrà, la comunicazione tra processi può avvenire tramite particolari messaggi, di natura hardware, che si chiamano interruzioni (Interrupts), assume pertanto notevole importanza lo studio dei meccanismi di interrupts nell'ambito dei sistemi EDP.
  •  
  • Affinche la comunicazione tra processi sia corretta occorre che le operazioni, gli eventi e le azioni in essi coinvolte si susseguano secondo un certo ordine ed opportune cadenze temporali, più precisamente occorre che tra i processi sia garantita una Temporizzazione e, più in particolare, una Sincronizzazione, tramite appositi meccanismi hardware e/o software; queste considerazioni portano alla distinzione tra diversi stati di un processo.
  •  
  • Riguardando le cose dal punto di vista di un sistema in multiprogrammazione, lo stato di un processo è una situazione referenziata dal nucleo del SO per distinguere e gestire i vari processi multiprogrammati.

  • stati di un processo
  •  
  • In generale, col termine Stato, o meglio stato di avanzamento di un processo si intende la condizione in cui si può trovare il processo rispetto alla possibilità di avanzare su uno dei processori fisici a disposizione.
  • Anche il concetto di stato, come quello di processo, è relativo al livello di approfondimento con cui si conduce un’analisi, potendo essere individuato sulla base della considerazione dei microprocessi (ove si potrebbero ancora distinguere azioni ed operazioni) che si svolgono all’interno di una CPU o sulla base di semplificazioni anche eccessive considerando quali singole azioni di un processo la versione dinamica di un intero blocco complesso di un programma (determinando così un modello che potrebbe non fornire una descrizione utile di ciò che avviene a livello di sistema).
  • Inoltre, l’individuazione dello stato coinvolge non solo la CPU ma anche altre risorse che possono concorrere a definirlo, quali aree di memoria, canali, dispositivi di I/O ed altro.
  • Conviene dunque assimilare lo stato di un processo, per i nostri scopi, allo stato in cui esso si trova rispetto all’utilizzazione della risorsa principale, la CPU, ed alla condizione in cui è posto il processo dal nucleo del SO, che ne è il gestore (stato di utilizzazione o di attesa della CPU, stato di utilizzazione di una periferica, stato di accodamento in una lista di una certa risorsa con priorità assegnata, ecc.).
  • Introducendo il concetto di stato possiamo riguardare un processo come un insieme ordinato (in qualche modo) di stati che, a partire da un determinato stato iniziale, il sistema assume durante l’esecuzione del corrispondente programma o di una sua parte.
  • In quest’ottica, l’analisi temporale dell’evoluzione di un processo può essere rappresentata tramite un Diagramma degli Stati, diagramma che evidenzierà, nelle elaborazioni in parallelo, il corretto ordine di esecuzione delle azioni e in che modo i processi possano avanzare in parallelo o determinino legami di sequenzialità; per tale motivo il diagramma degli stati prende anche il nome di Diagramma delle Precedenze.
  • In prima approssimazione, visto che i compiti di gestione delle risorse sono affidati al SO (percui l’utente le può utilizzare solo in modo indiretto), possiamo distinguere i processi in Processi Utente o applicativi e Processi di Sistema.
  • I processi utente derivano dall’esecuzione delle istruzioni elementari dei programmi applicativi, mentre i processi di sistema derivano dal SO, che li attiva per esigenze interne e/o per gestire e soddisfare le richieste dei processi applicativi.

  • Nei sistemi paralleli le precedenti considerazioni non sono più sufficienti, in quanto occorre introdurre moduli e funzioni del SO atti a supervisionare la gestione delle risorse e dei processi paralleli, in modo che le richieste dei processi utente siano implementate per moduli gerarchici, tramite primitive, fino ad arrivare alle risorse fisiche.
  • Una prima esemplificazione di tale situazione (differente a seconda dei sistemi) potrebbe allora essere rappresentata come schematizzato nella slide SO02.
  • Affinchè ad un processo sia associabile uno stato, quindi prima di analizzare le transizioni di stato dei processi, occorre evidentemente che, tramite apposite Operazioni, il processo sia creato nel sistema.
  •  
  •  
  •  
  • Operazioni sui Processi
  •  
  • Creazione: operazione consistente in una serie di azioni atte a generare un processo P nel sistema (svolte dal nucleo del SO, da un’utility o da un altro processo); tali azioni comprendono:
  • l'attribuzione di un nome a P;
  • l’attribuzione di un descrittore di processo a P, contenente tutte le informazioni utili riguardanti il processo;
  • l'inserimento del descrittore di P in apposite tabelle del sistema (in particolare le tabelle JCB-Job Control Block e PCB-Process Control Block);
  • l'analisi delle risorse richieste da P;
  • l'attribuzione di priorità iniziale a P;
  • l'aggancio di P ad eventuali processi "padre" e "figlio";
  • ecc.
  •  
  • Terminazione: operazione consistente in una serie di azioni atte ad eliminare P dal sistema (svolte dal nucleo del SO); tali azioni comprendono:
  • la disallocazione delle risorse associate a P;
  • la cancellazione del descrittore di P dalle tabelle di sistema;
  • le azioni da intraprendere circa eventuali processi collegati a P;
  • ecc.

  • Altre operazioni possono essere le seguenti:
  • Submit (sottomissione di P al sistema, con eventuale accodamento);
  • Sospensione e Ripresa di P;
  • Cambio di priorità di P.
  •  
  •  
  •  
  • Stati di un Processo
  •  
  • Disponibilità (hold): stato in cui il processo è presente nel sistema, in modo che il sistema abbia tutte le informazioni necessarie per poterlo tramutare in un processo attivo; in pratica, tutte le informazioni utili riguardanti il processo, registrate nel relativo descrittore, sono rese note al sistema, nelle cui tabelle è stata riservata un’entrata per inserire tale descrittore; in questo stato si ha un processo che è stato inizialmente sottomesso ed inserito nel sistema ed al quale non sono state ancora assegnate risorse reali, cioè un processo non ancora referenziato dal nucleo del SO e percui il sistema ha espletato solo diverse necessità (identificazione del processo, risorse di cui si chiede l’assegnazione permanente, quantità di memoria richiesta, livello di priorità, ecc. - si può pensare tale stato come ad uno stato di "attivato"), oppure un processo che per motivi diversi è stato sospeso ed a cui sono state tolte le risorse (spesso, per questioni di efficienza ed ottimizzazione, in determinate situazioni si sospendono momentaneamente quei processi che per troppo tempo permangono inattivi in memoria o appesantiscono talune gestioni, ripristinandoli a tempo debito - possiamo assimilare lo stato in dette situazioni ad una condizione di "parcheggio"); generalmente, il SO mantiene una lista dei processi sospesi, o comunque delle informazioni, per gestire i processi in tale stato.
  • Pronto (ready): stato in cui il processo è potenzialmente in grado di avanzare ma non dispone ancora della risorsa principale, il processore, per passare allo stato di esecuzione; in pratica, nello stato di ready il processo è in grado di evolvere ma vi permane in attesa che gli venga assegnata la (o una) CPU per utilizzarla; generalmente il SO mantiene una Ready List per gestire i processi in tale stato; la transizione allo stato di ready può avvenire o quando il processo è inserito per la prima volta nella ready list (dallo stato di disponibilità) o a seguito di particolari eventi gestiti dal SO (interruzioni di sistema, fine del quanto di tempo assegnato al processo).
  • Esecuzione (running): stato in cui il processo, disponendo delle risorse necessarie, sta avanzando su un processore; lo stato di running, che verrà opportunamente segnalato nelle tabelle di sistema associate ai processi, si raggiunge dallo stato di ready.

  • Bloccato (blocked): stato in cui il processo, a seguito di una richiesta effettuata da esso stesso o di una attesa di un messaggio o segnale per avanzare, viene sospeso e attende passivamente il verificarsi di un qualche particolare evento (ottenimento di una risorsa, realizzazione di un sincronismo, attesa di un dato che deve essere fornito da un’operazione di I/O in corso, ecc.); generalmente il SO mantiene una Blocked List per gestire i processi in tale stato; lo stato di blocked è uno stato di attesa (wait) di disponibilità di tutte le risorse necessarie affinchè il processo possa avanzare, di norma tale situazione è determinata dalle richieste di I/O effettuate dal processo (che per riprendere l’esecuzione, ad I/O servito, dovrà essere riattivato dalla ready list, seguendo le transizioni blocked-ready-running).
  •  
  • Considerando come stati anche le operazioni suddette, il ciclo di vita di un processo, cioè le transizioni che possono avvenire tra i vari stati, può essere rappresentato, in prima istanza, tramite il diagramma di transizione di stato rappresentato nella slide SO03.
  •  
  • Nei sistemi in multiprogrammazione o in multielaborazione, ove si mantengono attivi o in esecuzione più processi simultaneamente, inevitabilmente sorgono problematiche legate, da un lato, alla necessità di sincronizzare i processi e dall’altro alla necessità di condividere in modo non conflittuale le risorse del sistema, in genere limitate rispetto alle numerose richieste dei processi, spesso emanate contemporaneamente o entro brevi intervalli di tempo.
  • Nella sezione dedicata ai Processi Concorrenti, più oltre, vedremo le fondamentali problematiche concernenti l’interferenza e la cooperazione tra processi concorrenti e quali soluzioni possono adottarsi per gestire le transizioni di stato e le interazioni tra processi nei contesti suddetti.
  • Per un primo approccio ai sistemi più complessi si analizzi il diagramma di transizione di stato rappresentato nella slide SO04.
  •  

risorse

  •  
  • Risorsa
  • Entità Hardware o Software necessaria per l'elaborazione dell'informazione.
  •  
  • Una Risorsa consiste dunque in una componente Hw o Sw (CPU, periferiche, messaggi, dati, ecc.) necessaria per creare o far avanzare un Processo.
  • Le risorse sono generalmente gestite dal SO.
  •  
  • Col termine Scheduling si intende la politica di gestione delle risorse, cioè i criteri secondo cui si assegna una risorsa R ad un processo P.
  • Una risorsa può essere assegnata a più processi, i quali possono richiederne l'impiego anche simultaneamente (se possibile), lo scheduling delle risorse dovrà dunque basarsi su criteri di assegnazione che tengano nella dovuta considerazione fattori quali i seguenti:
  •   priorità dei processi cui assegnare la risorsa;
  •   tempi di utilizzazione/rilascio della risorsa da parte dei processi;
  •   gestione delle contese e delle situazioni di stallo (deadlock);
  •   interazioni con altri scheduling;
  •   possibilità di uso della risorsa garantibile a tutti i processi;
  •   gestione di situazioni di mutua esclusione, ecc.
  •  
  • Col termine Capability di un processo P su di un oggetto O in un istante t si intende l'insieme delle operazioni che P può eseguire su O nell'istante t.
  • Si noti che una capability va intesa in senso dinamico, potendo essa mutare nel tempo, essere trasferita tra processi, ecc.
  •  
  • Col termine Molteplicità di una risorsa si intende il numero max di processi che possono utilizzarla contemporaneamente.
  • Una risorsa può avere molteplicità unitaria, con riguardo alla sua natura (p.es. una CPU o una tastiera) o al modo più idoneo di utilizzarla (p.es. una printer o un archivio in scrittura), molteplicità finita di ordine n o anche infinita (p.es. un'area disco o un'area RAM in lettura).

 

  • Se una risorsa ha molteplicità finita non unitaria e risulta completamente impegnata allora i processi che ne richiedono l'utilizzo dovranno essere posti in delle code di attesa, opportunamente gestite, ed ogni processo, in relazione alla risorsa, dovrà svolgere le seguenti azioni:
  • - richiesta;
  • - ottenimento;
  • - uso;
  • - rilascio.
  •  
  • In alcune situazioni si effettua su di un processo una forzatura di rilascio della risorsa da esso usata, prima che il processo stesso termini di utilizzarla, in tal caso di parla di prerilascio (preemption).
  • La tecnica del prerilascio è applicabile a determinate risorse (p.es. alla CPU, ma non sarebbe utile per una printer) e non dovrà compromettere l'evoluzione del processo coinvolto, la risorsa potrebbe essere infatti riassegnata al processo in un secondo momento.
  •  
  •  
  •  
  • Classificazione delle Risorse
  •  
  • In base alla disponibilità di utilizzo (molteplicità) si hanno:
  • Risorse Seriali: risorse non condivisibili da più processi simultaneamente (molteplicità = 1).
  • Risorse Comuni: risorse condivisibili da più processi simultaneamente (molteplicità > 1).
  •  
  • In base all’impiego si hanno:
  • Risorse Consumabili: risorse producibili da alcuni processi e fruibili o distruggibili da altri (p.es. i messaggi).
  • Risorse Riusabili: risorse riusabili ripetutamente da diversi processi.
  • Risorse Permanenti: risorse non modificabili dai processi (p.es. memoria, periferiche, dischi).

  • In base ai criteri di assegnazione ai processi si ha:
  • Assegnazione Statica: assegnazione di una risorsa R ad un processo P dalla creazione alla terminazione di P.
  • Assegnazione Dinamica: assegnazione di una risorsa R ad un processo P in fase di avanzamento di P, con rilascio dopo l'uso.
  • Risorsa Dedicata: assegnazione permanente di una risorsa R ad un processo P; in questo caso la risorsa potrebbe pure essere utilizzata da un altro processo P', secondo una logica client/server (P'=client può accedere a R tramite P=server).
  •  
  • Giova osservare che tra un processo ed una risorsa deve esistere una entità che svolga il ruolo di Gestore della risorsa; spesso il gestore delle risorse è direttamente la CPU o il Nucleo del SO ma in diverse situazioni possono assumere tale funzione altre componenti di un SED (p.es. i Driver di I/O o Handler di periferica, che sono particolari processi abilitati a gestire le comunicazioni tra i dispositivi di I/O ed i processi che ne richiedono i servizi).
  •  

generalità

  •  
stati di una cpu
  •  
  • Una volta affidata la gestione delle risorse al SO occorrerà impedire che i processi utente (generico) possano direttamente utilizzarle; ad esempio, non si potrà far eseguire all’utente istruzioni macchina di accesso ad aree riservate di memoria o disco, di attivazione DMA, di definizione dello spazio indirizzabile di un programma, di gestione di alcuni tipi di interrupt, ecc.
  • Una soluzione al problema suddetto può essere quella di non consentire all’utente la programmazione assembler, riservandogli solo la possibilità di implementazione software mediante linguaggi ad alto livello; in tal caso, all’utente saranno visibili risorse astratte, ad un certo livello, le cui funzioni fisiche saranno accessibili tramite primitive che opportunamente implementate disciplineranno un uso controllato ed ottimizzato delle risorse hardware.
  • Un’altra soluzione, più praticata della precedente, è la seguente: si introducono nel sistema appositi meccanismi hardware/firmware che impediscono ai processi utente di eseguire particolari istruzioni (di specifica competenza del SO) chiamate Istruzioni Privilegiate e riservate in esclusiva al SO.
  • In pratica, si suddivide il set di istruzioni del processore in 2 classi: istruzioni standard ed istruzioni privilegiate, di conseguenza la CPU potrà trovarsi in 2 stati distinti:
  • Stato Supervisore: è lo stato in cui è in esecuzione il Nucleo del SO, al fine di eseguire le istruzioni privilegiate;
  • Stato Problema: è lo stato (detto anche stato utente) in cui non è in esecuzione il nucleo del SO, in tale stato non privilegiato, in cui sarà in esecuzione il programma utente, ogni tentativo di esecuzione di istruzioni privilegiate sarà considerato illegale e provocherà un errore a tempo di esecuzione (trap).
  •  
  •  
  • In alcuni elaboratori sono previsti diversi stati privilegiati, allo scopo di gestire in modo più stratificato ed efficiente i diritti di accesso alle varie risorse.

generazione e attivazione del so

  •  
  • Generazione del sistema operativo
  • Un SO di norma è progettato ed implementato in modo da soddisfare potenzialmente le esigenze di diverse categorie di utenti, solo in casi particolari un SO viene realizzato per sistemi o scopi specifici (sistemi veloci di controllo e di acquisizioni dati, speciali sistemi dedicati, esigenze di spazio e miniaturizzazione, applicazioni richiedenti bassissimi tempi di risposta, ecc.).
  • Il SO viene pertanto fornito su nastro o disco e sarà compito del sistemista di una data organizzazione ritagliarlo, configurarlo nel modo migliore in base alle specifiche esigenze del proprio sistema informatico ed informativo (tayloring); allo scopo, insieme al SO viene fornito un apposito programma di generazione del SO.
  • Tale programma, sulla base delle specifiche passate dall’utenza, parametrizzerà il SO operativo originario per generare una sua versione configurata; le specifiche passate dall’utente riguarderanno le caratteristiche delle risorse hardware e tutta una serie di opzioni tali da fornire una copia ottimale del SO per la specifica utenza.
  •  
  • Saranno infatti da specificare elementi quali:
  • tipo di CPU, set di istruzioni esteso, aritmetica FP, processori ausiliari, ecc.;
  • quantità e tipo di memoria installata;
  • dispositivi di I/O, loro caratteristiche e codici di riferimento, numeri di interrupt, ecc.;
  • numero e dimensioni dei buffer, algoritmi di scheduling, numero max di processi da supportare, ecc.
  •  
  • La generazione del SO può avvenire in due modi diversi:
  • si compila il codice sorgente della copia del SO generato;
  • si adatta il SO originario alle specifiche richieste di configurazione, creando una serie di tabelle e selezionando appositi moduli di libreria.

 


Attivazione del sistema operativo
L’attivazione del SO, o procedura di Bootstrap, è, in sostanza, la procedura con cui si porta in memoria centrale il nucleo o la parte residente del SO; nei moderni sistemi tale procedura è stata automatizzata e può essere sommariamente descritta dalla figura seguente.

 


comunicazione col so

 

La comunicazione col SO può avvenire in due modi principali:
- Comunicazione tramite comandi;
- Comunicazione tramite chiamate al sistema
(System Call o SVC-Supervisor Call).

Comunicazione tramite comandi
- JCL (Job Control Language) in Batch
(necessita dell’interprete JCL).
- Comandi/Messaggi in Ambiente Interattivo
(necessita dell’interprete dei comandi).
- Menu/Icone in ambiente cosiddetto user-friendly
(necessita di interfacce GUI-Graphics User Interface).

Comunicazione tramite chiamate al sistema
Le SVC forniscono l’interfaccia tra il programma in esecuzione ed il SO, esse sono inseribili nel programma e viste come particolari chiamate a sottoprogramma (routines di SO).
Le SVC sono implementate tramite istruzioni la cui esecuzione provoca generalmente un Interrupt ed il passaggio della CPU allo stato Supervisore (oltre al salto al sottoprogramma chiamato e al salvataggio dello stato del programma chiamante).
Le SVC sono in genere direttamente disponibili nei linguaggi assemblativi e normalmente chiedono l’espletamento di funzioni quali il controllo (a basso livello) dell’esecuzione di un programma, la gestione di dispositivi di I/O o di files, l’acquisizione o la gestione di informazioni di stato del sistema, ecc.
Nei linguaggi ad alto livello generalmente le istruzioni specificano operazioni di fatto gestite dal SO: le istruzioni sono tradotte (compilazione) in apposite SVC sotto il controllo del SO (e non direttamente dell’utente, cioè del programma).


mapping della memoria

Per poter far avanzare un processo P occorre che il processo disponga delle risorse necessarie allo scopo, in particolare occorre che il programma associato a P risieda in un’apposita area di CM (si ricordi che il programma si alloca in CM in formato codice eseguibile e che per esso si possono distinguere 2 aree di memoria: area istruzioni ed area dati).

Si dice Spazio Fisico (o reale) degli indirizzi di memoria l’insieme degli indirizzi delle locazioni di memoria accessibili via hardware (o a livello di una macchina assembler).
Lo spazio fisico, SF, costituisce l’insieme degli indirizzi della memoria fisica effettivamente accessibili.

Si dice Spazio Logico (o virtuale) degli indirizzi di memoria l’insieme degli indirizzi delle locazioni di memoria referenziati da un processo (o da un processore virtuale).
Lo spazio logico, SL, corrisponde alla visione di una memoria logica da parte del programmatore, tale da consentire al processo (quindi al programma) di riferirsi alla memoria in modo indipendente dalle operazioni fisiche di gestione della stessa (reperimento di aree libere, allocazione dei pgm, indirizzamento, protezione, allocazione delle strutture logiche dei dati, ecc.).
Il programmatore ad alto livello, operando con una macchina astratta, vede la memoria logica come uno spazio virtuale indirizzabile su cui operare: sarà compito del SO (memory management) implementare le operazioni logiche del programma in modo opportuno, sgravando così il programmatore dal compito di tradurre la logica del pgm in operazioni fisiche e consentendogli di concentrarsi sul problema da risolvere.

Si dice Mapping della memoria una funzione M di traduzione degli indirizzi logici in indirizzi fisici
M:SL Þ SF
tale da associare ad ogni indirizzo logico relativo ad un processo un corrispondente e ben determinato indirizzo fisico di CM.

Uno dei compiti principali del SO è quello di trasferire lo spazio logico degli indirizzi di un programma nello spazio fisico degli indirizzi in CM avvalendosi, in particolare, dei seguenti moduli:
Loader
Ha, tra i suoi compiti, quello principale di allocare il pgm in un’opportuna area di CM.
Memory Management
Ha, tra i suoi compiti, quello di implementare la funzione di mapping M, dipendentemente dalla strutturazione della memoria logica e di quella fisica.


rilocazione dei programmi

Per trasferire correttamente un programma da un supporto di memorizzazione esterno ad una determinata area di CM (cioè per trasferire lo spazio logico degli indirizzi del pgm nello spazio degli indirizzi fisici) occorre almeno conoscere l’indirizzo della prima locazione di CM da cui iniziare il caricamento del pgm.
Si indichi con Ib (Indirizzo base) l’indirizzo di tale locazione.

Si dice Rilocazione una funzione R di traduzione da indirizzo logico Il a indirizzo fisico If del tipo:
R(Il)=Il+Ib
indicando con R un fattore (corrispondente ad un generico indirizzo base), che dicesi Fattore di Rilocazione, la suddetta funzione può esprimersi nel modo:
If=Il+R
ove Il è un indirizzo rilocabile ed If un indirizzo assoluto.

La rilocazione dei programmi è un’operazione generalmente necessaria per le seguenti ragioni preliminari:

  • un pgm fa riferimento ad una memoria logica, cioè ad indirizzi logici (tramite identificatori se scritto in linguaggi high level, anche in modo diretto se scritto in linguaggi assemblativi) che nell’ambito del modulo oggetto (modulo rilocabile prodotto dal compilatore o dall’assemblatore) possiamo ipotizzare vadano da 0 ad n;
  • il codice eseguibile del pgm deve essere caricato in CM a partire da un indirizzo Ib che sarà determinato dal Loader e dal Memory Management in funzione delle caratteristiche del sistema (mono o multiprogrammazione, tecniche di gestione della memoria, architettura del sistema, tipo di indirizzamento, ecc.);
  • caricando il pgm dall’indirizzo fisico Ib occorrerà modificare i suoi indirizzi per il fattore di rilocazione R, distinguendo - nell’ambito del pgm - gli indirizzi da modificare da quelli assoluti, cioè non suscettibili di rilocazione (p.es., indirizzi associati a dispositivi di I/O con tecnica memory-mapped, indirizzi dichiarati come assoluti tramite apposite direttive al compilatore o all’assemblatore); a tale scopo, sarà compito del compilatore o dell’assemblatore associare al pgm una Tabella di Rilocazione;
  • la necessità di determinare R va dal caso più semplice della monoprogrammazione (pgm allocato dal primo indirizzo di CM libera, generalmente noto o determinabile preventivamente) ai casi più complessi di sistemi in multiprogrammazione o multielaborazione operanti sulla base di particolari tecniche di gestione della memoria (segmentazione, paginazione, memoria virtuale), ove la rilocazione deve essere applicata in modo dinamico ed a singole sezioni di pgm opportunamente realizzate e caricate in memoria secondo algoritmi di scheduling più o meno sofisticati.

La rilocazione può essere effettuata in modo statico o dinamico.
Rilocazione Statica
Il codice eseguibile del programma viene caricato in memoria già modificato del fattore di rilocazione; in pratica, il codice eseguibile viene sottoposto al Loader il quale genera, a partire da esso, il codice assoluto modificandone gli indirizzi rilocabili per il fattore di rilocazione.
Rilocazione Dinamica
Il codice eseguibile del programma viene caricato in memoria inalterato e la rilocazione avviene a tempo di esecuzione; in pratica, occorre che il sistema preveda appositi meccanismi di traduzione dinamica degli indirizzi (DAT - Dynamic Address Translation), reperendo R dalla MMU (Memory Management Unit) eseguendo speciali istruzioni prima di indirizzare la memoria o da un apposito registro della CPU chiamato Registro Base.

Uno schema esemplificativo di DAT è dato in figura.

    

Si noti che col semplice DAT sopra rappresentato si può realizzare anche una qualche forma di protezione delle informazioni: inibendo infatti al programma utente l’accesso al registro base viene protetta l’area di memoria inclusa tra gli indirizzi fisici che vanno da 0 al valore contenuto nel registro (If=Il+Ib), in cui potrebbero risiedere i pgm residenti del SO.

In alcuni casi specifici viene lasciato al Loader il solo compito di caricare il pgm in CM all’indirizzo comunicato dall’assemblatore (o dal compilatore); in tali casi si parla di caricatore assoluto e di programma assoluto, ovviamente la determinazione dell’indirizzo di caricamento sarà svolta sulla base delle caratteristiche del sistema in uso.
Quale esempio di caricatore assoluto si consideri il caricatore Bootstrap o IPL (Initial Program Loader).


Note sul caricamento dinamico dei programmi
Anche se i moderni elaboratori (PC e affini) dispongono di sistemi di indirizzamento piuttosto grandi (24, 32 bit) ed utilizzano memorie fisiche di dimensioni ragguardevoli (64, 128M e oltre) e tecniche di virtualizzazione della memoria, con l’apparire di SO ed applicazioni sempre più complesse ed integrate le esigenze di memoria sono proporzionalmente cresciute, ponendo all’utenza, soprattutto nella fascia medio-bassa, il problema della limitatezza del sistema di indirizzamento.
Il sistema di indirizzamento infatti, quale aspetto architetturale di un elaboratore, pone dei limiti nella utilizzazione della memoria, limiti dovuti non alla effettiva disponibilità di memoria fisica ma appunto allo spazio indirizzabile con gli indirizzi disponibili.
Ciò nonostante, coi soli obsoleti indirizzi virtuali a 16 bit anche i vecchi PC riuscivano ad indirizzare 512K di memoria anzichè i 64K ricavabili da essi.
Per ovviare alla limitazione dello spazio indirizzabile si possono seguire due approcci di tipo diverso (in pratica, nei moderni sistemi tali limitazioni non sussistono più).
Una soluzione consiste nell’utilizzare appositi Registri Base, opportunamente programmati, in modo da far apparire la memoria come un set di spazi virtuali disgiunti raggiungibili cambiando i valori dei registri base (in pratica, disponendo di indirizzi a 16 bit, si indirizzano più banchi di memoria fisica da 64K con indirizzamento relativo ai registri base).
Questa soluzione è prevalentemente tecnica e si adatta ai linguaggi a basso livello (assembler).
Una seconda soluzione consiste nell’utilizzare le cosiddette Tecniche Overlay: se un programmi eccede la disponibilità di memoria esso viene segmentato e suddiviso in moduli di dimensione opportuna che vengono caricati in memoria in modo esclusivo (solo uno alla volta, il quale ²ricopre² il precedente), tali moduli (object) possono essere richiamati con istruzioni tipo CHAIN e fanno riferimento ad un’area comune (COMMON AREA) ove sono conservate le variabili comuni e/o lo stato dei moduli elaborati in precedenza.
Questa soluzione, di natura software, è implementabile anche tramite linguaggi ad alto livello.

La slide SO05 schematizza un cosiddetto processo Compile-Link-Go, cioè le fasi che a partire dalla scrittura del programma sorgente portano al programma eseguibile quindi alla sua esecuzione.

processor management

Il Processor Management è descritto nelle slide SO06, SO07, SO08, SO09, SO10.
Segue una sintesi per introdurre solo alcune nozioni di interesse, discussioni più ampie, esempi ed approfondimenti saranno svolti direttamente in aula.

 

processi concorrenti

Programmazione Concorrente

La possibilità di poter svolgere più operazioni contemporaneamente, di tipo diverso (quali quelle di elaborazione e di I/O nei più semplici sistemi in multiprogrammazione) ed anche dello stesso tipo (nei sistemi multiprocessor o ad architettura parallela, in cui lavorano più processori fisici distinti), deve essere supportata da appositi linguaggi che implementino tecniche e costrutti linguistici adatti per esprimere e gestire il potenziale parallelismo del sistema in modo efficiente e non conflittuale.
Tali linguaggi devono insomma potersi classificare come linguaggi di programmazione concorrenti (tra i quali citiamo il Cuncurrent Pascal, l’ADA, il Modula-2).
La programmazione concorrente, come vedremo, consente, nei sistemi più evoluti, sia l’esecuzione parallela di più programmi che l’esecuzione parallela di una singola istruzione di un programma.
Oltre alla disponibilità di appositi linguaggi, nella programmazione concorrente occorre che il nucleo del SO implementi apposite Primitive per risolvere le interazioni - cooperazione o competizione - tra i processi, in modo da garantire i sincronismi ed una corretta ed efficiente gestione delle risorse.
Tali primitive possono essere implementate, a seconda dei vari sistemi e dello scopo che esse si prefiggono, in modi diversi (da singole istruzioni implementate in hardware a programmi più o meno complessi), comunque esse devono rispondere al requisito essenziale di essere funzioni indivisibili, cioè operazioni non interrompibili e quindi non soggette ad interleave (un processo che sta eseguendo una primitiva, al fine di realizzare un sincronismo o qualche altra funzione, non può essere interrotto, altrimenti cadrebbe lo scopo per il quale è stata realizzata la primitiva).


Problematiche sui Processi

Mutua Esclusione
Condizione in cui devono trovarsi 2 o più processi i quali chiedono contemporaneamente l’uso di una stessa risorsa che per le sue caratteristiche o modalità di impiego può essere utilizzata solo da un processo alla volta (risorsa seriale o a molteplicità 1).

Stallo
Situazione in cui permangono 2 o più processi - causa il verificarsi di condizioni cicliche incompatibili nella richiesta e nel possesso di risorse, tali da bloccare indefinitamente i processi - perchè non possono verificarsi gli eventi necessari per farli avanzare.

Produttore/Consumatore
Problematica legata a quella più generale di sincronizzazione e cooperazione tra processi. Si ha un rapporto di tipo produttore/consumatore tra processi quando essi, cooperando al raggiungimento di uno scopo, sono tali percui un processo P (produttore) deve produrre una risorsa R che è necessaria per far avanzare un processo C (consumatore), la cooperazione tra P e C deve essere sincronizzata affinchè l’interazione diretta tra i processi avvenga correttamente.

Sezione Critica
Una sezione critica - di un processo P rispetto ad una risorsa condivisa R - è quell’insieme di istruzioni percui P agisce su R; una sezione critica deve essere un blocco di codice indivisibile (cioè non soggetto a sequenze di interleave) e se P è in una sezione critica (rispetto ad una certa risorsa) nessun altro processo (rispetto alla data risorsa) può entrarci finchè P non ne è uscito (mutua esclusione).


Problematiche di Scheduling delle Risorse

Mutua Esclusione

Se un processo è in esecuzione su una risorsa nessun altro processo può essere in esecuzione su quella risorsa.

Attesa Limitata

Ogni processo che cerca di accedere ad una risorsa deve poterlo fare in un tempo finito (fairness).

Avanzamento

In ogni istante una risorsa deve poter essere assegnata ad un processo, in modo da garantire che un processo bloccato fuori dalla risorsa non possa impedire agli altri l’accesso alla risorsa (lockout).

Ottimizzazioni

Occorre minimizzare il tempo medio di attesa delle risorse e la variabilità dei tempi di attesa, tenere conto della priorità dei processi, delle varie politiche di scheduling, ecc.

Assegnazione delle risorse

All’atto della generazione di un processo per l’esecuzione il job scheduler assegna staticamente al processo tutte le risorse non condivisibili ad esso necessarie (di norma le risorse la cui assegnazione dinamica provocherebbe sovrapposizioni di effetti tali da rendere errata l’interpretazione delle informazioni); al fine di ottimizzare l’uso delle risorse è spesso necessario condividerle tra i processi, non dedicandole in esclusiva a qualcuno soltanto; allo scopo, si fa in modo che il job scheduler assegni staticamente solo le risorse esplicitamente richieste dal processo, lasciando al traffic controller il compito di assegnare le altre risorse (condivisibili e non) ai processi e di gestirne la competizione, tale assegnazione avverrà ancora staticamente ma su domanda ed a tempo.

Interferenza tra processi

Processi interferenti potrebbero evolvere indipendentemente l’uno dall’altro, salvo che non richiedano allo stesso tempo l’uso di una stessa risorsa (competizione che genera una cosiddetta condizione di corse - race condition); qualora una risorsa sia assegnata in modo esclusivo ad un solo processo (per motivi di necessità) occorre che siano soddisfatti i requisiti di: mutua esclusione - attesa limitata - avanzamento.

Cooperazione tra processi

Processi cooperanti sono logicamente interconnessi e l’avanzamento di uno viene a dipendere da una risorsa che l’altro deve produrre per esso; in questo caso i problemi di competizione sulle risorse condivise devono essere risolti direttamente dai processi tramite opportune sincronizzazioni.


Problematiche di Scheduling dei Processori

Attesa Limitata
Occorre garantire che ogni processo possa avanzare in un tempo finito (fairness).

Throughput (tasso di servizio)
Occorre massimizzare il numero medio di processi serviti nell’unità di tempo.

Tempi di Risposta

Occorre minimizzare i tempi di attesa e la loro varianza, rendendoli possibilmente prevedibili e massimizzando il numero di utenti interattivi per i quali tali tempi sono accettabili.

Scheduling Overhead
Occorre minimizzare l’impiego di risorse per implementare le politiche di scheduling.

Uniformità
Occorre favorire un impiego uniforme di tutte le risorse, evitando di sottoutilizzarle o sovrautilizzarle.

memory management

 

Il Memory Management è descritto nelle slide SO11, SO12, SO13, SO14, SO15.

device management

 

Il Device Management è descritto nelle slide SO16, SO17.
Segue una trattazione inerente la gestione del disco, comprendente anche taluni argomenti di pertinenza del modulo File System.

gestione del disco

GENERALITà

I principali sistemi di memorizzazione permanente delle informazioni, sistemi esterni chiamati comunemente memorie di massa, sono i seguenti:
- unità a nastro magnetico;
- unità a tamburo magnetico;
- unità a disco magnetico;
- memorie ottiche.
In questa sezione parleremo delle unità a disco magnetico, visto che attualmente esse sono ancora le memorie di massa ad accesso diretto (DASD-Direct Access Storage Device) più diffuse e dalle prestazioni ad alto livello.
Le più recenti ed efficienti memorie a tecnologia ottica saranno trattate a parte.
La gestione del disco magnetico spetta al Sistema Operativo (SO), in particolare ai moduli chiamati Device Management e Information Management o File System (FS); uno dei compiti principali del FS consiste nel fornire gli opportuni strumenti (comandi, operatori, meccanismi) atti a garantire una ottimale gestione del disco, realizzando l'efficienza in spazio e in tempo e consentendo all’utenza un certo livello di astrazione dalle risorse fisiche e dalle strutture dati concrete.
In generale, i moduli del SO preposti alla gestione del disco, a seguito delle varie operazioni compiute sul supporto (creazione, modifica o cancellazione di registrazioni quali singole informazioni o interi files, operazioni di ricerca ed inserimento su file dati, ecc.), dovranno occuparsi della sua migliore utilizzazione implementando efficacemente, in relazione alla suddetta economia in spazio e tempo ed alle strutture dati, le seguenti funzionalità:
allocazione/recupero di aree-disco;
lettura/scrittura/posizionamento;
gestione delle strutture logiche e fisiche di dati;
scheduling delle richieste di write/read;
gestione delle informazioni di controllo e di servizio;
gestione del trasferimento dati disco-sistema;
gestione di particolari meccanismi (accodamenti, priorità, protezioni, buffering, spooling, memoria virtuale, ecc.).


Il FS assegna lo spazio-disco (che in prima istanza possiamo supporre indirizzabile per settori di lunghezza fissa) in Blocchi, consistenti in uno o più settori aventi indirizzi contigui.
I trasferimenti avvengono tramite letture o scritture di blocchi, identificabili pure come Record Fisici.
In altri termini, il record fisico rappresenta l’unità di informazione trasferibile dall’unità disco al sistema (memoria centrale) con una singola operazione fisica di I/O.
Il FS memorizza i file sul disco in modo da consentire ad un generico processo che fa riferimento alla loro struttura logica l'indipendenza dalla struttura fisica, cioè dalle tecniche di memorizzazione.
Gli aspetti più importanti nella gestione del disco, sia logici che tecnici e tecnologici, interessano comunque non solo il progettista ma anche l'informatico applicativo, conviene quindi analizzarli più da vicino almeno da tale punto di vista.

struttura delle unità disco

La slide SO18 illustra schematicamente come è strutturata un’unità a disco magnetico.
In generale, un sistema a disco, potendo prevedere la gestione di più supporti (volumi), è suddiviso in:
Volumi - Facce - Cilindri - Tracce o piste - Settori.

Informazioni tecniche Generali

Rispetto alle modalità di funzionamento le unità disco possono suddividersi nelle seguenti categorie principali:
Unità a testine mobili
Prevedono una testina per ciascuna superficie (eccetto che per quelle esterne, usate a scopi protettivi) e possono essere a dischi fissi (disco rigido), sigillati ermeticamente insieme alle testine, che sono distanziate dalla superficie di qualche micron consentendo di ottenere velocità di rotazione ragguardevoli (tecnologia Winchester), o a dischi mobili (Disk-pack).
Unità a testine fisse
Prevedono una testina per ogni traccia (di ogni faccia di ogni disco), l'accesso è veloce (è praticamente eliminato il tempo di posizionamento sulla traccia o seek-time), il disco non è asportabile ed il costo è relativamente alto (unità usate soprattutto nei grandi sistemi).
Unità a dischi flessibili (floppy disk)
Sono unità simili a quelle a testine mobili costituite da un solo piatto (dischi a piatto singolo o a cartuccia, fissi o mobili), usate nei PC.

FORM FACTOR (formato del drive):
8"       5,25"     3,5"      2,5"


media (supporto del drive: disco e superficie magnetica)
Tipo Ossidato
Superficie magnetica realizzata con ossido di ferro.
Tipo Placcato
Superficie magnetica realizzata con un fine composto metallico.
   Vantaggi:
- superficie più sottile ed uniforme;
- maggiore durata e maggior sicurezza di non perdere i dati;
- maggiore densità di registrazione dei dati;
- possibilità di ridurre dimensioni e quantità dei dischi del drive;
- migliori possibilità di codifica dei dati.
Tecniche avanzate
In genere presuppongono drive certificati RLL con supporto di tipo placcato.

metodi di codifica dei dati
  mfm (Modified Frequency Modulation)
Tecnica
Le informazioni sono registrate un bit alla volta: ogni bit è individuato sulla superficie magnetica del disco da un differente stato delle particelle magnetiche ad esso corrispondenti (inversioni di flusso generate dalle testine di lettura/scrittura in fase di magnetizzazione del supporto).
   Caratteristiche
-  semplice, affidabile ed economico da implementare;
-  poco efficiente nella memorizzazione dei dati: accanto ai bit dati devono essere incisi bit di controllo (detti pure clock), utili per il loro recupero in fase di lettura (il controller dovrà gestire le inversioni di flusso sul disco), lo spazio disco disponibile per i dati effettivi viene quindi ad essere limitato.
  rll (Run Lenght Limited)
Tecnica
La distanza tra le inversioni di flusso magnetico su disco (run lenght) viene limitata memorizzando i bit dati sotto forma di parole codificate ed associando i bit di controllo ad una certa quantità di bit dati.
   Caratteristiche
-  efficienza nella memorizzazione dei dati (rispetto alla codifica MFM si possono ottenere miglioramenti anche dell'ordine del 50%);
-  più adatta per supporti di tipo placcato.
Tecniche avanzate.


fattore di interleave
Analogamente ai cilindri ed alle tracce (ed alle facce) ad ogni settore del disco viene associato un numero, referenziato dal controller come indirizzo per svolgere le operazioni di lettura/scrittura delle informazioni.
Tenendo conto che:
-  il controller opera sui settori in modo sequenziale;
-  il disco ruota ad una certa velocità (dell'ordine dei 3600 giri/min);
-  le operazioni di trasferimento delle informazioni tra disco, controller e CPU dovranno essere sincronizzate ed ottimizzate;
potrebbe accadere che il settore successivo su cui si debba operare sia già passato sotto la testina di lettura/scrittura prima che il controller dia il segnale operativo; di conseguenza, l'operazione dovrà avvenire dopo un'attesa corrispondente al tempo per fare una rivoluzione del disco, con conseguente rallentamento delle prestazioni del drive.
Per ovviare a tale inconveniente si può ricorrere alla cosiddetta impostazione di interleave: gli indirizzi dei settori contigui sul disco possono essere impostati in modo da sincronizzare il passaggio del settore sotto la testina con la disponibilità del controller, a tale scopo i settori possono essere numerati in modo logico, non necessariamente sequenziale, tale da presentare al controller un settore fisico come il prossimo settore logico.
Per esempio, impostando il fattore di interleave al valore 3 si farà in modo da far gestire al controller ogni terzo settore fisico come il prossimo settore logico ed i settori contigui anziché seguire la numerazione consecutiva:
1    2    3    4    5    6    7    8    9    ...
seguiranno la numerazione:
1    7    13   2    8    14   3    9    15   ...
Il fattore di interleave determina quante rotazioni disco occorrono affinché il controller possa operare su di una traccia.
Tale fattore è spesso espresso come rapporto, p. es. un fattore di interleave 3:1 significa che si richiedono 3 rotazioni del disco affinché il controller possa operare su un settore.
L'impostazione di interleave più efficiente è evidentemente pari a 1:1 (in pratica un non interleave) e richiede un'alta efficienza del controller (e della CPU), dovendo questo poter operare su ogni settore durante una sola rotazione del disco.
Il fattore standard di interleave, generalmente impostato tramite la formattazione del disco a basso livello, può essere modificato dall'utente tramite opportuni programmi di utilità.


indici di velocità (valori medi)
  TEMPO DI ACCESSO CASUALE: Ta = Ts + Tl
Ts = seek time: tempo di posizionamento della testina per portarsi sulla traccia di un cilindro;
Tl = latency time: tempo di rotazione del disco per portare il settore interessato in corrispondenza della testina.
  DATA TRANSFER RATE
La velocità di trasferimento dati effettiva è determinata dalla somma delle velocità di trasferimento:
drive-controller + controller-RAM + velocità di elaborazione della CPU;
tale velocità si misura in in Mbps.
TEMPO DI TRASFERIMENTO: il tempo globale di trasferimento di un settore (o di un blocco) può essere calcolato come somma di: Ta + tempo di lettura/scrittura del settore + tempo di trasferimento dell'informazione in memoria centrale; (Ts è un fattore determinante).

interfacce (Controller)
ST506/412          Seagate Technology
IDE           Integrated Drive Electronics
ESDI          Enhanced Small Device Interface
SCSI          Small Computer System Interface.

fattori elettro-meccanici
  Sistema dischi/testine/motore
Formato pieno (full height)
Formato ridotto (half height)
  Inserimento nel sistema
Normale
Drive esterno
Drive su scheda (hard card)
Scheda multifunzione
  Meccanismo di controllo testine
Motori Stepper (a ruota dentata)
Posizionatori voice-coil (a bobina)
  Servomeccanismi
Dedicati
Incorporati.


features
Parcheggio automatico testine
Formattazione a basso livello
Impostazione fattore di interleave
Compressione dei dati.

Osservazioni
In genere, il media è in alluminio e lo strato magnetico ha uno spessore dell'ordine di qualche micron; la TLS non tocca il disco, la cui velocità di rotazione è costante, ed è aerodinamicamente mantenuta ad una distanza di qualche micron dalla sua superficie.
Per motivi di efficienza, la densità lineare di registrazione (byte/traccia) è variabile, in modo inversamente proporzionale al diametro della traccia.
Per motivi di efficienza, nei sistemi più avanzati si associano alle unità disco apposite memorie elettroniche (cache memory), che fungono da memoria tampone o buffer ad alta velocità, allo scopo di ridurre gli accessi al disco ed ottimizzare il tasferimento dati disco-elaboratore.
Nella formattazione del disco alcuni spazi vengono riservati per scopi gestionali (settorializzazione software), percui l'effettiva capacità formattata (spazio utile per i dati) risulta (leggermente) minore di quella teorica.

Parametri indicativi di riferimento (2002)
Media: placcato
Codifica: RLL
Posizionatore: voice-coil (Ta » 15ms)
Ts: 10 ÷ 20ms
Ta: 15 ÷ 25ms
Interfaccia: ESDI o SCSI
Data transfer rate di interfaccia: » 10Mbps
Fattore di interleave: 1:1
Prezzo drive&controller: Euro 200 circa
(capacità formattata dell'ordine dei 40G).


Tecniche di organizzazione dei dati su disco

Organizzazione per Settori
Ogni traccia (in quanto blocco dati troppo ampio per essere facilmente gestito) è divisa in settori omogenei di uguali lunghezza, riconosciuti da un apposito dispositivo hardware; si assegna ad ogni blocco un numero intero di settori e lo si indirizza tramite la terna di parametri (c,f,s), ove:
c = numero del cilindro;
f = numero della faccia;
s = numero del primo settore del blocco.
L’evidente svantaggio di questa organizzazione sta nel fatto che i blocchi sono a lunghezza fissa e una loro parte andrebbe inutilizzata se le dimensioni del record fisico gestito fossero di dimensioni inferiori del blocco.

 

Organizzazione per Riferimento
Le informazioni vengono registrate sulla traccia, a partire da un punto iniziale, come una serie continua di caratteri: la traccia non è suddivisa in settori bensì in blocchi variabili, contenenti dati ed informazioni di servizio poste in testa alla traccia ed ai singoli blocchi, opportunamente separati da appositi gap; l’accesso ai dati non avviene tramite un indirizzo fisico ma mediante le informazioni di servizio poste in testa alla traccia ed ai singoli blocchi (vedi figura seguente).

 


Tecniche di Scheduling del disco

Le richieste di write/read su disco possono essere numerose e simultanee, occorre perciò accodarle e disciplinare l'accesso al dispositivo adottando opportune politiche gestionali; considerato, inoltre, che i tempi relativi ai DASD sono notevolmente superiori a quelli relativi alla RAM e alla CPU, gli algoritmi di schedulazione sono spesso implementati nel circuito di indirizzamento del DASD, alfine di sgravare il SO da taluni compiti concernenti i dischi.
Le principali discipline di schedulazione sono le seguenti.

  FIFO - First In First Out (FCFS - First Come First Served)
è la più semplice e può garantire un soddisfacente throughput per carichi di servizio (code) non gravosi: le richieste vengono accodate e servite nello stesso ordine di arrivo senza nessun riordinamento, a fronte di richieste casuali non si compie nessuna ottimizzazione degli accessi (con conseguente appesantimento dell'attività di seek).

  SSTF - Shortest Seek Time First
Le richieste vengono rielaborate in modo da servire prima quelle che necessitano dello spostamento di seek minore, cioè quelle che coinvolgono uno spazio-disco più vicino alla traccia attuale, alfine di minimizzare i movimenti del pettine mobile; questa disciplina tende a servire maggiormente le richieste localizzate ed in genere quelle dirette alle tracce centrali e si rivela più adatta per elaborazioni di tipo batch che per elaborazioni di tipo interattivo.

  SCAN (politica dell’ascensore)
Vengono servite le richieste che necessitano dello spostamento di seek minore nella "direzione preferita", invertendola al raggiungimento della traccia più esterna o per mancanza di richieste in quella direzione; la logica di ottimizzazione è quella di muovere il pettine mobile quanto più possibilmente nella stessa direzione con disciplina SSTF; questa tecnica, che come la SSTF punta all'ottimizzazione dei tempi di seek, ha dato luogo a diverse varianti rivelandosi buona sotto molti punti di vista.

  C-SCAN (Circular SCAN)
è una variante della tecnica SCAN: la testina si sposta da un’estremità all’altra servendo le richieste che via via incontra come nella schedulazione SCAN, con la differenza che al raggiungimento dell’ultima richiesta nella direzione preferita essa viene riposizionata all’inizio del disco senza servire le richieste sul percorso di ritorno; lo scopo di questa strategia è quello di fornire tempi di attesa possibilmente uniformi.

  SLTF - Shortest Latency Time First
Questa tecnica tende ad ottimizzare il tempo medio di latenza (rotational optimization): le richieste pendenti relative a ciascun cilindro vengono servite in funzione del numero di settore; tale strategia, vista la preponderanza dei tempi di seek su quelli di latency, non apporta significativi vantaggi di per sè, salvo considerarla in specifiche situazioni.


Tecniche di Allocazione dei File su Disco

Le tecniche di allocazione, di cui esponiamo le basilari, si occupano dell’allocazione fisica dei file sul supporto, in modo da ottimizzare l’utilizzo dello spazio-disco e ridurre i tempi d’accesso alle informazioni.

1. Allocazione Contigua
Il file è registrato in un'area contigua di disco, costituita da un numero di blocchi numerati consecutivamente (p.es. più settori o tracce ad indirizzi fisici contigui); in tale situazione, l’allocazione di spazio-disco per un file avviene definendo l’indirizzo del primo blocco ed il numero di blocchi ad esso assegnati.
Tale tecnica, da un lato e per sua natura, ottimizza i tempi d'accesso (soprattutto per elaborazioni di tipo sequenziale) ma, dall'altro, non consente di ottenere una efficiente gestione dello spazio, causa problemi di frammentazione dello spazio-disco (frammentazione esterna): non essendo infatti generalmente nota a priori l'esatta dimensione del file, tenuto conto che la dimensione del file dovrà essere dichiarata in anticipo per consentirne l'allocazione da parte del FS, l'assegnazione ed il recupero di spazi rimasti liberi resta legata alle dimensioni dei file da gestire; ciò implica o il sovradimensionamento dello spazio riservato ai file o assumersi l'onere, pesante, di periodiche quanto farraginose operazioni di riconfigurazione/ricompattamento del disco.
Questo tipo di politica gestionale si potrebbe implementare tramite le strategie First fit, Best fit o Worst fit.

2. Allocazione Concatenata
Il file è registrato in blocchi non contigui (tipicamente settori), ciascuno contenente un campo puntatore (Pointer) che contiene l’indirizzo per consentire la identificazione del blocco logicamente successivo; la contiguità logica del file si ottiene pertanto tramite l'impiego dei pointer; in questo caso, occorre che la VTOC contenga, oltre alle informazioni relative al file, un puntatore al primo ed all’ultimo blocco assegnato, mentre gli altri blocchi saranno rintracciabili con la tipica tecnica delle liste concatenate.
Con tale tecnica si può riuscire a raggiungere un discreto livello di ottimizzazione dello spazio (se troppo non ne viene assegnato ai pointer), in quanto non è necessario dichiarare le dimensioni dei files all'atto della loro creazione, potendo allocarli in blocchi sparsi sul disco tra loro collegati (concatenati) tramite puntamenti; si ha comunque una dispersione dei blocchi che, se non gestita al meglio, aumenta l'attività di seek e conseguentemente pure i tempi d'accesso; onde minimizzare tali aspetti negativi si potrebbero definire blocchi costituiti da più settori (tipicamente sulla stessa traccia ed in numero costante), quale soluzione di compromesso tra allocazione contigua e non contigua, oppure adottare una strategia di allocazione dei blocchi (di uno stesso file) che riduca al minimo la loro dispersione, basando il concatenamento sui blocchi anzichè sui settori (la rappresentazione a lista concatenata del file non dovrebbe comunque comportare numerosi accessi di inseguimento dei pointer per avere un accesso casuale al blocco).


Le problematiche di questa metodologia derivano dal fatto che essa consente solo l’uso di file ad accesso sequenziale (per raggiungere un blocco occorre percorrere prima tutti quelli che logicamente lo precedono) e la struttura si rivela fragile e non molto affidabile (la perdita di un solo pointer renderebbe praticamente inaccessibili i dati del file).
Al fine di risolvere almeno parzialmente tali problematiche si potrebbe introdurre un secondo puntatore al blocco precedente ed un campo in ciascun blocco, contenente il nome del file di appartenenza, per consentire l’eventuale ricostruzione della struttura (soluzione piuttosto onerosa), oppure associare al disco una FAT (File Allocation Table), rappresentante l’immagine dei blocchi, ove costruire le liste concatenate associate ai singoli files, con conseguente velocizzazione delle operazioni su di essi, viste le ridotte dimensioni della FAT rispetto a quelle dei blocchi effettivamente assegnati ai files (soluzione adottata nei sistemi MS-DOS e OS/2).

3. Allocazione Indicizzata
Il file è registrato in blocchi non contigui i cui indirizzi vengono mantenuti in una tabella esterna al file, chiamata tabella di mappa dei blocchi o indice dei blocchi (Block Index), referenziata dalla VTOC o inserita in essa.
Come nel caso dell'allocazione concatenata, non occorre  dichiarare in anticipo la dimensione del file e non si ha praticamente frammentazione.
L'accesso casuale al record è generalmente più efficiente però richiede la consultazione dell'indice dei blocchi: ciò elimina la sequenza di letture come nell'allocazione concatenata ma la gestione della Block Index, se la politica di allocazione e di gestione dei blocchi liberi non è oculata, potrebbe appesantire in modo sensibile la gestione globale del file (una soluzione potrebbe consistere nello stratificare la block index su più livelli).

4. Altre tecniche (cenno)
Al fine di agevolare le operazioni di aggiornamento dei records e l'efficienza in generale delle operazioni, altre tecniche si basano su criteri di assegnazione non contigua a lista invertita o doppie concatenazioni dei blocchi, introducendo apposite Block Map.
Risultati mediamente soddisfacenti possono a volte ottenersi combinando utilmente le tecniche viste o tramite opportuni accorgimenti; ad esempio, si potrebbe adottare la seguente strategia combinando le tecniche 1 e 2: si alloca, inizialmente, un'area-disco di dimensione prefissata all'archivio, chiamata Extent, assegnando poi, su necessità, nuovi extent collegandoli tra loro tramite una struttura a lista.
Una tecnica di base, che sarà vista in aula, è quella dell’i-node (index node).


Gestione degli Spazi Liberi

Bit Map
Si associa ad ogni blocco del disco un bit di una apposito Vettore di bit, settato a 0 oppure 1 a seconda che il corrispondente blocco sia libero o occupato; la scansione della bit map consente di individuare con facilità ed immediatezza i blocchi liberi ed i gruppi contigui di blocchi liberi.

Lista concatenata di blocchi
Questo metodo, utile nel caso di allocazione non contigua, consiste nel collegare tra loro i blocchi rimasti liberi tramite appositi Pointer, creando così una Catena di Blocchi Liberi, un pointer iniziale gestito dal FS consentirà di accedere all'inizio della catena; nel caso di allocazione contigua le aree libere possono essere gestite tramite la VTOC, riguardandole come particolari files, con modalità analoghe a quelle relative ai normali files.

Raggruppamento di indirizzi
È una variante del metodo della lista concatenata di blocchi, utile per velocizzare l’individuazione dei blocchi liberi: in un blocco libero si memorizzano gli indirizzi di altri blocchi liberi (raggruppamento di indirizzi) e l’indirizzo di un altro blocco libero contenente a sua volta un altro raggruppamento di indirizzi ed un puntatore e così via.

Conteggio di blocco
Questo metodo, utile nel caso in cui si possa agire su gruppi di più blocchi contigui, consiste nel gestire una lista di gruppi di blocchi contigui, contenente per ciascun gruppo di blocchi l’indirizzo del primo blocco ed il numero di blocchi contigui che lo seguono nel gruppo.


Protezione dei Files

Le protezioni sui files sono sostanzialmente di tre tipi:
- Accesso in scrittura;
- Accesso in lettura;
- Esecuzione.

Password
È un metodo di protezione, del tipo "tutto o niente", consistente nel gestire l'accesso al file sulla base di una parola chiave o Password: qualunque operazione sul file viene subordinata alla specificazione della password.

Matrice degli Accessi
Questo metodo, più flessibile, consiste nel gestire una Tabella o Matrice degli Accessi (0=accesso negato, 1=accesso consentito):

 

FILE

 

Utente

Clienti

Fornitori

Magazzino

mainpgm

Bruni

0

1

1

0

Neri

1

0

0

1

Rossi

1

1

0

0

...

...

...

...

...

 

Lista di Accesso
Questo metodo è simile al precedente ma tende a minimizzare la grandezza della matrice (normalmente l'accesso ad un file, almeno in scrittura, è negato agli utenti che non ne siano i responsabili): la matrice si implementa associando a ciascun file una Lista di Accesso, identificando gli utenti - eventualmente suddivisi per classi o gruppi - ed il tipo di operazioni ad essi consentite tramite un codice a più valori (r=read, w=write, e=esecuzione).

file

lista di accesso

clienti

Neri (r,w)

Rossi (r,w)

fornitori

Rossi (r)

Bruni (r)

magazzino

Bruni (r,w)

 

mainpgm

Neri (r,w,e)

 

information management (file system)

 

Introduzione

 

I sistemi informatizzati di archiviazione delle informazioni si sono notevolmente evoluti negli ultimi decenni, ciò a seguito dello svilupparsi sia delle esigenze di gestione e registrazione di grandi masse di dati che delle tecnologie e metodologie elettronico-informatiche, facendo comparire sistemi più o meno complessi e diversificati, quali:
Data Base Management System (DBMS);
Sistemi di memorizzazione basati su tecnologie ottiche (CCD, CD-ROM, WORM, OCR, ecc.);
Sistemi di archiviazione multimediali ed ipertestuali;
Sistemi basati sull'intelligenza artificiale (sistemi cosiddetti esperti).
Il graduale affermarsi, su vasta scala, delle suddette nuove tecnologie e metodologie nella gestione ed elaborazione delle informazioni sta rivoluzionando i sistemi informativi tradizionali, nonchè fondamentali aspetti dell'organizzazione sociale e del nostro modo di vivere.
Basti considerare, ad esempio, l'impatto di tali innovazioni su settori quali quello della Pubblica Amministrazione (archivi grandi e complessi), della Editoria Elettronica (che è oramai il nuovo modo di concepire l'editoria), del Marketing (archivi storici e statistici per ricerche e previsioni), dell'Istruzione (sistemi di istruzione di tipo interattivo e multimediale basati sull'elaboratore) o della Catalogazione di Opere Artistiche (cataloghi multimediali disponibili su disco ottico e consultabili on-line), fino ad arrivare al musicista dilettante, il quale può oggi comporre, registrare ed eseguire musica anche tramite il solo elaboratore.
La complessità delle operazioni relative alla gestione automatizzata delle informazioni su supporti informatici (organizzazione, registrazione, reperimento, manutenzione e manipolazione dei dati), quali le memorie di massa (memorie ausiliarie o secondarie), tradizionalmente nastri magnetici (SASD-Sequential Access Storage Device), tamburi e dischi magnetici (dasd-Direct Access Storage Device) o supporti a tecnologia ottica ha portato alla necessità di prevedere dei moduli, inclusi nel SO, atti ad agevolare all'utenza tale gestione.
L'insieme di tali moduli viene chiamato Information Management o Sistema di Archiviazione o File System (in breve FS).


Scopo principale del FS è pertanto quello di consentire all'utenza (Programmatore, Sistemista o pure Utente Finale) un certo livello di astrazione rispetto all'uso ed alla gestione delle memorie ausiliarie, fornendo gli opportuni strumenti (comandi, operatori, meccanismi) atti a realizzare o implementare le suddette funzioni nei modi contestualmente più appropriati ed efficienti.
In altri termini, il FS deve fornire all’utenza, più interessata agli aspetti logici e metodologici della organizzazione e gestione delle informazioni, un’interfaccia software, una macchina virtuale, tale da svincolarla opportunamente dalla conoscenza tecnica delle risorse hardware e consertirle di tradurre facilmente le attività logiche (procedure e strutturazione dei dati) in attività fisiche (processi, implementazioni, strutture fisiche di dati).

Si pone dunque la necessità di un FS almeno per le seguenti ragioni preliminari:
1. Le memorie ausiliarie presentano caratteristiche diverse da quelle della memoria principale (memoria centrale o memoria RAM):
a) Non volatilità: le informazioni sono conservabili per lungo tempo e senza subire alterazioni;
b) Prestazioni generali e costi: alta capacità di memorizzazione, relativa lentezza nel reperimento delle informazioni, basso costo;
c) Variabilità dei tempi di indirizzamento: dipendenti (contrariamente che per le memorie RAM) sia dall'indirizzo richiesto che dallo stato del circuito di indirizzamento (questa caratteristica è particolarmente influente nei SASD);
d) Informazioni non direttamente accessibili alla CPU: la quale non dispone in genere (contrariamente che per le memorie RAM) di istruzioni che consentano trasferimenti tra registri interni ed aree-disco (o nastro).
2. Il FS dovrà realizzare o implementare nella memoria secondaria le Strutture Logiche di Dati (strutture astratte referenziate dal programma) in Strutture Fisiche di Dati (strutture concrete utilizzate internamente dal FS) in modo tale che l'implementazione:
a) consenta al programmatore di organizzare agevolmente i dati sulla base di una delle strutture logiche previste;
b) fornisca, per ciascuna struttura logica prevista, gli Operatori necessari per manipolarla e "tradurla" fisicamente sul supporto.


3. Gestione delle unità e delle informazioni: il FS dovrà pure realizzare un certo grado di trasparenza e di efficienza in merito alla gestione di:
a) unità periferiche e supporti:
- gestione dei dispositivi collegati al sistema;
- assegnazione/rilascio di aree di memoria secondaria;
- gestione di tecniche di accesso, ecc.;
b) files:
- identificazione, livelli di condivisione e protezione;
- tipologia, organizzazione, struttura, ecc.;
c) informazioni gestionali e di controllo:
- identificatori, marker, segnalatori, label, ecc.;
d) operazioni di utilità:
- Sort, Merge, Copy, Append, Delete, Backup, ecc.

Dai precedenti punti discende la particolare importanza che assume la collocazione dell'informazione nel supporto di registrazione, in modo tale da conseguire un ottimale equilibrio tra Efficienza in Tempo ed Efficienza in Spazio (minimizzando o ottimizzando i tempi di indirizzamento, i tempi di accesso, gli accessi fisici e gli spazi occupati), nonchè la necessità di disporre di appositi Processori Specializzati (Canali di I/O) ed opportune istruzioni per gestire il trasferimento dati e le operazioni annesse (Programmi di Canale).

Per questo capitolo si farà riferimento anche alle slide SO19, SO20, SO21.


Supporti di memorizzazione

Nonostante il graduale affermarsi delle memorie a tecnologia ottica, le più importanti unità di memorizzazione per archivi di dati sono attualmente ancora quelle di tipo magnetico, per le quali facciamo un rapido richiamo distinguendole in due categorie principali.

 

Unità ad Accesso Sequenziale (SASD)

Nastro e Cassetta, in cui l'accesso ad una informazione è subordinato all'accesso a tutte le informazioni precedenti registrate sul supporto (il che implica generalmente il riavvolgimento del nastro fino all'inizio del file e la scansione sequenziale di esso fino all'informazione cercata); in pratica, si ha corrispondenza tra il tipo di organizzazione delle informazioni e le modalità di accesso consentite dal supporto, cioè l'accesso ai dati è nello stesso ordine in cui essi sono stati memorizzati.

 

Unità ad Accesso Diretto (DASD)

Disco e Tamburo, in cui l'accesso ad una informazione può essere diretto ed indipendente (accesso chiamato anche Casuale o Random), oltre che sequenziale o misto.


record fisici

La memorizzazione fisica dei dati avviene normalmente suddividendo il supporto (DASD) in opportune aree chiamate Blocchi (si veda il capitolo Device Management), tali aree sono determinate e gestite in base a considerazioni tecniche e di efficienza e generalmente in modo tale che sia possibile trasferire il loro contenuto nella memoria centrale del sistema con una singola operazione di I/O.
Il Blocco assolve pertanto il ruolo di unità di memorizzazione fisica e per tale motivo esso si identifica col termine Record Fisico (tipicamente un blocco può contenere più record logici).
Si dice Fattore di Blocco (FB) il numero di Record Logici costituenti un Record Fisico.
Siccome il File System opera sul record fisico (mentre il programma opera sul record logico) conviene fare alcune classificazioni.

In relazione alla loro disposizione nei blocchi i record (logici) di un file vengono classificati in:
  Bloccati: ogni blocco contiene più record logici (FB>1);
  Sbloccati: ogni blocco contiene un solo record logico (FB=1);
  Multiblocco: il record logico è memorizzato su più blocchi (FB<1).

In relazione alla lunghezza ed ai blocchi i record di un file possono essere del seguente tipo:
  Fissi Bloccati: il blocco è formato da un numero fisso di record logici a lunghezza fissa;
  Fissi Sbloccati: il blocco coincide col record logico ed ha lunghezza fissa;
  Variabili Bloccati: il blocco è formato da un numero variabile di record logici a lunghezza variabile; la lunghezza del blocco è registrata in un campo apposito in testa al blocco e quella dei record in testa a ciascun record (vedi figura).

  Variabili Sbloccati: il blocco è formato da un solo record logico a lunghezza variabile; la lunghezza del blocco è registrata in testa al blocco.
  Indefiniti: il blocco coincide col record logico a lunghezza indefinita; i singoli blocchi sono delimitati da caratteri separatori.


operazioni sui files

Le Operazioni sui Files (in particolare i File Dati) sono supervisionate dal sistema (in particolare dal File System), facendo riferimento alla Directory (VTOC) o alle tecniche di gestione Multivolume.
Tali operazioni dipendono sia dall'organizzazione fisica del file che dalla sua tipologia ed in generale dall'hardware/software di base del sistema, la loro effettuazione ed ammissibilità dipende quindi dalle implementazioni e dalle logiche gestionali.
Su di un file si possono definire e distinguere diverse operazioni, suddivisibili primariamente in due categorie:

  • Operazioni Locali: le quali coinvolgono solo una parte del file e sono effettuabili solo da programma.
  • Operazioni Globali: le quali coinvolgono l'intero file. Tali operazioni possono suddividersi ancora in 2 sottotipi, che denomineremo per sinteticità:
  • Operazioni Globali Interne: le quali agiscono globalmente  sul file potendone modificare la struttura interna (effettuabili solo da programma);
  • Operazioni Globali Esterne: le quali agiscono globalmente  sul file senza alterarne la struttura interna (effettuabili da programma e dall’ambiente di SO).
  •  
  • Principali Tipi di Operazioni sui Files
  • Operazioni Globali Esterne
  • Creazione
  • Cancellazione
  • Copia
  • Ridenominazione
  • Operazioni Locali
  • Aggiornamento
  • Inserimento di un record
  • Modifica di un record
  • Cancellazione di un record (fisica o logica)
  • Ricerca di un record
  • Operazioni Globali Interne
  • Apertura (OPEN) e Chiusura (CLOSE) del file
  • (tali operazioni non alterano il file)
  • Visita o scansione
  • Ordinamento (Sort)
  • Fusione di due o più archivi (Merge)
  • Separazione di un archivio in due o più sottoarchivi.
  •  
  • Giova osservare che generalmente le operazioni di Creazione, Copia, Ridenominazione e Cancellazione di files agiscono sulla Directory e che le operazioni di Scansione, Ordinamento, Fusione e Separazione sono riconducibili ad operazioni ordinate di Lettura/Scrittura del file.

  • Nel fare una sintetica rassegna delle principali operazioni sui files ci riferiremo implicitamente alle operazioni effettuabili da programma sui File Dati (i nomi usati per le operazioni sono indicativi).
  •  
  •  
  • Nota 1.      Uno dei fattori che influenzano maggiormente la definizione e la gestione di un archivio è quello della Ricerca, essendo tale operazione, oltre che di per sè evidentemente importante, in pratica preliminare ed implicitamente inclusa in gran parte delle operazioni effettuabili sui record del file (operazioni di aggiornamento).
  •  
  • Nota 2.      La modifica di un record non può essere di norma condotta su di un suo Campo Chiave, essendo tali campi essenziali ai fini della individuazione ed elaborazione dei records.
  •  
  •  
  •   create: creazione di un file (vuoto)
  • Questa operazione (istruzione) determina l'allocazione di uno spazio per il nuovo file e l'aggiornamento della VTOC per l’inserimento del descrittore del file.
  • Il FS si occuperà della effettuazione dei controlli di validità dei parametri specificati nel Create, eseguendo anche controlli quali:
  • File nuovo o preesistente;
  • Operazione illegale (tipo non ammesso, accesso non consentito, ecc.);
  • Errore di I/O; ecc.
  • L'operazione di creazione genera una nuova entrata nella VTOC associandola al nuovo file per allocargli spazio disco e garantirne la gestione, a tale scopo nella VTOC verranno registrate tutte le informazioni necessarie riguardanti il file, quali il nome, il tipo, il formato dei record, la dimensione, l'indirizzo fisico di allocazione sul supporto di memorizzazione, ecc.
  • L’operazione di creazione del file in alcuni ambienti di programmazione è implicitamente svolta senza doverla specificare (normalmente tramite la OPEN se il file non esiste).
  •  
  • open: apertura di un file
  • L'istruzione, che è preliminare ad ogni accesso al file, determina il caricamento in memoria del descrittore del file (se non presente) e predispone il FS alla gestione corretta e controllata del file.
  • Sono svolti dei controlli, quali i seguenti:
  • Esistenza del file (in certi casi se il file non esiste la Open provvede alla sua creazione);
  • Tipo di file;
  • File non chiuso;
  • Tecniche d'accesso ammesse;
  • Protezioni e loro livelli (campo, record, file, lettura, scrittura, condivisione, ecc.); ecc.

  • read: operazione di lettura
  • Legge dal file uno specificato numero di bytes (tipicamente un record fisico) e lo porta in un'area di memoria centrale (tipicamente il Buffer di I/O associato al file), facendo avanzare il file pointer all'area successiva a quella letta.
  • Alcuni controlli tipici sono i seguenti:
  • Segnalazione EOF (End Of File) o file vuoto;
  • Accesso non consentito, file non aperto; ecc.
  •  
  •   write: operazione di scrittura
  • Registra sul file uno specificato numero di bytes (tipicamente un record fisico) prelevandoli da una specifica area di memoria centrale (tipicamente il Buffer riservato al file, in genere la scrittura fisica avviene quando tale buffer è pieno, cioè dopo un certo numero di immissioni di record logici) portando il file pointer sull'area successiva all'ultimo trasferimento.
  • Alcuni controlli tipici sono:
  • Spazio non disponibile;
  • File protetto;
  • Parametro non valido, operazione illegale (p.es. uso random di un file sequenziale); ecc.
  •  
  •   pos: posizionamento del file pointer nel file
  • Il posizionamento (spostamento controllato della TLS) può avvenire secondo varie modalità:
  • - posizionamento assoluto;
  • - posizionamento relativo;
  • - modalità Append.
  • POS può effettuare un posizionamento o restituire la corrente posizione nel file (in byte o blocchi).
  •  
  •   close: chiusura di un file
  • L’istruzione, che è finale sul file,  cioè ne chiude la gestione (e non va dimenticata), ripristina l’ambiente di sistema precedente alla sua apertura ed elimina i riferimenti in memoria associati al file; essa causa la chiusura di uno (o anche più) files, provvede ad eventuali completamenti delle operazioni di trasferimento tra memoria principale e secondaria, disalloca aree riservate al file, annulla gli effetti della Open ed aggiorna la VTOC.
  •  
  • Oltre alle suddette operazioni (da riguardare come ”operatori primitivi” per la gestione di file dati tramite linguaggi di programmazione ad alto livello) i FS ne mettono a disposizione altri, dipendentemente dalle strutture fisiche e logiche di dati e dai metodi d’accesso ammessi, dai linguaggi di programmazione utilizzati e via dicendo.

  • Ad esempio, sono generalmente forniti operatori per il posizionamento all’inizio di un file, il riavvolgimento di un nastro, l’avanzamento unitario della TLS, ecc.
  •  
  • In via preliminare, altri operatori possono essere:
  •   Update: aggiornamento di record (accesso random);
  •   Insert: inserimento di record (accesso random);
  •   Append: inserimento di record (accesso sequenziale);
  •   Delete: cancellazione di record (accesso random);
  •   EOF: End Of File (funzione booleana);
  •   LOF: Length Of File (in byte o blocchi);
  •  
  • Giova ancora precisare che, per motivi di efficienza, i file devono essere aperti e chiusi, rispettivamente prima dell'elaborazione ed al loro rilascio, con istruzioni del tipo Open e Close.
  •  
  • In particolare, la Open dovrà dichiarare la tecnica d'accesso e la Close produrrà la registrazione (per elaborazioni sequenziali in output) di uno speciale record di terminazione (in pratica un delimitatore), detto EOF (End Of File).
  •  
  • All'atto della creazione di un file (Create o Open) si ha un'assegnazione iniziale di spazio-disco al file, dimensionabile dal FS o dall'utente (tramite apposite dichiarazioni); si possono altresì richiedere aree addizionali (aree di overflow) in previsione di eventuali trabocchi dei records nello spazio inizialmente assegnato al file, onde consentire una gestione più flessibile delle movimentazioni dei records.

  • logica di elaborazione di un file dati
  •  
  • Come già detto, il FS deve consentire di implementare le strutture logiche di dati in strutture fisiche di dati (interne), traducendo le operazioni logiche annesse in  operazioni a basso livello.
  • Infatti, mentre il programma vede il File Logico e referenzia il Record Logico, a livello fisico il FS gestisce unità elementari di informazioni trasferibili con una singola operazione di I/O (Blocchi o Record Fisici) in cui non si identifica la struttura logica dei dati, occorre quindi ripristinare tale struttura trasferendo i blocchi in memoria centrale e ricostruendo il record logico.
  • La discrepanza tra record logico, referenziato esternamente al sistema e corrispondente alla visione logica dei dati da parte del programmatore, e record fisico, utilizzato internamente e corrispondente alla struttura fisica dei dati gestita dal FS, dà luogo a tre casi.
  •  
  • 1. Il record fisico è un multiplo (intero) del record logico, cioè un blocco contiene più record logici (in concordanza col Fattore di Blocco FB). In questo caso occorre effettuare una operazione di Sbloccaggio del record logico, cioè approntare appositi meccanismi di "estrazione" del record logico dal blocco (fase di lettura) ed un'altra di Bloccaggio, consistente nella "immissione" dei record logici nel blocco (in concordanza col FB e prima di compiere la scrittura sul DASD).
  •  
  • 2. Record fisico e record logico coincidono.
  •  
  • 3. Il record logico occupa più blocchi. Questa situazione, in pratica non frequente, deve essere gestita traducendo ogni operazione di read/write di record logici (cioè da programma) in più read/write di record fisici (cioè su disco, aumentandone gli accessi), inversamente che nel caso 1).
  •  
  • Il bloccaggio/sbloccaggio dei records è funzionale alla ottimizzazione dello spazio-disco e dei tempi di accesso (in talune elaborazioni non sequenziali potrebbe però non apportare vantaggi) ed i fattori di blocco possono diversificarsi secondo varie scelte, da relazionare alle soluzioni gestionali e alle dimensioni dei record (con o senza campo/i chiave).
  •  
  • Con riferimento alla slide SO22, vediamo ora qual'è la logica di elaborazione di un file dati.
  •  
  • Un programma elabora i record di un file trattandoli come entità singole (record logici) mentre il FS agisce su dei blocchi (record fisici), il programma può operare sui dati se questi sono in memoria centrale.
  • All’atto dell’apertura del file (Open) accadono le seguenti cose, gestite dal SO in base alla Open (iniziamo col considerare operazioni di lettura):

  • viene stabilito un Canale Logico per il trasferimento dati tra file e programma, riservando ad essi un Buffer di Memoria Centrale denominato I/O Buffer (area di memoria RAM opportunamente dimensionata, tipicamente lunga quanto la max lunghezza dei blocchi).
  • Le informazioni gestionali riguardanti il file (File Control Block - FCB) vengono prelevate dalla VTOC e trasferite in apposite aree gestionali del sistema (a meno che non siano già presenti).
  • In corrispondenza ad una istruzione di lettura attivata dal programma (la prima dopo la Open) il FS si occupa di portare un Blocco dal DASD all’I/O Buffer, provocando così una Read Fisica.
  • Successivamente, il FS provvede al trasferimento del primo record logico (conoscendone le caratteristiche in base alla Open ed alla FCB) dall’I/O Buffer nella (apposita zona di) Area Dati del Programma (area RAM allocata al programma per le sue variabili, in questo caso un buffer "immagine" del record logico).
  • Le successive Read attivate dal programma provocheranno il trasferimento in successione dei restanti record logici nel buffer della sua area dati (sbloccaggio) fino a che l’I/O Buffer non si sarà svuotato (Read logiche), dopodichè la seguente Read riporta un altro blocco nell’I/O Buffer (Read fisica) ed il processo si ripete.
  •  
  • Per un'istruzione di scrittura si ha in un certo senso il procedimento inverso: in corrispondenza alle Write (logiche) attivate dal programma i record logici vengono trasferiti uno alla volta dall'area dati del programma all’I/O Buffer (bloccaggio), quando questo è pieno l'intero blocco è trasferito su DASD (Write fisica), l’I/O Buffer si svuota ed il ciclo ricomincia (a fronte di altre Write o di una Close, la quale trasferisce il contenuto finale dell’I/O Buffer così com’è).
  •  
  • Possiamo dunque dire che, in generale, un loop di n operazioni logiche (n istruzioni Read/Write di programma), che avvengono internamente in memoria centrale (cioè tra I/O Buffer e buffer dell’Area Dati del programma), causa n/FB operazioni fisiche (Read/Write su disco), ove FB è il fattore di blocco.
  •  
  • La tecnica descritta è chiamata Single Buffering.
  •  
  • Al fine di evitare i tempi passivi di elaborazione dovuti alle operazioni di Read/Write fisiche e consentire la sovrapposizione (parallelismo) tra le operazioni di elaborazione e di I/O fisico si può disporre, per esempio, di una Coda di Buffer controllata dal FS, in tal caso si ha una tecnica di bufferizzazione multipla o Multiple Buffering.

  • metodi di Elaborazione
  •  
  • I metodi di elaborazione sono le modalità con cui un programma può operare sui records di un file.
  • La definizione dei metodi di elaborazione può essere effettuata sulla base delle applicazioni, valutandone i diversi fattori rilevanti (tipo di applicazione e frequenza con cui è richiesta, massa di dati coinvolta, operazioni più importanti da svolgere, tipo di ricerche da fare, supporto di memorizzazione utilizzato, tempi di risposta richiesti, ecc.).
  • La determinazione dei metodi di elaborazione più idonei in un dato contesto riveste inoltre notevole importanza ai fini della scelta del tipo di organizzazione da dare al file, sia come struttura logica che come struttura fisica di dati.
  • Si possono distinguere i seguenti metodi di elaborazione di base:
  • Seriale;
  • Sequenziale;
  • Casuale o Random;
  • Mista.
  •  
  •   elaborazione Seriale
  • Un'elaborazione di tipo seriale consiste nell’accedere ai records del file secondo lo stesso ordine in cui essi sono stati registrati, indipendentemente dal fatto che l’archivio sia ordinato o no (elaborazioni in cui non interessa l’ordine logico delle registrazioni).
  • Tali elaborazioni sono generalmente possibili, perchè non implicano particolari restrizioni di natura operativa, nè a livello dei supporti di registrazione nè a livello delle informazioni da elaborare.
  • Normalmente, le elaborazioni seriali si rivelano convenienti per applicazioni le quali prevedono scansioni seriali dell’intero file o di gran parte di esso (procedure di tipo Batch, p.es. backup di un archivio, riorganizzazione o compattamento di un file, ecc.).
  • Le elaborazioni seriali sono le uniche possibili se il supporto di registrazione è il nastro (e i records sono memorizzati in modo disordinato).
  •  
  •   elaborazione Sequenziale
  • Un'elaborazione di tipo sequenziale consiste nell’accedere ai record del file secondo l’ordine logico dato dalla Chiave (che quindi deve essere prevista nel record).
  • Un'elaborazione sequenziale coinvolge in successione tutti i records del file dal record attuale (normalmente il primo  del file) fino al record da acquisire, il FS deve essere in grado di ricavare l'informazione relativa al record cercato in base all'analisi di tutti i record che lo precedono nel file (confronto tra chiavi).

  • In altri termini, l'accesso al record di interesse è subordinato all'accesso a tutti i record memorizzati nel file prima di esso (sequenzialità dell'operazione) ed il posizionamento nel file è in definitiva consentito solo al suo inizio o alla fine.
  • Si hanno differenze a seconda che il file sia o no ordinato.
  • Se il file è ordinato allora ordine logico e fisico coincidono e l’elaborazione avviene seguendo l’ordine fisico delle registrazioni (il file è scansionato record per record in progressione ordinata).
  • Se il file non è ordinato allora l’elaborazione avviene ricercando il record logicamente successivo (ordinamento della chiave) a quello precedentemente esaminato accedendo ogni volta il file dall’inizio (il file è scansionato record per record ricominciando daccapo ogni volta).
  • In logica sequenziale è ammessa la ricerca per posizione o per chiave.
  • Si noti che un file ordinato su DASD è predisposto per la ricerca binaria e interpolata.
  • Le elaborazioni sequenziali si rivelano convenienti soprattutto per procedure di tipo batch in cui abbia una qualche importanza l’ordinamento (elenco clienti, inventario di magazzino, stampa fatture mensili, ecc.).
  •  
  • elaborazione Casuale o Random
  • Un'elaborazione di tipo casuale deve poter garantire l'acquisizione selettiva anche di un solo record nel file, a prescindere dalla considerazione degli altri e del loro ordinamento; il FS deve essere in grado di ricavare l'informazione relativa al record da elaborare in modo indipendente, in base ad opportuni meccanismi.
  • In altri termini, si deve avere un accesso diretto al record e la possibilità del posizionamento in qualunque punto del file: una volta individuata la posizione del record nel file, in base al particolare criterio di ricerca utilizzato, l'accesso ad esso non deve richiedere ulteriori operazioni.
  • In logica random è ammessa la ricerca per posizione o per chiave prevedendo, in quest'ultimo caso (applicativamente più interessante), una procedura che determini la posizione del record nel file sulla base delle informazioni contenute nella chiave.
  • La selezione del record può avvenire, in via generale, sulla base di informazioni (che dovranno essere presenti nel record) quali:
  • - Numero d'ordine;
  • - Chiave primaria;
  • - Gruppo di chiavi.
  • È evidente che tali tipi di elaborazioni presuppongono la memorizzazione dei dati su supporti di registrazione ad accesso diretto (DASD, in pratica dischi e non nastri).
  • Le  elaborazioni casuali si rivelano interessanti nei casi in cui occorre accedere frequentemente ed in modo rapido a poche e specifiche informazioni di un file (applicazioni in tempo reale, interrogazioni di archivi, frequenti aggiornamenti di records da ricercare al momento e con tempestività, ecc.). 

  • In pratica, le elaborazioni casuali privilegiano le operazioni di ricerca ed interrogazione, a discapito però di quelle sequenziali.
  •  
  • elaborazione mista
  • Un'elaborazione mista (sequenziale/random) deve consentire di accedere al file sia in modo sequenziale che random: l'accesso casuale avviene su opportune porzioni di file (blocchi o simili) tramite un Indice (generalmente organizzato in modo da permettere la ricerca per chiave), nell'ambito del blocco il record è poi selezionato sequenzialmente.
  • Si noti che tale modo di operare implica che il File Dati sia affiancato da un apposito File Indice.
  • Questa logica può riuscire a coniugare i vantaggi dell'elaborazione sequenziale (particolarmente adatta per operazioni globali sui files) e di quella casuale (particolarmente adatta per operazioni locali sui files). Tali elaborazioni sogliono anche chiamarsi Sequenziali Selettive o Sequenziali ad Indice.
  •  
  • Per comprendere meglio la logica di un’elaborazione mista facciamo un’analogia comune.
  • Si consideri uno schedario tradizionale e si facciano i seguenti accostamenti:
  •  
  • Schedario                                File Dati
  • Sequenza delle etichette A,B,C...        File Indice
  • Scheda                                   Record
  • Nome di persona                               Campo Chiave
  • Schede con stessa iniziale nel Nome      Blocco
  •  
  • Si effettua un’elaborazione mista ogni volta che si cerca una scheda tramite un Nome, infatti:
  • Sulla base della lettera iniziale del Nome si accede al Blocco di schede etichettato con tale lettera (accesso diretto al File Dati tramite Indice);
  • Sulla base del Nome si scandiscono in sequenza le schede del Blocco selezionato fino a che non si trova la scheda cercata (ricerca sequenziale nel blocco).
  •  
  • In pratica, siccome sia le etichette che le schede di ogni Blocco saranno ordinate alfabeticamente, come metodo di ricerca non si applicherà quello lineare ma si svolgerà la Ricerca Binaria (come si farebbe per cercare una parola in un dizionario).

  • metodi di accesso
  •  
  • I metodi di accesso sono le modalità con cui un programma può accedere ai records di un file, ovvero le modalità con cui si può effettuare la Ricerca di records nei files.
  • La definizione e la scelta di un metodo d’accesso sono questioni strettamente correlate alla ricerca, la ricerca è infatti la funzione preliminare a qualunque operazione di aggiornamento di records in un file (inserimento, modifica, cancellazione), essa costituisce pertanto un'operazione basilare nella gestione di un archivio.
  • L’efficienza (o costo) della ricerca, espressa come numero di accessi nel tempo alla memoria ausiliaria per ottenere una certa informazione, viene dunque a costituire un parametro fondamentale per valutare l'organizzazione fisica di un archivio, la cui definizione è quindi da ritenersi strettamente dipendente dal tipo di ricerca che si intende compiere sui dati.
  • In altri termini, esiste una interdipendenza tra organizzazione fisica dei dati, metodo di ricerca e applicazioni la quale deve essere opportunamente valutata per conseguire una efficiente gestione sia dell'archivio che delle risorse.
  • Una possibile tassonomia delle operazioni di ricerca, basata sulla percentuale di records obiettivo (records da cercare) rispetto al totale dei records di un file, è la seguente:
  •  
  •   Accesso ad un solo record o ricerca per Chiave Primaria
  • GET uno solo
  •  
  •   Accesso ad alcuni record o ricerca per Chiave Secondaria
  • GET alcuni
  •  
  •    Di norma in tale tipo di ricerca si suppone che i record obiettivo ("alcuni") non eccedano il 10% del totale (per il fatto che, altrimenti, si richiederebbe in effetti l'accesso pressochè a tutti i blocchi costituenti il file).
  •  
  •   Accesso a tutti (o molti) i record o ricerca Sequenziale
  • GET tutti (o molti)
  •  
  •    Per l'osservazione precedente, col termine "molti" si intende una quantità (notevolmente) superiore al 10% dei record del file.
  •  
  • Le performance di una ricerca possono notevolmente migliorare se il file è ordinato od anche se esso non è tale ma le implementazioni software consentono un accesso secondo un qualche criterio di ordinamento.
  • Soprattutto nel primo caso si ottengono prestazioni più efficienti, applicando opportuni algoritmi di ricerca (ricerca binaria, ricerca interpolata).

  • Giova richiamare l’attenzione sul fatto che l’accesso ad un record di un file in ultima analisi deve tradursi in un accesso sul DASD, cioè in I/O fisico.
  • L’I/O fisico tra DASD e sistema avviene sotto il controllo del FS ed è effettuato sulla base di accessi a blocchi e relativi trasferimenti in memoria centrale.
  • Il reperimento di tali blocchi dipende dalla organizzazione dei dati sul disco (per settori o per riferimento).
  • Nella tipica organizzazione per settori gli indirizzi fisici dei blocchi sono costituiti da codici numerici che in generale devono specificare in qualche modo il numero di:
  • - disc-pack;
  • - cilindro;
  • - faccia;
  • - pista o traccia;
  • - blocco o settore.
  • Le operazioni logiche di indirizzamento dei record specificate dal programma devono pertanto essere tradotte in operazioni fisiche di indirizzamento sul DASD, tenendo conto delle considerazioni esposte.
  •  
  • Qualunque sia l’organizzazione dell’archivio ed il supporto di memorizzazione, l'individuazione di un record obiettivo di una data ricerca, cioè le modalità secondo le quali da programma si può fare riferimento ai records di un file, ricade in una delle seguenti tecniche principali:
  •  
  • Accesso Sequenziale;
  • Accesso Casuale o Random;
  • Indirizzamento Diretto (accesso Diretto o Mirato);
  • Indirizzamento Indiretto (accesso per Chiave o Hash);
  • Accesso tramite Indice.

  • Accesso sequenziale
  •  
  • Il file è visto come una sequenza di records, un accesso sequenziale ad un record consente di considerare solo il record posto nella posizione contigua (in accordo con l'organizzazione fisica adottata) alla posizione del record precedentemente esaminato.
  • L'accesso al record richiede pertanto l'accesso a tutti i record che lo precedono ed è temporalmente variabile in funzione della posizione relativa del record nel file.
  •  
  • Vedasi slide SO23 per una esemplificazione.
  •  
  • L'accesso sequenziale può offrire una certa efficienza per richieste tipo GET tutti o tipo GET molti, quindi per applicazioni coinvolgenti elaborazioni di tutto il file o di gran parte di esso (modello di file su nastro, metodo di elaborazione sequenziale).
  •  
  • Uno schema generico di operazioni ammesse è il seguente:
  • Leggi prossimo record (successivo a quello letto precedentemente);
  • Append record (scrivi record alla fine del file);
  • Posiziona TLS all'inizio del file.

  • Accesso diretto
  •  
  • Il file è visto come una sequenza numerata di records, un accesso diretto (detto pure Mirato) ad un record consente di considerare solo il record posto nella posizione corrispondente al suo numero d'ordine nel file, indipendentemente dalla contiguità tra due records esaminati in successione.
  • L'accesso casuale è quindi da ritenersi, in pratica, temporalmente indipendente dalla posizione del record nel file sul supporto (DASD).
  • L'individuazione fisica del blocco obiettivo (contenente il record obiettivo ivi allocato) è generalmente compito del FS.
  •  
  • Vedasi slide SO24 per una esemplificazione.
  •  
  • L'accesso diretto è praticamente necessario per richieste di tipo GET uno o GET alcuni (modello di file su DASD, metodo di elaborazione casuale) e può essere implementato in vari modi più o meno efficienti.
  •  
  • Uno schema generico di operazioni ammesse è il seguente:
  • Leggi/Scrivi record i;
  • Posiziona TLS su record i.
  •  
  • In pratica, le tecniche di accesso diretto si basano sull’idea di ricavare direttamente dal valore della chiave l’indirizzo del record ad essa corrispondente, idea che presuppone di stabilire una relazione tra tale valore e l’indirizzo.
  •  
  • La relazione chiave/indirizzo può assumere diverse forme:
  • Tabella Indice: si mantiene in memoria centrale un’apposita tabella che fa corrispondere ad ogni chiave la posizione del record nel file (soluzione riconducibile ad una organizzazione sequenziale con indice).
  • Corrispondenza Biunivoca: si fa in modo di correlare direttamente ciascuna chiave con uno specifico indirizzo (archivi autoindicizzati o autoindirizzati).

  • accesso per chiave
  •  
  • Tale modalità d'accesso non utilizza direttamente un indirizzo per individuare una registrazione nel file ma un campo chiave tramite il quale si ricava l’indirizzo: il record obiettivo è ricercato in base al contenuto di un suo campo chiave (tipicamente la chiave primaria di riferimento), in corrispondenza ad una data espressione specificata come target di ricerca (slide SO24).
  • Una ricerca per chiave può avere la seguente descrizione generale:
  •  
  • GET from FILE where CHIAVE = espressione
  •  
  • Il principio base di questo tipo di accesso è quello della Trasformazione della Chiave nell'indirizzo fisico utile per reperire il record nel file, trasformazione che può essere implementata secondo diversi criteri, volti ad ottimizzare la ricerca.
  •  
  • Funzione di Trasformazione: si determina una funzione che, sulla base delle informazioni contenute nella chiave (attributi necessari per l’individuazione logica del record logico), sia in grado di determinare la posizione del record fisico (trasformazione chiave/indirizzo); in altri termini, occorrerà stabilire una relazione tale che ad ogni valore K della chiave associ un (solo) indirizzo fisico I(K). Una funzione h:K®I(K) come la suddetta si dice Funzione Hash. Si noti che tale tecnica di accesso (che è per chiave) implica che la chiave contenga tutte le informazioni necessarie alfine di reperire la posizione del record, sia per operazioni di scrittura che di lettura, in modo univoco e con un unico accesso per ogni valore della chiave (in tal caso si parla di trasformazione perfetta). Le funzioni di trasformazione consistono praticamente in Algoritmi di Randomizzazione e la tecnica d’accesso è spesso chiamata Indirizzamento Hash; l’organizzazione fisica dell’archivio corrispondente a tale metodo dicesi File Hash. Un’organizzazione hash è da considerarsi (più appropriatamente che altre simili) effettivamente casuale, in quanto non esisterà, in generale, alcuna relazione tra le posizioni dei records e l’eventuale ordine logico in cui possono essere ordinate le relative chiavi (l’argomento sarà ripreso nella dispensa Archivi).
  •  
  • L'accesso per chiave è molto importante, perchè consente di effettuare una ricerca sulla base delle informazioni logiche (campo chiave, p.es. un Nome) invece che fisiche (posizione del record nel file), svincolando l'utente dalla conoscenza degli aspetti fisici inerenti il file (aspetti tecnici praticamente ingestibili dall'utente); tale metodo si rivela particolarmente idoneo per richieste del tipo GET uno o Get alcuni.
  • Uno schema generico di operazioni ammesse è il seguente:
  • Leggi/Scrivi record ove Chiave=espressione.

  • accesso tramite indice
  •  
  • L'impiego di indici è particolarmente utile nelle organizzazioni sequenziali, per tramite di essi si possono infatti implementare delle organizzazioni sequenziali ad indici le quali riescono a garantire la possibilità di sviluppare applicazioni che richiedono ricerche del tipo GET uno ed operazioni di aggiornamento, ciò a costi contenuti e raggiungendo un buon compromesso tra efficienza e spazio.
  •  
  • In linea di principio, un accesso tramite indici (che ricade nel tipo di accesso per chiave) funziona nel modo seguente:
  • Il File Dati sequenziale va ordinato per chiave (ma non necessariamente);
  • Si definisce un File degli Indici (Index File), ove per indice si intende un Indice di Blocco (Block Index), il cui tracciato record prevede i seguenti campi:
  • Chiave: chiave maggiore (o minore) di tutte quelle dei records del file dati allocati sullo stesso blocco;
  • Pointer: puntatore al blocco;
  • Il File Indice deve essere ordinato per chiave come il File Dati corrispondente.
  •  
  • Vedasi slide SO25 per una esemplificazione.
  •  
  • La ricerca avviene come illustrato in figura.
  • Si osservi che utilizzando più livelli di indici (p.es. indice di cilindro, di traccia e di settore), compatibilmente con le esigenze di ottimizzazione, la ricerca diventa più efficiente.
  • Naturalmente questo tipo di accesso presuppone l'unità a disco.

  • problematiche di Aggiornamento
  •  
  • Le operazioni di aggiornamento (operazioni locali) di un File Dati (Inserimento, Modifica e Cancellazione di records) sono, come già accennato, vincolate a preliminari operazioni di ricerca.
  • Tali operazioni possono essere effettuate secondo varie modalità, rendendo più o meno facile ed efficiente la possibilità di aggiornamento del file.
  •  
  • In linea di massima, le operazioni di aggiornamento dipendono dai seguenti fattori:
  • - Tipo di supporto di memorizzazione (nastro o disco);
  • - Organizzazione fisica del file;
  • - File ordinato o non ordinato;
  • - Metodo di ricerca utilizzato.
  •  
  • Vista la dipendenza delle operazioni di aggiornamento dai suddetti fattori, esse saranno da analizzare in relazione ai rispettivi contesti.
  • Possiamo comunque fare delle considerazioni di carattere del tutto generale a scopo esemplificativo.
  •  
  •  
  • Inserimenti
  • In una organizzazione strettamente sequenziale, sia su disco che, quale unica possibilità, su nastro, gli inserimenti possono avvenire solo in coda al file (Append) se esso non è ordinato (ogni inserimento intermedio implicherebbe la rigenerazione del file) o sulla base di periodiche rigenerazioni del file se esso è ordinato (fusione periodica tra il file ed un file distinto degli aggiornamenti ordinato prima della fusione - programmi di sort/merge sono spesso forniti come corredo del software di base).
  • In una organizzazione non sequenziale in genere si riesce a gestire le cose in modo migliore, tale da poter agire su piccole porzioni di file per effettuare gli inserimenti (aree di overflow, records a lunghezza fissa, tecniche di sovrapposizione, ecc.).
  •  
  •  
  • Modifiche
  • Per le organizzazioni sequenziali valgono considerazioni più o meno analoghe a quelle fatte per gli inserimenti.
  • Per le organizzazioni ad accesso diretto le modifiche dei records sono possibili a costi diversi a seconda delle strutture dati e delle metodologie di ricerca impiegate.

  • Cancellazioni
  • Per le organizzazioni sequenziali valgono considerazioni più o meno analoghe a quelle fatte per gli inserimenti, mentre per le organizzazioni ad accesso diretto valgono considerazioni più o meno analoghe alle precedenti, inoltre, le cancellazioni possono ottimizzarsi, nel senso di recuperare eventuali spazi vuoti rimasti vacanti, ricorrendo a Tecniche di Compattazione dei files.
  • Le cancellazioni possono anche essere Cancellazioni Logiche: invece che l'eliminazione fisica del record si fa in modo che questo risulti "non visibile" alle applicazioni; allo scopo, si può introdurre nel record un Flag (segnalatore) o un cosiddetto Campo di Tag di Cancellazione che settato in un modo "oscura" il record e settato in un altro modo lo rende disponibile, consentendo così di effettuare cancellazioni non definitive, le quali potrebbero risultare di notevole utilità per elaborazioni particolari che non vogliano agire su determinati records senza che questi siano effettivamente cancellati; periodicamente si potrebbe poi procedere alla eliminazione fisica, eventualmente controllata, dei records cancellati logicamente.

  • problematiche di implementazione
  •  
  • L’implementazione di una organizzazione fisica di dati deve evidentemente consentire, funzionalmente ad un certo contesto ed ai tipi di applicazioni ivi ritenute di maggior interesse, l’accesso e l’elaborazione delle informazioni in modo efficiente ed ottimizzato, in modo da garantire quanto più possibilmente il conseguimento o il miglior compromesso tra economia in spazio, economia in tempo e costi generali.
  • Come già osservato, nell’ambito delle operazioni effettuabili sui file dati (registrazione, selezione, aggiornamento, ricerca) la ricerca costituisce un punto cruciale e determinante nel caratterizzare le prestazioni generali di un dato sistema informativo, coinvolgendone sia gli aspetti hardware (tipo di supporto di memorizzazione) e strutturali (organizzazione fisica dei dati sul supporto) che gli aspetti logico-procedurali (organizzazione logica dei dati, criteri con cui si opera sui dati e loro correlazioni).
  •  
  • Comunque vadano le cose, una ricerca può essere svolta secondo due modalità di base:
  • si accede all’elemento del file (blocco contenente il record cercato) ricavando le informazioni necessarie allo scopo dalla chiave;
  • si accede all’elemento cercato effettuando una scansione, completa o parziale, del file (dall’inizio o da un certo punto fino all’elemento se esiste).

Gli aspetti di maggior rilevanza nella definizione di un archivio riguardano dunque:
La Struttura di Archivio (file organization): consistente nella tecnica di memorizzazione dei records sul supporto (posizione, ordinamento, correlazioni); tale struttura è determinata sia sulla base dell'organizzazione fisica del supporto di memorizzazione (tipologia e relative caratteristiche) che del tipo di dati da gestire e del tipo di elaborazioni da fare su di essi, singolarmente o globalmente;
Il Meccanismo di Ricerca: consistente nella logica di accesso alle informazioni (cammino ed ordine di accesso ad una data informazione nel file); tale meccanismo è determinato in modo funzionale rispetto alla organizzazione strutturale del file ed alle esigenze di elaborazione delle informazioni.

Per quanto visto fino a questo punto, possiamo riassumere le problematiche concernenti le implementazioni delle strutture di dati nei seguenti punti principali (alcuni sviluppati in questa sezione e altri nelle sezioni Archivi e Fondamenti):

  • Tipi di supporti di memorizzazione;
  • Organizzazioni fisiche dei dati sul supporto;
  • Tipi di elaborazioni e di applicazioni da svolgere;
  • Organizzazioni logiche delle informazioni;
  • Modalità di accesso e di ricerca delle informazioni;
  • Funzioni di costo.

strutture logiche di dati

I FS tradizionali prevedono, in genere, la gestione di strutture logiche corrispondenti ad Alberi ad un livello (directory gerarchica), ove la radice identifica l'archivio e le foglie i record logici; di norma, i record hanno lo stesso formato (per il medesimo archivio) ed uno o più campi sono utilizzati dal programma alfine di identificare il record (campo chiave).
Il FS fa apparire al programmatore il disco (caso più generale) come un insieme di archivi e può prevedere, oltre alla struttura suddetta, altri tipi di organizzazioni le quali, in quanto implementate nel FS o in moduli del software di base, virtualizzano il disco in:

  Un insieme di archivi, ciascuno visto come una stringa di byte individualmente indirizzabili (byte stream o byte file) ed associabili a record unitari a lunghezza fissa (Unix);

  Uno spazio virtuale di indirizzi indirizzabile al byte, visto come una estensione di memoria principale (SO in multiprogrammazione a memorie virtuali);

  Un insieme di record logicamente correlati da relazioni del tipo record possessore e record membro (schema CODASYL) o da relazioni tra insiemi di record (modello relazionale); tali strutture caratterizzano i DBMS e sono da riguardarsi come estensioni dei FS di tipo tradizionale; in particolare, negli attuali SO il FS è parte integrante di essi mentre nei DBMS il software di base responsabile della gestione è in genere considerato come un'applicazione gestita dal SO.

 

Fonte: http://www.informamica.it/Area%20Studenti/SO.htm
Autore: prof. Felice Zampini                                                  

 

 

Sistemi operativi

 

 

Visita la nostra pagina principale

 

Sistemi operativi

 

Termini d' uso e privacy

 

 

 

Sistemi operativi