...

Gli archivi sequenziali

by user

on
Category: Documents
36

views

Report

Comments

Transcript

Gli archivi sequenziali
Piero Gallo Fabio Salerno
Task
Corso di informatica
2
il libro si estende sul web
Gli archivi
sequenziali
il libro si estende sul web
LEZIONE
L’organizzazione
sequenziale
L’organizzazione logica sequenziale
Con archivio logico sequenziale intendiamo un archivio in cui i record sono registrati in posizioni contigue a partire dalla prima.
Quando su uno o più campi del record è possibile stabilire un ordinamento, allora si può definire anche un ordinamento logico tra le registrazioni che, in determinate circostanze, può anche coincidere con l’ordine fisico. Se i due ordinamenti coincidono, l’archivio viene detto sequenziale ordinato.
Nella seguente figura riportiamo un esempio di archivio sequenziale ordinato: la
funzione di chiave primaria è stata associata al nome del personaggio e le varie
registrazioni sono ordinate alfabeticamente.
Indirizzo
1
...
i
i+1
i+2
i+3
i+4
Chiave
Informazioni
...
...
Minni
Paperino
Paperoga
Pluto
Topolino
...
...
...
...
...
...
...
Tra le caratteristiche fondamentali di questo tipo di organizzazione ricordiamo:
• la possibilità di immissione solo in coda che consente di non perdere l’ordine
di immissione;
• l’utilizzo vantaggioso per le operazioni batch (offline);
• l’utilizzo svantaggioso, ossia inefficiente, per elaborazioni di tipo interattivo
(online) a causa degli elevati tempi di risposta;
• la possibilità di utilizzare esclusivamente un metodo di accesso sequenziale
puro.
L’organizzazione fisica sequenziale
Occupiamoci, ora, dell’aspetto fisico dell’archivio.
Con archivio fisico sequenziale si indica il modo in cui i file sono scritti su disco e non la natura logica degli stessi, descritta nel precedente paragrafo di
questa lezione.
In questo paragrafo, pertanto, quando parliamo di “archivi sequenziali” facciamo
riferimento ad “archivi fisici sequenziali”.
Gli archivi sequenziali sono memorizzati sulla memoria di massa attraverso la
tecnica dell’allocazione contigua. In questo modo, i blocchi che costituiscono il
file sono memorizzati uno di seguito all’altro, ossia in ordine sequenziale, come
si osserva nella figura a pagina seguente.
2
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
L’organizzazione sequenziale
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
LEZIONE 1
File
Blocco iniziale Lunghezza
compito
5
3
lezione
18
5
programma 12
1
...
Come si vede, l’allocazione contigua di un file è definita dando l’indirizzo del primo blocco sul quale il file stesso è allocato e il numero di blocchi che compongono quest’ultimo. Se ad esempio il file è memorizzato a partire dalla locazione b
ed è lungo n, allora occuperà i blocchi: b, b+1, b+2, ..., b+n–1.
Questo tipo di allocazione presenta vantaggi e svantaggi. Il vantaggio principale
consiste nella semplificazione dell’operazione di accesso al file, che consente un
risparmio di tempo in fase di lettura dei dati, in quanto la testina del disco non è
costretta a effettuare grandi movimenti per poter leggere i vari blocchi. Inoltre,
considerato che si conosce a priori la dimensione dei vari blocchi e l’indirizzo su
disco del primo blocco occupato, è possibile realizzare l’accesso diretto in modo
sostanzialmente semplice.
L’accesso a un file allocato in modo contiguo è, quindi, piuttosto semplice, ma le
difficoltà sorgono ogniqualvolta si ha la necessità di allocare un nuovo file. Se il
file da memorizzare è “lungo” n blocchi, si deve cercare all’interno della lista dello spazio libero se esiste una serie di n blocchi contigui. Ciò non è sempre possibile. Questa operazione di ricerca di uno spazio idoneo può essere effettuata dal
sistema operativo utilizzando diverse strategie:
• ricercando la prima area libera sufficientemente grande (first-fit);
• ricercando la prima area libera sufficientemente grande, iniziando l’operazione di scansione dal punto in cui si trova la testina (next-fit);
• ricercando l’area libera più piccola che possa contenere il file (best-fit);
• ricercando l’area libera più grande possibile (worst-tit).
Qualsiasi tecnica si utilizzi, però, sorgeranno comunque dei problemi: il disco
continuerà a essere frammentato sempre di più, fino a trovarsi in una situazione
che potrebbe sembrare assurda, ma purtroppo è assolutamente reale: non sarà
possibile memorizzare un file poiché non esisterà uno spazio contiguo abbastanza capiente da contenerlo, nonostante lo spazio libero complessivo sia sensibilmente maggiore di quello necessario.
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
3
ESEMPI
LEZIONE
L’organizzazione sequenziale
Oggigiorno la gestione degli archivi di dati (in forma di database) è oramai delegata ad appositi software denominati DMBS (Database Management System), poiché la loro semplicità di utilizzo e la loro sicurezza ne consente l’utilizzo anche
senza conoscere neppure marginalmente le varie modalità con cui organizzano i
dati e li memorizzano. Nonostante ciò, è comunque utile conoscere alcuni tipi di
organizzazione logica che consentono di organizzare archivi per applicazioni personalizzate. Quelli che andremo ad analizzare non sono indispensabili: sono semplicemente comodi!
I file di testo
Un archivio organizzato come file di testo contiene solo semplici caratteri di
scrittura, senza alcuna informazione sul loro formato (dimensione, colore e
così via). Solitamente rappresenta un testo che può essere letto con semplici
editor di testo senza bisogno di installare sofisticati word processor.
I byte dei file di testo rappresentano quindi lettere, numeri, punteggiatura, spazi
e altri normali simboli stampabili, ma possono contenere anche specifici caratteri di controllo come tab (per la tabulazione), carriage return (CR) per il ritorno a
capo e line feed (LF) per l’avanzamento alla riga successiva.
I file di testo sono molto utilizzati dai software ad esempio durante la fase di installazione, poiché contengono i dati per compiere la configurazione. Pensa ai file
.ini quali, ad esempio, system.ini, win.ini e boot.ini di Windows che memorizzano alcuni dati relativi alla configurazione del sistema.
Un motivo della diffusione dei file di testo è la facile interpretabilità da parte dell’uomo. Un esempio di struttura di questo tipo di file è riportata nella seguente figura: esempio:
[Sezione1]
; Un commento su questa sezione.
Parametro1 = Questo è un valore assegnato, come quello seguente.
Parametro2 = 1
[Sezione2]
; Un ulteriore commento.
Parametro1 = Un esempio...
Parametro2 = 25
4
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
L’organizzazione sequenziale
ESEMPI 1
Analizziamolo:
• una sezione inizia con la dichiarazione del suo nome racchiuso fra parentesi
quadre (nel nostro caso [Sezione1] e [Sezione2]);
• all’interno di una sezione, l’assegnazione di un valore a un parametro si effettua con un’assegnazione matematica (variabile = valore);
• una riga che inizia con un punto e virgola (‘;’) è un commento, e in quanto tale
viene ignorata.
I file CSV
CSV (Comma Separated Values = valori separati da virgola) è un formato per
file di testo utilizzato per memorizzare dati nei fogli elettronici, nei database e
per lo scambio di dati tra sistemi differenti che operano su piattaforme incompatibili.
Al suo interno, ogni riga rappresenta un record composto da campi separati da
una virgola (nel caso in cui la virgola sia una carattere da rappresentare all’interno di un campo, il carattere separatore viene sostituito con un altro, ad esempio
il punto e virgola, oppure il campo stesso viene racchiuso tra virgolette). Ogni record è separato dal successivo dalla sequenza di caratteri CR+LF (Carriage Return
+ Line Feed) che consentono, rispettivamente, di ritornare all’inizio della riga e di
aggiungere una nuova riga al file.
OPERA
AUTORE
CASA EDITRICE
I Robot e l’Impero
Isaac Asimov
Mondadori
Mondo senza fine
Ken Follett
Mondadori
Java Step by Step “2° Edizione”
Gallo, Salerno
Scuola & Azienda
Paura della matematica
Peter Cameron
La Feltrinelli
L’esempio qui sopra si potrebbe rappresentare in CSV come:
OPERA,AUTORE,CASA EDITRICE
I Robot e l’Impero,Isaac Asimov,Mondadori
Mondo senza fine,Ken Follett, Mondadori
“Java Step by Step “”2° Edizione”””,”Gallo, Salerno”,Scuola & Azienda
Paura della matematica,Peter Cameron,La Feltrinelli
Da notare che:
• i campi sono separati da virgola e vengono racchiusi tra doppi apici se contengono virgole;
• è preferibile non lasciare spazi prima e dopo i campi (se intenzionali, tali spazi devono essere racchiusi tra doppi apici);
• per rappresentare un carattere doppi apici in un campo occorre raddoppiarlo:
“ diventa “”.
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
5
ESEMPI
LEZIONE
L’organizzazione sequenziale
I file XML
L’HTML (Hypertext Markup Language) è un linguaggio che consente di creare in
maniera standardizzata pagine di informazioni formattate in grado di raggiungere attraverso Internet gli utenti di tutto il mondo. Insieme al protocollo HTTP
(Hypertext Transport Protocol), l’HTML ha rivoluzionato il modo in cui le persone
trasmettono e ricevono informazioni; il suo scopo principale, però, è sempre stato inerente la visualizzazione dei dati. L’HTML, infatti, considera particolarmente
il modo in cui le informazioni vengono presentate e non si occupa minimamente del tipo o della struttura di tali informazioni.
Per far fronte a tali aspetti è stato sviluppato il linguaggio XML (eXtensible Markup
Language) che espande le capacità di HTML grazie all’introduzione di nuovi marcatori. La sintassi di XML è molto scarna, non prevede tanti elementi di marcatura. Quando si crea un documento XML, invece di utilizzare un set di elementi predefiniti, è possibile crearne di nuovi e assegnare loro i nomi desiderati, il che
spiega il termine extensible, cioè estensibile.
Un file XML è un file di testo costituito da un insieme di tag. La sua struttura è
ad albero: esiste, infatti, un solo tag principale che può contenerne altri, ciascuno dei quali ne può contenere altri ancora e così via.
Come per gli altri tipi di file esaminati, anche i file XML sono utilizzati per memorizzare e scambiare dati tra applicazioni, o come file di configurazione. Sono file
ormai molto diffusi, al punto che alcuni gestori di database memorizzano i dati direttamente in questo formato oppure, pur non scrivendo i dati in XML, consentono di estrarne il contenuto in questo formato.
Proviamo a comporre un file XML con i dati presenti nel seguente elenco di amici:
Rossi
Maria
20134
Milano
Neri
Paolo
73100
Lecce
Verdi
Riccardo
70100
Bari
Gialli
Daniela
00195
Roma
<?xml version=”1.0” encoding”=ISO-8859-1”?>
<AMICI>
<AMICO>
<COGNOME>Rossi</COGNOME>
<NOME>Maria</NOME>
<CAP>20134</CAP>
<CITTA>Milano</CITTA>
</AMICO>
<AMICO>
<COGNOME>Neri</COGNOME>
<NOME>Paolo</NOME>
<CAP>73100</CAP>
<CITTA>Lecce</CITTA>
</AMICO>
<AMICO>
<COGNOME>Verdi</COGNOME>
<NOME>Riccardo</NOME>
<CAP>70100</CAP>
<CITTA>Bari</CITTA>
</AMICO>
<AMICO>
<COGNOME>Gialli</COGNOME>
6
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
L’organizzazione sequenziale
ESEMPI 1
<NOME>Daniela</NOME>
<CAP>00195</CAP>
<CITTA>Roma</CITTA>
</AMICO>
</AMICI>
È importante notare che i nomi degli elementi dei documenti XML (ad esempio:
AMICI, AMICO, COGNOME, NOME, CAP e CITTA), non fanno parte della definizione XML. I nomi degli elementi vengono creati durante la generazione di un determinato documento e possono essere scelti a proprio piacimento. Nell’ esempio
avremmo potuto continuare a scrivere tanti altri elementi AMICO e al loro interno gli elementi COGNOME, NOME, CAP e CITTA.
Pertanto, un documento XML è strutturato in base a una gerarchia strutturata, in
cui gli elementi risultano annidati in altri elementi, con un unico elemento di livello superiore (AMICI, nel nostro caso), il quale prende il nome di elemento del
documento o elemento principale.
I file binari
I file binari sono file contenenti dati generici che non sono direttamente leggibili dall’utente. In realtà, dal punto di vista della macchina, non c’è distinzione
tra file di testo e fil binari, poiché tutti entrambi non sono altro che sequenze
di byte. La differenza sta solo in ciò che i byte rappresentano e nel modo in cui
sono utilizzati.
Un file binario è una pura sequenza di byte, senza alcuna struttura particolare. È
un’astrazione di memorizzazione assolutamente generale, utilizzabile per memorizzare informazioni di qualsiasi natura come ”fotografie” della memoria, rappresentazioni interne binarie di numeri, immagini, canzoni campionate e, volendo,
anche caratteri!
I file binari sono solitamente concepiti come sequenze di byte: i singoli bit che costituiscono il file
sono raggruppati in gruppi di otto. Questi file contengono byte che devono generalmente essere interpretati in modo diverso dai caratteri: i file compilati sono un esempio (i programmatori si riferiscono
spesso al codice oggetto col termine “binario”), ma
si può trattare di immagini, musica, dati compressi
o di qualsiasi altro tipo.
Aprendo un file binario con un editor di testo, ogni
gruppo di otto bit viene regolarmente interpretato e
tradotto come un carattere e ne risulta una sequenza del tutto incomprensibile (a meno di coincidenze o inserti di testo nel file). Se
lo si apre con un diverso tipo di applicazione, questa interpreterà i singoli byte del
file a suo modo: potrebbe, quindi, farvi corrispondere una cifra e restituire una
sfilza pressoché casuale di numeri; oppure, se il file viene riconosciuto come eseguibile, il computer cercherà in essi delle istruzioni in linguaggio macchina.
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
7
Le operazioni logiche
sugli archivi
sequenziali
il libro si estende sul web
LEZIONE
Le operazioni consentite su un archivio a organizzazione sequenziale sono riassunte nel seguente diagramma:
ORGANIZZAZIONE
LOGICA
ACCESSO SEQUENZIALE
Inserimento:
Modifica:
Cancellazione:
Ricerca:
ARCHIVI
SEQUENZIALI
in coda
usa file differenziale
usa file differenziale
completa
ACCESSO DIRETTO
SINGOLO
FILE
NON
ORDINATO
ORDINATO
CON USO
DI INDICI
Inserimento:
Modifica:
Cancellazione logica:
Cancellazione fisica:
Ricerca:
in coda
immediata
immediata
solo al riordino
completa
ACCESSO SEQUENZIALE
Inserimento:
Modifica:
Cancellazione:
Ricerca:
usa aree dei trabocchi
usa file differenziale
usa file differenziale
usa file differenziale
sequenziale
ACCESSO DIRETTO
INDICE
SEMPLICE
INDICE TRAMITE
LISTA CONCATENATA
Inserimento:
usa aree dei trabocchi
Modifica:
immediata
Cancellazione logica:
immediata
Cancellazione fisica: solo al riordino
Ricerca:
sequenziale
binaria
interpolata
Inserimento
Per l’operazione di inserimento occorre distinguere sempre tra archivi non ordinati e archivi ordinati.
Su un archivio non ordinato, l’inserimento non comporta problemi: il record si
aggiunge in coda o, se nell’archivio esistono delle posizioni libere, può essere inserito nella prima di esse.
I problemi, questa volta, sorgono se l’archivio è ordinato. In questo caso, infatti,
occorre individuare l’esatta posizione in cui collocare il record: appare evidente
che, una volta individuata la posizione, occorrerà traslare tutti i record successivi
in modo da creare lo spazio. Se nell’archivio ci fossero posizioni libere, l’inserimento sarebbe meno oneroso, in quanto potremmo limitare la traslazione soltanto fino al primo spazio libero. Considerato che la presenza di tali spazi agevola
questa operazione, perché non crearli di proposito in fase di progettazione dell’archivio? Operando in questo modo, occorre distribuire un congruo numero di aree
libere lungo l’archivio, scegliendo opportunamente il numero e la dimensione in
funzione del problema e delle risorse a disposizione.
È ovvio, comunque, che se la presenza di tali aree agevola l’inserimento, ostacola, però, la ricerca. Alternative efficienti possono essere applicate solo su archivi
ordinati. Vediamone qualcuna.
Una prima soluzione consiste nel registrare i nuovi record in un archivio temporaneo o differenziale. Si procede poi, periodicamente, a una fusione tra i due archivi, così da rigenerare l’archivio principale. Questa soluzione non è delle miglio-
8
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
Le operazioni logiche
sugli archivi sequenziali
LEZIONE 2
ri, in quanto alcune operazioni, come ad esempio la ricerca, sarebbero eseguite
in modo poco efficiente perché, per reperire un record, occorrerebbe operare sia
sull’archivio principale che su quello temporaneo, con conseguente aumento dei
tempi di risposta.
La soluzione ottimale consiste nel predisporre nell’archivio delle aree libere, dette aree di overflow (o aree dei trabocchi), destinate ad accogliere i nuovi record
inseriti. Queste aree possono essere disposte uniformemente nell’archivio principale o in un altro archivio differenziale (aree di overflow distribuito), oppure essere allocate in un unico punto dell’archivio o, ancora una volta, in un altro archivio differenziale (aree di overflow concentrato).
Aree di overflow
distribuito
Area di overflow
concentrato
Aggiornamento (riscrittura)
La fase di aggiornamento, ossia l’operazione che consente di apportare modifiche ai campi di un record (a eccezione della chiave), può essere svolta, come al
solito, in due modi diversi dipendenti dal metodo di accesso.
Se l’accesso è sequenziale, l’aggiornamento di un record può essere svolto solo
riscrivendo l’intero archivio. Le modifiche vengono raccolte in un altro archivio e,
successivamente, si provvede all’aggiornamento dell’archivio principale.
Nel caso di accesso diretto, invece, l’aggiornamento è una delle operazioni più
semplici da realizzare, in quanto consta solo di tre semplici fasi:
• ricerca del record di chiave K che si intende aggiornare;
• modifica del record;
• riscrittura del record modificato nella stessa posizione.
Cancellazione
Anche per la cancellazione valgono le medesime considerazioni svolte per l’aggiornamento. Pertanto, nel caso di archivi sequenziali ad accesso sequenziale
l’unico modo per poter cancellare un record (e quindi mantenere la corrispondenza tra la struttura logica e quella fisica) è quello di riscrivere l’intero archivio
privato del record stesso servendosi di un archivio di appoggio.
Nel caso di archivi sequenziali ad accesso diretto, si ovvia a questo increscioso inconveniente effettuando una cancellazione logica, ossia predisponendo un apposito campo in grado di contenere un valore la cui presenza indica, appunto, la
cancellazione del record. Periodicamente si provvederà alla compattazione dell’archivio, eliminando fisicamente i record marcati per la cancellazione (cancellazione fisica).
Ordinamento
È ormai evidente che l’ordinamento riveste un ruolo di fondamentale importanza per garantire l’efficienza di talune operazioni. Per questo, occorre fare molta
attenzione nella scelta del metodo da applicare per ordinare l’archivio. Senza
scendere in dettagli, ricordiamo che molti dei metodi di ordinamento descritti nel
primo volume del testo possono essere tranquillamente applicati anche agli archivi sequenziali ad accesso diretto. Ciò, ovviamente, non è valido per gli archivi memorizzati su dispositivi a esclusivo accesso sequenziale.
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
9
Le operazioni logiche:
la ricerca
il libro si estende sul web
LEZIONE
Le esigenze maggiormente diffuse nell’uso degli archivi sono quelle di inserimento, consultazione e aggiornamento di record. In presenza di tali esigenze, la ricerca dei record registrati è una delle operazioni più importanti e più frequenti. È ovvio, quindi, che tale operazione debba essere compiuta utilizzando una tecnica
che consenta di ottenere il miglior risultato nel minor tempo possibile. La scelta
del metodo riveste un ruolo di fondamentale importanza e varia in base al tipo di
supporto di memoria utilizzato e alla presenza o meno di un ordinamento. In passato gli archivi venivano memorizzati sui nastri magnetici e, su di essi, l’unico
metodo di ricerca attuabile era quello della ricerca completa dell’archivio, sino al
reperimento del record di chiave desiderata. Il numero medio di accessi di tale
metodo è il seguente:
• successo: (N + 1)/2 accessi;
• insuccesso: N accessi;
dove N è il numero di record presenti nell’archivio.
Quando si cominciò a trattare con archivi in cui si interveniva con frequenza solo
su alcuni record, si cercò di ridurre il numero medio di accessi collocando tali record nelle prime posizioni dell’archivio. Questo metodo apportò un parziale incremento di efficienza solo in caso di successo: infatti, più probabile era la chiave, meno accessi erano necessari. In caso di insuccesso, invece, la situazione non
mutava: erano sempre necessari N accessi. Con gli archivi ordinati si poté ricorrere a un altro metodo di ricerca, la ricerca sequenziale, ottenuta mediante l’ottimizzazione della scansione (la ricerca, infatti, si interrompe quando si trova la chiave
cercata oppure quando ci si posiziona su un record di chiave maggiore di quella
cercata). In tal caso, il numero medio di accessi diveniva:
• successo: (N + 1)/2 accessi;
• insuccesso: (N + 1)/2 accessi.
Ricapitoliamo:
RICERCA in archivi a
ORGANIZZAZIONE Sequenziale
e ACCESSO Sequenziale
Archivio
non ordinato
Archivio
ordinato
Archivio con chiavi
di frequente
movimento in testa
Successo
Insuccesso
Successo
Insuccesso
Successo
Insuccesso
(N + 1)/2
accessi
N
accessi
(N + 1)/2
accessi
(N + 1)/2
accessi
In funzione
della probabilità
della chiave
N
accessi
Analizziamo, ora, il problema della ricerca applicato ad archivi a organizzazione
sequenziale memorizzati su supporti ad accesso diretto. Quando è consentito
l’accesso diretto, si possono verificare le seguenti situazioni:
• se si conosce l’indirizzo del record da ricercare, il problema non sussiste: mediante un accesso, ci si posiziona direttamente sul record;
• se l’indirizzo del record non è noto e l’archivio è disordinato, la situazione resta
analoga a quella descritta per l’accesso sequenziale;
• se l’indirizzo del record non è noto, ma l’archivio è ordinato, il problema viene
risolto con l’impiego di tecniche di ricerca molto efficienti, quali la ricerca binaria. Per quanto riguarda questo metodo di ricerca, sia in caso di insuccesso
che di successo (sia riferito al caso medio che a quello pessimo) si può dimo-
10
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
Le operazioni logiche: la ricerca
LEZIONE 3
strare che il numero di accessi è pari a log(N). Il numero medio di accessi della ricerca interpolata, invece, è pari a log(log(N)), quindi è nettamente inferiore
a quello della ricerca binaria.
Riportiamo la soluzione di massima dell’algoritmo della ricerca binaria espresso
in forma ricorsiva.
FUNZIONE RicercaBinaria
INIZIO
Posizionati sulla posizione centrale della porzione di archivio da esaminare
Leggi il record corrispondente
SE la chiave cercata è uguale a quella del record
ALLORA
restituisci “Chiave trovata”
ALTRIMENTI
SE ci sono altri record da esaminare
ALLORA
SE la chiave cercata è maggiore di quella del record
ALLORA
Applica la ricerca binaria alla seconda metà della porzione
di archivio da esaminare
ALTRIMENTI
Applica la ricerca binaria alla prima porzione dell’archivio
da esaminare
FINESE
ALTRIMENTI
Restituisci “Chiave non trovata”
FINESE
FINESE
Restituisci l’esito della funzione
FINE
In sintesi:
RICERCA in archivi a
ORGANIZZAZIONE Sequenziale
e ACCESSO Diretto
Indirizzo
conosciuto
Indirizzo
sconosciuto
Archivio
ordinato
1
accesso
Archivio
disordinato
Successo
Insuccesso
Ricerca
binaria
Ricerca
interpolata
Ricerca
binaria
log2 N
log2 N (log2 N)
log2 N
log2 (log2 N)
Sia nel caso
medio sia in
quello pessimo
Solo se le chiavi
sono
uniformemente
distribuite
Sia nel caso
medio sia in
quello pessimo
Caso medio
Analogo all’accesso
sequenziale
Ricerca
interpolata
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
11
L’organizzazione
sequenziale con indice
il libro si estende sul web
LEZIONE
Gli archivi registrati su supporti fisici che permettono l’accesso diretto possono essere gestiti anche con una variante dell’organizzazione sequenziale, caratterizzata
dalla possibilità di velocizzare la ricerca di un record mediante uno o più indici.
Nell’organizzazione sequenziale a indici (indexed sequential) si possono distinguere due elementi fondamentali:
• un archivio primario, caratterizzato da record consecutivi che possono anche
essere ordinati;
• un archivio secondario o indice ordinato (dizionario) o una gerarchia di indici, i cui elementi sono composti, generalmente, da due campi:
– un campo chiave, contenente la chiave del record;
– un campo puntatore, contenente la posizione del record all’interno dell’archivio primario.
Questa tipologia di organizzazione prevede, quindi, la suddivisione del file in
gruppi di record e la conservazione della chiave, la maggiore o la minore tra tutte
quelle dei record presenti in ciascun gruppo, in una sovrastruttura di indici che diventa un vero e proprio file di indici distinto da quello dei dati. L’acceso indicizzato a un record avviene in due fasi: prima si ricerca nel file di indici quello del gruppo che lo contiene e poi si leggono in modo sequenziale tutti i record del gruppo
fino a raggiungere quello cercato.
L’indice, quindi, consente di stabilire una corrispondenza tra ogni chiave e la posizione del relativo record memorizzato nell’archivio.
Analizziamo la seguente figura. Si nota come l’indice debba contenere necessariamente tutte le chiavi presenti nell’archivio primario. Per cercare un record di
cui si conosce la chiave, si cerca questa nell’indice; se esiste, tramite il puntatore,
si accede direttamente all’archivio primario.
Chiave
A
B
D
E
F
G
Puntat.
8
5
6
9
2
4
O
X
Z
7
1
3
Parte informativa
Informazioni su X
2
3
4
5
6
Chiave
X
F
Z
G
B
D
7
8
9
O
A
E
Informazioni su O
1
Indice ordinato (dizionario)
Informazioni su Z
Archivio primario
Questa soluzione è dispendiosa sia in termini di occupazione di memoria, sia di
gestione delle informazioni. Per sfruttare la totalità dei vantaggi offerti da questo
tipo di organizzazione, e in particolare potenziare le operazioni di ricerca dei record, occorre innanzitutto distinguere fra:
• strutture sequenziali con indice ordinate;
• strutture sequenziali con indice non ordinate;
e tenere conto del metodo di costituzione dell’indice.
12
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
L’organizzazione sequenziale con indice
LEZIONE 4
Nelle strutture ordinate, l’archivio primario viene implementato in una struttura a
pagine (o sottoarchivi che sono costituiti da blocchi contigui con ugual numero di
record) e l’indirizzo della chiave più alta di ciascun sottoarchivio è contenuto nell’indice i cui record sono del tipo:
(Kh, P)
dove Kh indica la chiave più alta e P il numero di sottoarchivio.
In questo modo, quindi, l’indice viene utilizzato esclusivamente per la ricerca dei
vari sottoarchivi. Analizziamo la seguente figura:
Chiave
Altri dati
2
5
20
...
...
...
48
52
85
...
...
...
125
154
190
...
...
...
199
211
214
...
...
...
Sottoarchivio
1
Sottoarchivio
2
Chiave
20
85
190
214
Puntat.
1
2
3
4
Sottoarchivio
3
Sottoarchivio
4
In pratica, il valore della chiave nell’indice indica esplicitamente la chiave di valore più alto contenuta all’interno del sottoarchivio, mentre il puntatore indica implicitamente la posizione della chiave più bassa poiché rappresenta l’indirizzo del
sottoarchivio e, quindi, il primo record presente, cioè quello con la chiave di valore più basso.
Generalmente, la ricerca di una chiave K avviene rispettando la seguente procedura:
• ricerca nell’indice la prima chiave Kh ≥ K
• accedi al sottoarchivio P associato alla chiave Kh
• ricerca la chiave K nel sottoarchivio P
La ricerca all’interno dell’archivio indice può avvenire con qualsiasi metodo di ricerca (sequenziale, binaria, interpolata e così via). In questo tipo di organizzazione, la chiave Kh ha la stessa funzione svolta dalla parola riportata nella parte più
alta di ogni dizionario. Ricordiamo che, nella precedente figura, le frecce che collegano i sottoarchivi sono state appositamente inserite per suggerire che, nonostante la suddivisione, è possibile eseguire la scansione sequenziale dell’archivio
primario utilizzando diverse tecniche. Si può, ad esempio, ricorrere a un puntatore esplicito, per mezzo dello stesso archivio indice, oppure sfruttare la contiguità
delle pagine.
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
13
L’organizzazione
sequenziale con indice:
l’aggiornamento
il libro si estende sul web
LEZIONE
Poiché l’archivio primario è pur sempre un archivio sequenziale, le operazioni che
comportano qualche problema nella loro implementazione sono quelle di inserimento e di cancellazione di record, le quali richiedono successive riorganizzazioni
dell’archivio. Queste operazioni vengono eseguite nello stesso modo previsto per
l’organizzazione sequenziale, ossia servendosi di apposite aree di overflow.
Una tra le tecniche più frequentemente utilizzate prevede che il record dell’archivio indice sia così strutturato:
(Kh, P, Kovf, Povf)
dove Kovf e Povf indicano, rispettivamente, la chiave più alta presente nell’area di
overflow e il puntatore di accesso a tale area.
Durante l’esecuzione delle varie operazioni logiche relative a un record di chiave
K, l’area di overflow sarà consultata solo se la pagina P è piena e se la chiave K risulta compresa tra Kh e Kovf.
Riprendiamo l’esempio riportato nella precedente lezione e proviamo a inserire il
record di chiave 58. L’inserimento verrà effettuato nel sottoarchivio 2 che, essendo pieno, provocherà il trabocco del record di chiave 85.
Dopo l’inserimento la situazione sarà la seguente:
Chiave
Altri
dati
1
2
5
20
...
...
...
...
Sottoarchivio
2
48
52
58
...
...
...
...
Sottoarchivio
3
125
154
190
...
...
...
...
Sottoarchivio
4
199
211
214
...
...
...
...
85
...
...
...
...
Sottoarchivio
Chiave
20
58
190
214
Punt.
1
2
3
4
Kovf
Nil
85
Nil
Nil
Povf
Nil
5
Nil
Nil
Sottoarchivio
5
(overflow)
14
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
L’organizzazione sequenziale con indice:
l’aggiornamento
LEZIONE 5
Riportiamo la soluzione di massima relativa all’operazione di inserimento appena compiuta.
Siano:
• Kh’ la penultima chiave presente nella pagina Pag;
• Ktrab la chiave traboccata.
PROCEDURA Inserisci
INIZIO
Ricerca nell’archivio indice la prima chiave Kh o Kovf che è più grande di K
SE(K < Kh)
ALLORA
Inserisci il record nella pagina Pag rispettando l’ordinamento
SE c’è trabocco di pagina
ALLORA
Inserisci il record traboccato in testa all’area di overflow
SE è il primo trabocco
ALLORA
Sostituisci nell’archivio indice (Kh, Pag, Nil, Nil)
con (Kh’, Pag, Ktrab, Povf)
ALTRIMENTI
Sostituisci nell’archivio indice Kh con Kh’
FINESE
FINESE
ALTRIMENTI
Inserisci il record nell’area di overflow rispettando l’ordinamento
FINESE
FINE
Ricordiamo, infine, che l’allocazione e l’organizzazione dell’area di overflow possono variare in funzione del metodo implementativo adottato. Una delle possibili soluzioni prevede di riservare un sottoarchivio di overflow ogni N sottoarchivi
dell’archivio primario.
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
15
il libro si estende sul web
LEZIONE
Indici multipli
o a più livelli
Nel caso in cui il numero di sottoarchivi diventi rilevante e, di conseguenza, il numero di record presenti nell’indice cominci a divenire considerevole (appesantendo la ricerca), è possibile organizzare l’indice a sua volta come un archivio sequenziale con indice. Si dà così luogo a sottoindici di differente livello, che
permettono di ottenere una diminuzione del tempo di scansione dell’indice stesso. In presenza di più livelli di indice, nella fase di ricerca la gerarchia viene utilizzata per poter individuare (partendo da un indice a livello k) quale indice a livello
k + 1 debba essere esaminato al fine di selezionare il sottoarchivio all’interno del
quale si trova il record cercato.
Per comprendere l’uso degli indici a più livelli, si può fare riferimento al reperimento di un’informazione di un volume mediante il suo indice analitico. Un indice analitico è composto da un insieme di termini accanto ai quali è specificata la
pagina del libro all’interno della quale essi sono trattati.
I vari termini sono ordinati alfabeticamente e sono raggruppati secondo le lettere dell’alfabeto con la quale iniziano. Se, ad esempio, si vuole ricercare il termine
indice, si procede nel seguente modo:
1.. si ricerca la lettera i;
2. nel blocco che racchiude tutti i termini che iniziano con i, si ricerca il termine
indice e si preleva il numero di pagina;
3. si apre il libro alla pagina ottenuta e si leggono le informazioni.
Questa struttura è, quindi, un valido esempio di indici multipli: il primo livello è
rappresentato dalle lettere dell’alfabeto, il secondo livello è costituito da tanti indici quante sono le lettere e ciascun indice è composto da tutti i termini che iniziano con la lettera collegata.
Talvolta, questo tipo di organizzazione viene utilizzato su hard disk, cioè su supporti a disco di tipo disk-pack, al fine di ottimizzare i movimenti del pettine.
Generalmente, un’organizzazione sequenziale con indice utilizza tre livelli di indice, in particolare:
• un indice di unità, che consente di determinare su quale unità di memoria secondaria occorre ricercare il record, nel caso in cui l’archivio sia memorizzato
su più unità;
• per ogni unità, un indice di cilindro che consente di determinare su quale cilindro dell’unità deve avvenire la ricerca;
• per ogni cilindro, un indice di traccia che consente di determinare su quale
traccia di quel cilindro deve avvenire la ricerca.
Nel caso di strutture non ordinate, l’indice è più complesso e può essere articolato anche su più livelli. Tuttavia, nonostante il numero di indici e le loro dimensioni ragguardevoli, la gestione non ordinata facilita notevolmente l’operazione di
inserimento, poiché nuovi record saranno semplicemente aggiunti in coda all’archivio primario, senza che si verifichino appesantimenti dovuti alla gestione delle aree di overflow.
16
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
Indici multipli o a più livelli
INDICE AL
LIVELLO 1
INDICE AL
LIVELLO 2
LEZIONE 6
INDICE AL
LIVELLO 3
ARCHIVO
PRIMARIO
...
5
98
152
2
152
21 5
527
900
2
3
4
1154
1896
9
10
2380
2585
11
12
4
4931
5650
6888
7590
6
202
21 5
114
115
250
527
116
117
850
900
118
119
1000
1154
120
121
112
12
15
25
54
64
72
98
...
...
...
...
...
...
...
7
3
1
900
2585
7590
5
6
7
8
112
113
8
113
102
120
125
130
132
140
152
...
...
...
...
...
...
...
9
13
14
15
16
114
160
200
201
202
...
...
...
...
...
...
...
16
6520
7590
140
141
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
17
Tutto in test...a
PROVE OGGETTIVE PER LA VERIFICA DELLE CONOSCENZE
1. Che cos’è un archivio sequenziale?
8. Quando un archivio sequenziale viene detto seriale?
2. Quali sono le caratteristiche fondamentali dell’organizzazione sequenziale?
9. Su un archivio sequenziale non ordinato, l’inserimento
non comporta problemi. Che cosa significa?
10. In fase di inserimento i problemi sorgono se l’archivio
sequenziale è ordinato. Che cosa significa?
3. Un file di testo
a
contiene solo semplici caratteri di scrittura
b
non necessita di sofisticati word processor per
la sua lettura
c
non può contenere simboli di punteggiatura
d
non può contenere numeri
11. Stabilisci se le seguenti affermazioni sono vere o false
in un archivio sequenziale ad accesso
diretto la ricerca sequenziale effettua
log2N accessi --------------------------------------------------------- V F
b nell’organizzazione ad indici si distinguono
tre elementi fondamentali ---------------------------------- V F
c le strutture sequenziali possono essere ordinate
o no ---------------------------------------------------------------------------- V F
d su archivi sequenziali è possibile effettuare la
cancellazione logica---------------------------------------------- V F
a
4. Che cosa sono i file ini?
5. Che cosa differenzia il linguaggio HTML dal linguaggio
XML?
12. Che cosa sono le aree di overflow (dette anche aree
dei trabocchi)?
6. I file binari
a
non sono direttamente leggibili dall’utente
b
possono essere letti solo con word processor
sofisticati
c
possono essere letti con qualsiasi word
processor
d
contengono una sequenza di numeri decimali
13. Che cosa sono le aree di overflow distribuito?
14. Che cosa sono le aree di overlow concentrato?
15. Stabilisci se le seguenti affermazioni sono vere o false
7. Stabilisci se le seguenti affermazioni sono vere o false:
in un archivio sequenziale l’ordinamento
logico può coincidere con l’ordinamento
fisico -------------------------------------------------------------------------b quando l’ordinamento, logico coincide
con quello fisico l’archivio viene detto
sequenziale puro --------------------------------------------------c le operazioni consentite su un archivio ad
organizzazione sequenziale sono la lettura,
la scrittura e la riscrittura ----------------------------------d la fase di aggiornamento consente
di apportare delle modifiche ai campi
di un record ad eccezione della chiave ----------
a
a
V
F
V
F
V
F
b
nell’organizzazione ad indici, il dizionario
può non essere ordinato------------------------------------gli indici possono essere gestiti solo su
dispositivi ad accesso diretto ---------------------------
V
F
V
F
16. In un’organizzazione a indice, quando si parla di archivio primario non paginato?
17. In un’organizzazione a indice, quando è necessario utilizzare i sottoarchivi?
V
F
18. Generalmente, un’organizzazione sequenziale con indice quanti livelli di indice utilizza?
18
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
Diamoci il voto!!!
Con questa scheda puoi autovalutare il tuo livello di acquisizione delle conoscenze e delle abilità insegnate nell’Unità formativa. Attribuisci un punto a ogni risposta esatta. Se totalizzi un punteggio:
<4
Tra 4 e 6
Rifletti un po’ sulle tue
“disgrazie”
Rivedi l’unità formativa
nelle sue linee generali
Rivedi con attenzione
tutta l’unità formativa
Ripeti il questionario
Tra 6 e 8
Rivedi l’unità formativa
nelle sue linee generali
>8
Tutto OK
Ripeti il questionario
1.
Nell’allocazione contigua:
6.
i file sono memorizzati uno di seguito all’altro,
ossia in ordine sequenziale
b i blocchi che costituiscono il file non sono
memorizzati uno di seguito all’altro
c i blocchi che costituiscono il file sono
memorizzati uno di seguito all’altro, ossia in
ordine sequenziale
d nessuna delle precedenti è corretta
a
2.
Nell’allocazione contigua, la ricerca dello spazio più
grande per contenere il file da parte del sistema operativo avviene grazie alla tecnica:
può essere svolto in due modi diversi dipendenti
dal metodo di accesso.
b può essere svolto solo riscrivendo l’intero
archivio se l’accesso è sequenziale
c non può essere eseguita se l’organizzazione è
ad accesso diretto
d non può comunque essere fatto su archivi
sequenziali
a
7.
può essere implementata su qualsiasi supporto
fisico
b può essere implementata solo su supporti fisici
che permettono l’accesso diretto
c può essere implementata solo su nastri
d nessuna delle precedenti è corretta
best-fit
worst-fit
c nest-fit
d first-fit
b
4.
Nell’allocazione contigua:
a
qualsiasi tecnica di gestione del disco è valida
b
qualsiasi tecnica si utilizzi, però, sorgeranno dei
problemi
c
il disco non sarà mai frammentato
d
si arriverà a una situazione in cui non esisterà
uno spazio contiguo abbastanza capiente da
contenere il file nonostante lo spazio libero sia
maggiore di quello necessario.
La sigla CSV fa riferimento:
a un formato per Internet
b a un formato per file di testo utilizzato per lo
scambio di dati tra sistemi differenti che
operano su piattaforme incompatibili
c a un formato per file di testo in cui i campi sono
separati da virgole
d a un formato per file di testo in cui i campi sono
separati da trattini
a
5.
L’organizzazione sequenziale con indice:
a
a
3.
L’aggiornamento di un archivio sequenziale:
L’archivio differenziale:
è un file XML
b è un file binario
c è un file che non può essere cancellato
d è un file temporaneo
a
8.
Nell’organizzazione sequenziale con indice, l’archivio
secondario è anche detto:
archivio indice ordinato
dizionario
c chiave primaria
d archivio differenziale
a
b
9.
Nell’organizzazione sequenziale con indice, l’indice
consente di stabilire:
una corrispondenza tra una sola chiave e la
posizione del relativo record nell’archivio
b una corrispondenza tra ogni chiave e la
posizione del relativo record nell’archivio
c una corrispondenza tra un campo del record e la
sua posizione nell’archivio
d una corrispondenza tra un archivio e il file
associato
a
10. Gli indici a più livelli sono utilizzati quando:
il numero di sottoarchivi diventa rilevante
i campi sono molti
c i record sono composti da un solo campo
d il numero di record presenti nell’indice diviene
notevole e appesantisce la ricerca
a
b
P. Gallo F. Salerno Task 2 – Gli archivi sequenziali
19
Fly UP