vuoi
o PayPal
tutte le volte che vuoi
I meccanismi per la sincronizzazione avvengono tramite:
• Uso di variabili condivise (“semafori”).
• Comunicazione tra processi.
Per gestire i processi è necessario avere molti programmi in memoria centrale. per allocare i
programmi in memoria centrale è necessario rilocarli, cioè trasformare gli indirizzi logici dei
programmi in indirizzi fisici, corrispondenti alle locazioni di memoria dove i programmi sono stati
caricati.
Per suddividere memoria e programmi si usa la paginazione: la memoria è strutturata in pagine, cioè
aree contigue di dimensione prefissata. Altro meccanismo di partizione è la segmentazione: un
programma può essere frazionato in parti che svolgono differenti funzioni.
Al di là di come viene partizionata la memoria, questa è offerta al programma applicativo come
memoria virtuale, grazie all’allocazione di più segmenti / pagine di quelle che normalmente
potrebbero stare nella memoria allo stesso tempo.
La catena di programmazione, cioè la sequenza di trasformazioni subite da un programma sorgente
prima di essere eseguito, è:
Il compilatore trasforma il modulo di programma sorgente in modulo di programma oggetto
1. – un programma è suddiviso in moduli che possono essere compilati singolarmente. Nel
programma oggetto i nomi delle variabili locali del modulo di programma sono tradotti in
indirizzi rilocabili, cioè espressi in forma logica.
Il linker trasforma i diversi moduli oggetto in un unico programma eseguibile. Gli indirizzi
2. del programma eseguibile possono presentarsi in formato rilocabile (cioè calcolati come se il
programma dovesse essere caricato in memoria a partire dalla cella zero) o in formato
assoluto (cioè calcolati a partire da una specifica cella di memoria).
Al programma eseguibile son associate altre info utili.
3.
Il programma di sistema che carica i programmi in memoria è detto loader.
La rilocazione può essere:
• Statica; se gli indirizzi del programmi vengono modificati istruzione per istruzione all’atto
del caricamento in memoria, cioè prima di eseguire il programma.
• Dinamica; se gli indirizzi sono rilocati durante l’esecuzione del programma.
La memoria si divide in:
• Memoria in modo S (sistema) – vengono caricati i programmi di sistema operativo.
• Memoria in modo U (utente) – vengono caricati i programmi utente.
Se il processore sta eseguendo un processo utente si dice attivo in modo utente; viceversa si dice
attivo in modo sistema. A seconda del modo in cui è attivo il processore può accedere solo a precise
zone di memoria.
I driver sono meccanismi software cui è affidato il compito di comunicare dati da e verso le
periferiche. Si distingue tra:
• Driver fisici (hardware) – attivati direttamente dal gestore delle interruzioni per
trasferimento/manipolazione dati.
• Driver logici (software) – che sono parte del sistema operativo e forniscono una gerarchia di
operazioni.
Il file system è la parte di sistema operativo che svolge il compito di gestire i file.
Memoria di massa
I dispositivi di memoria di massa sono:
• Nastri, organizzati sequenzialmente e quindi usati solo per il backup. Sono tipicamente
arrotolati su supporti circolari; una volta svolti si presentano come una fettuccia
magnetizzabile, lunga anche centinaia di metri; vi sono incise delle piste orizzontali
parallele tra loro, dette tracce; i dati sono registrati serialmente su ogni traccia. Il parametro
caratterizzante è la densità, misurata in bit per inch (bpi). Per leggerlo o scriverlo il nastro
viene svolto tra i due supporti di un’unità a nastro. I dati vengono letti o scritti nella
porzione che passa al di sopra della testina di lettura/scrittura, che genera campi magnetici
per scrivere o li rileva per leggere.
Più speso, il nastro è racchiuso in un involucro rigido circolare e il suo movimento viene
invertito quando è raggiunta una delle estremità.
Per essere letti/scritti i nastri devono avere una certa velocità: sono quindi presenti delle
zone prive di informazione che servono ad accelerare.
I dati sono organizzati in zone dette record, separate da zone senza info (inter-record gap)
• Dischi, che garantiscono l’accesso diretto ai dati. Un disco contiene un certo numero di
piatti, ricoperti da pellicola magnetica, che ruotano attorno ad un disco centrale; sulle due
superfici dei piatti vengono memorizzati i dati. Ogni superficie ha una serie di cerchi
concentrici (tracce), e viene suddivisa in spicchi di ugual grandezza (settori). Le superfici
vengono formattate scrivendoci sopra una trama di 0 e 1 che marcano l’inizio e la fine dei
settori. Il numero di tracce e settori determina la capacità del disco.
I dati sono scritti occupando posizioni lungo le tracce e corrispondono a uno stato di
polarizzazione del materiale magnetico. Un blocco di ingresso/uscita è un gruppo di dati
che vengono letti/scritti con un’unica operazione di ingresso/uscita. Ogni blocco è
identificabile grazie a una terna di valori: numero di superficie, di traccia, di settore.
Per leggere/scrivere un blocco è necessaria una testina di lettura/scrittura per superfici, che
si sposta radialmente lunga le tracce.
Una zona di memoria centrale (buffer) è dedicata a contenere i dati prima che vengano scritti
su disco o dopo essere stati letti da disco. Il buffer è suddiviso in zone che corrispondono a
un numero intero di blocchi di input/output.
Lo spostamento della testina verso la traccia richiesta è detto seek e l’attesa necessaria a che
la testina la raggiunga è detta tempo di seek. Il tempo di latenza indica il tempo impiegato
dal settore per passare sotto la testina; il tempo di trasferimento dei dati è poi l’ultimo
componente del tempo totale dell’operazione.
Basi di dati
Una base di dati è una collezione di informazioni che vengono organizzate e gestite da un sistema
specifico, il DBMS, che opera al di sopra del sistema operativo.
Le basi si usano per rimediare a più problemi, quali:
• Inconsistenza e ridondanza dei dati – perché lo stesso dato può appartenere a più archivi o
essere diverso.
• Riservatezza.
• Integrità – e vincoli di concorrenza.
• Concorrenza.
Esistono più modelli per la gestione dei dati:
• Gerarchico.
• Reticolare.
• Relazionale (inizi anni ’80) – basato sul concetto di insieme e sulla strutturazione dei dati in
tabelle.
• A oggetti.
Lo schema di una base di dati è una descrizione dei dati di uno specifico contesto applicativo;
l’istanza (occorrenza) di una base di dati è il valore assunto da questa in un particolare istante di
tempo.
Il DBMS mette a disposizione due tipi di linguaggi:
• DDL – per definire i dati.
• DML – per manipolare la base di dati, cioè:
Formulare interrogazioni (query), cioè estrarre informazioni.
o Modificare il contenuto della base (inserimento, cancellazione, modifica).
o
Il DBMS fornisce ai suoi utilizzatori una visione astratta della base di dati, a tre liveli:
Livello fisico – descrive la base di dati come insieme di record in memoria di massa.
1. Livello logico – evidenzia l’organizzazione dei dati dal punto di vista del loro contenuto
2. informativo, descrivendo la struttura di ciascun dato e i collegamenti tra dati diversi.
Livello esterno – presenta i dati così come vengono visti da un utente o da un particolare
3. gruppo di utenti.
Un DBMS deve inoltre garantire due proprietà:
• Indipendenza fisica – che consente di ridefinire il livello fisico senza modificare il livello
logico.
• Indipendenza logica – consente di definire nuovi schemi senza alterare gli schemi esterni.
Le basi di dati permettono anche le transazioni, esecuzioni di programma che godono delle seguenti
proprietà:
• Atomicità; la transazione si deve comportare in uno preciso di due modi: terminare e
modificare i dati (commit), oppure terminare senza modificare i dati (rollback).
• Consistenza; l’esecuzione di una transazione non deve violare l’integrità dei dati.
• Isolamento; che permette di proteggere le transazioni le une dalle altre.
• Durabilità (persistenza); se completate con successo il loro effetto non deve andare perduto.
Modello relazionale
Ogni relazione è una tabella caratterizzata da un numero fisso di colonne (attributi) e da un numero
variabile di righe (tuple). Ogni colonna assume valori estratti da uno stesso dominio, cioè da un
insieme predefinito di possibili valori.
Il grado di una relazione indica il suo numero di colonne; la cardinalità indica il numero di righe.
Lo schema di relazione è la descrizione della struttura di una relazione – cioè il nome della
relazione seguito dai nomi dei suoi attributi. L’istanza di una relazione è l’insieme di tuple
presenti nella base di dati in un dato istante.
Una restrizione di una tupla t su taluni attributi è la lista dei valori assunti da t su tali attributi. Una
chiave è una sottoinsieme di attributi che garantisce le proprietà di:
• Unicità – in una qualunque istanza della relazione, non possono esistere due tuple distinte di
R la cui restrizione sul sottoinsieme sia uguale.
• Minimalità – non è possibile sottrarre un attributo alla chiave senza che venga a mancare la
condizione di unicità.
Una relazione priva di tuple identiche ha necessariamente una chiave.
Quanto vi sono più chiavi, si può scegliere una chiave primaria – quella che viene usata più spesso
per accedere ai dati.
Il valore nullo (null) può comparire per tre motivazioni diverse:
• Valore sconosciuto.
• Valore inesistente.
• Valore inesistente o sconosciuto – cioè senza informazione.
Un vincolo di integrità è una proprietà che deve essere soddisfatta dalle istanze che rappresentano
informazioni corrette per la condizione – un predicato che associa a ogni istanza il valore vero o
falso, se è vero il valore soddisfa il vincolo. Il vincolo può essere:
• Intrarelazionale – se il suo soddisfacimento è definito rispetto a singole relazioni sulla base
di dati. Si divide in:
Vincolo di tupla.
o Vincolo su valori.
o
• Interrelazionale – se coinvolge più relazioni.
Sistemi transazionali
I sistemi transazionali sono sistemi capaci di eseguire programmi gestionali detti transazioni. Con
il termine transazione indichiamo ciascuna unità di interazione col sistema, in cui viene effettua