Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Dispensa Informatica Python + sql, Dispense di Elementi di Informatica

Dispensa che contiene: - Teoria tratta dal volume "Informatica Generale" di U. Moscato - Risposta ai quesiti degli esami - esercizi dei vecchi esami svolti in Python - esercizi in sql Disclaimer: gli esercizi sono stati svolti da me, potrebbero contenere errori di copiatura o di battitura.

Tipologia: Dispense

2019/2020

In vendita dal 24/01/2020

greta_poinelli
greta_poinelli 🇮🇹

4.7

(15)

17 documenti

1 / 65

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
GENNAIO 2020 INFORMATICA GENERALE, 6 CFU PYTHON + SQL
Greta P.
1
DISPENSA DI INFORMATICA GENERALE
(non a cura del docente)
TEORIA:
1. INTRODUZIONE
Cos’è l’informatica
L’Informatica è una disciplina scientifica di origini antichissime che si è sviluppata nella seconda
metà del ‘900.
Alcuni sostengono che l’informatica sia più un’arte che una scienza, questo perché ormai essa
abbraccia campi disparati, dal calcolo scientifico ingegneristico alla gestione aziendale,
dall’intelligenza artificiale all’elaborazione di dati geografici ed ambientali.
Possiamo definire l’informatica come la scienza della rappresentazione e dell’elaborazione
dell’informazione. Questa impostazione consente di mettere in evidenza che il prodotto principale
della tecnologia informatica è l’informazione, e che l’informatica come disciplina comprende non
solo la tecnologia dei calcolatori, ma anche il modo in cui l’informazione viene strutturata ed
elaborata.
Un’importante associazione di professionisti e ricercatori informatici, ha definito l’informatica come
lo studio sistematico degli algoritmi che descrivono e trasformano l’informazione: la loro teoria,
analisi, progetto, efficienza, realizzazione e applicazione.
Il concetto di algoritmo
Un algoritmo è una sequenza precisa di operazioni comprensibili e perciò eseguibili da uno
strumento automatica. È essenziale che un algoritmo sia comprensibile al suo esecutore.
Nell’informatica c’è uno stretto legame tra algoritmi e calcolatori elettronici: infatti i calcolatori
possono essere definiti gli esecutori di algoritmi.
Gli algoritmi vengono descritti tramite programmi, cioè sequenze di istruzioni scritte in un
opportuno linguaggio, comprensibile al calcolatore.
Le due proprietà essenziali degli algoritmi sono:
Correttezza capacità di prevenire alla soluzione del compito cui è preposto, senza
difettare di alcun passo fondamentale
Efficienza → capacità di prevenire alla soluzione del problema nel modo più veloce possibile
e/o usando la minima quantità di risorse fisiche, compatibilmente con la sua correttezza.
I linguaggi per la programmazione di algoritmi
Un’attività importante degli informatici è la definizione dei linguaggi per la codifica degli algoritmi,
cioè linguaggi che consentono di scrivere algoritmi sotto forma di programmi che possono essere
compresi dal calcolatore, che ne è l’esecutore.
Gli informatici sono riusciti a creare un enorme numero di linguaggi, circa uno per ogni gruppo
etnico. La presenza di così tanti linguaggi di programmazione, da un lato, offre il vantaggio di poter
scegliere il linguaggio più adatto, dall’altro provoca problemi circa l’esigenza di imparare diversi
linguaggi e di comunicare informazioni fra programmi scritti in linguaggi diversi.
I primi due linguaggi di programmazione dei calcolatori sono stati: FORTRAN e COBOL.
Esiste poi una categoria di linguaggi più rigorosamente basati su uno studio dei principi della
programmazione: Agol, Pascal, C, Ada.
In tempi più recenti si è affermato lo stile di programmazione orientato agli oggetti, in cui si tende
a mantenere una corrispondenza fra gli oggetti che caratterizzano un’applicazione e la loro codifica,
tra questi troviamo: C++, C# (C sharp), Java ed Eiffel.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41

Anteprima parziale del testo

Scarica Dispensa Informatica Python + sql e più Dispense in PDF di Elementi di Informatica solo su Docsity!

DISPENSA DI INFORMATICA GENERALE

(non a cura del docente) TEORIA:

1. INTRODUZIONE Cos’è l’informatica L’Informatica è una disciplina scientifica di origini antichissime che si è sviluppata nella seconda metà del ‘900. Alcuni sostengono che l’informatica sia più un’arte che una scienza, questo perché ormai essa abbraccia campi disparati, dal calcolo scientifico ingegneristico alla gestione aziendale, dall’intelligenza artificiale all’elaborazione di dati geografici ed ambientali. Possiamo definire l’informatica come la scienza della rappresentazione e dell’elaborazione dell’informazione. Questa impostazione consente di mettere in evidenza che il prodotto principale della tecnologia informatica è l’informazione, e che l’informatica come disciplina comprende non solo la tecnologia dei calcolatori, ma anche il modo in cui l’informazione viene strutturata ed elaborata. Un’importante associazione di professionisti e ricercatori informatici, ha definito l’informatica come lo studio sistematico degli algoritmi che descrivono e trasformano l’informazione: la loro teoria, analisi, progetto, efficienza, realizzazione e applicazione. Il concetto di algoritmo Un algoritmo è una sequenza precisa di operazioni comprensibili e perciò eseguibili da uno strumento automatica. È essenziale che un algoritmo sia comprensibile al suo esecutore. Nell’informatica c’è uno stretto legame tra algoritmi e calcolatori elettronici: infatti i calcolatori possono essere definiti gli esecutori di algoritmi. Gli algoritmi vengono descritti tramite programmi, cioè sequenze di istruzioni scritte in un opportuno linguaggio, comprensibile al calcolatore. Le due proprietà essenziali degli algoritmi sono:

  • Correttezza → capacità di prevenire alla soluzione del compito cui è preposto, senza difettare di alcun passo fondamentale
  • Efficienza → capacità di prevenire alla soluzione del problema nel modo più veloce possibile e/o usando la minima quantità di risorse fisiche, compatibilmente con la sua correttezza. I linguaggi per la programmazione di algoritmi Un’attività importante degli informatici è la definizione dei linguaggi per la codifica degli algoritmi, cioè linguaggi che consentono di scrivere algoritmi sotto forma di programmi che possono essere compresi dal calcolatore, che ne è l’esecutore. Gli informatici sono riusciti a creare un enorme numero di linguaggi, circa uno per ogni gruppo etnico. La presenza di così tanti linguaggi di programmazione, da un lato, offre il vantaggio di poter scegliere il linguaggio più adatto, dall’altro provoca problemi circa l’esigenza di imparare diversi linguaggi e di comunicare informazioni fra programmi scritti in linguaggi diversi. I primi due linguaggi di programmazione dei calcolatori sono stati: FORTRAN e COBOL. Esiste poi una categoria di linguaggi più rigorosamente basati su uno studio dei principi della programmazione: Agol, Pascal, C, Ada. In tempi più recenti si è affermato lo stile di programmazione orientato agli oggetti, in cui si tende a mantenere una corrispondenza fra gli oggetti che caratterizzano un’applicazione e la loro codifica, tra questi troviamo: C++, C# (C sharp), Java ed Eiffel.

Architettura dei sistemi informatici Un sistema informatico è un oggetto complesso, costituito da molte parti che interagiscono tra di loro. Studiare l’architettura di un sistema informatico significa individuare e capire come le varie parti interagiscono tra di loro. La prima grande suddivisione è tra hardware (componenti fisici) e software (programmi che vengono eseguiti) Hardware È composto da un insieme di elementi funzionali, presenti in ogni calcolatore anche se in vario numero e con caratteristiche diverse:

  • Processore (CPU) → parte di sistema che svolge le elaborazioni e coordina il trasferimento dei dati all’interno del sistema informatico. Ha il compito di interpretare ed eseguire la varie istruzioni.
  • Memoria centrale (RAM e ROM) → utilizzata per memorizzare dati e programmi utili al funzionamento dell’elaboratore. Ha generalmente capacità limitata e contiene quindi una quantità ridotta di dati e programmi. Essa è inoltre volatile, cioè il suo contenuto viene perduto quando il calcolatore viene spento o si verifica un errore. L’accesso ad essa è molto rapido.
  • Memoria di massa → utilizzata per memorizzare grandi quantità di dati e programmi. In questo tipo di memoria l’informazione è persistente, cioè non viene persa quanto l’elaboratore viene spento. L’accesso ad essa è molto meno rapido di quello alla memoria centrale.
  • Unità periferiche → utilizzate per far comunicare il calcolatore con l’ambiente esterno. Esse includono i terminali, dotati di una tastiera, un mouse o un video e le stampanti, che producono uscite di tipo cartaceo.
  • Bus di sistema → collega tutti gli elementi funzionali sopraelencati e consente lo scambio di dati. Quando l’ambiente esterno non è costituito da un utente umano, la comunicazione avviene tramite sensori (che percepiscono i fenomeni esterni) ed attuatori (che traducono i comandi in azioni). Personal computer Generalmente, il personal computer ha un corpo (box) contenente al suo interno la CPU, la RAM e la memoria di massa; il box è collegati ad una tastiera, un mouse ed un video. La memoria di massa di un personal computer è costituita da un disco fisso (hard disk) e una o più unità ausiliarie.
  • Disco fisso → inamovibile, elevata capacità
  • Dischi ottici → basati su tecnologia laser, comunemente usati come memoria di sola lettura (ROM)
  • Chiavi USB
  • Ecc Altri sistemi informatici La capacità di elaborazione di un sistema informatico può crescere aggiungendo memoria, processori, terminali e periferiche. Un secondo modo di aumentare la capacità di elaborazione si ottiene costituendo le cosiddette reti di calcolatori. Ad oggi è raro trovare dei calcolatori isolati: la maggior parte di essi fa parte di una rete informatica. Una rete di calcolatori è costituita dalla connessione di più elaboratori per mezzo di dispositivi dedicati al trasferimento dei dati. Si distinguono:
  • Uno specifico problema applicativo può essere affrontato tramite un programma unico oppure tramite vari programmi coordinati tra loro. In questo caso, ciascun modulo può essere compilato separatamente e un linker collega tra loro vari programmi oggetto in un unico programma eseguibile.
  • Un controllore dell’esecuzione ( debugger ) serve per eliminare errori eventualmente presenti un programma. Usando il debugger, il programma viene controllato nel corso della sua esecuzione, per esempio bloccando la sua evoluzione normale e mostrando il contenuto della memoria. Software di produttività personale Alcuni sistemi software non richiedono di saper programmare e servono per le funzioni tipiche della vita quotidiana; vengono in genere indicati con il nome di software personale. Tra di essi ricordiamo:
  • I sistemi di videoscrittura che consentono di costruire testi e dare loro un formato di stampa
  • Le agende elettroniche che consentono di memorizzare un programma di lavoro e un indirizzario personale
  • Ipertesti che consentono di costruire strutture reticolari complesse al cui interno trovano posto pezzi di testo
  • La posta elettronica che consente lo scambio di messaggi fra due utenti di sistemi informatici che siano collegati tramite reti di calcolatori. Fanno parte di un sistema di elaborazione anche altri sistemi software, normalmente chiamati strumenti di produttività , che consentono di svolgere alcuni compiti di programmazione in modo semplice ed efficiente, tra questi ricordiamo:
  • I fogli elettronici che permettono di effettuare l’analisi, la gestione la presentazione di dati, soprattutto numerici
  • I sistemi per la gestione di basi di dati (data base management system), che, oltre a essere elementi del software di base, possono essere visti come sistemi di software personale. In questi sistemi, assume notevole importanza la semplicità di interazione con l’utente, in genere non è un informatico di professione. 2. ARCHITETTURA DI UN CALCOLATORE L’architettura della maggior parte degli elaboratori elettronici È organizzata secondo il modello della cosiddetta macchina di von Neumann , dal nome del ricercatore americano che nel corso della seconda guerra mondiale, dedicò i suoi studi alla realizzazione dei primi elaboratori: una delle prime applicazioni degli elaboratori fu la codifica e decodifica dei messaggi scambiati all’interno dell’esercito americano. Elementi della macchina di von Newmann La macchina di von Neumann è costituita da quattro elementi funzionali fondamentali:
  • L’unità di elaborazione (CPU) contiene i dispositivi elettronici in grado di acquisire, interpretare ed eseguire le istruzioni del programma
  • La memoria centrale contiene informazioni necessarie per l’esecutore un programma, cioè istruzioni e dati
  • Le periferiche permettono lo scambio delle informazioni fra l’elaboratore il mondo esterno, attraverso operazioni di ingresso e di uscita. In particolare, fa parte del calcolatore l’interfaccia di collegamento verso le periferiche. Nell’architettura di Von Newman, le periferiche includono anche le memorie di massa, che dal punto di vista dell’interazione con il calcolatore, si comportano in modo funzionalmente analogo ai terminali, stampanti e altri dispositivi collegati verso l’esterno
  • Il bus di sistema opera il collegamento fra questi elementi funzionali. Il funzionamento della macchina di von Neumann può essere schematizzato come segue. L’unità di elaborazione coordina le varie attività, in particolare estrae istruzioni della memoria, le decodifica comprendendo il loro significato e le esegue tramite opportune funzioni all’interno dell’architettura del calcolatore. Le istruzioni possono comportare operazioni di elaborazione dell’informazione oppure operazioni di trasferimento dell’informazione. I trasferimenti tra elementi funzionali diversi avvengono sempre tramite il bus di sistema che effettua il collegamento logico tra i vari elementi funzionali coinvolti. Nella macchina di von Neumann le fasi di elaborazione si succedono in modo sincrono rispetto alla scansione temporale impostata dall’orologio di sistema. Il modello di Von Neumann anche se ha ormai più di sessant’anni di vita, è tuttora adottato dalla maggior parte dei calcolatori. Il suo principale limite è che tutte le operazioni vengono eseguite in stretta sequenza, determinata dall’unità di elaborazione. Modelli evoluti di questa architettura prevedono l’introduzione di varie forme di parallelismo cioè di esecuzione contemporanea di attività di elaborazione. Codifica dei dati dell’istruzione di un programma In un calcolatore, le istruzioni di programma sono codificate in forma binaria, possiedono la sequenza finita di 1 e di 0. La più piccola unità d’informazione memorizzabile o elaborabile da un calcolatore è il bit e corrisponde allo stato di un dispositivo fisico che viene interpretato come 1 come 0. L’altra importante novità di informazione è il byte (= 8 bit). 1 byte può essere usato per produrre 2^8 differenti sequenze di 1 o 0. Un calcolatore può trattare diversi tipi di dati: numeri, testi, immagini, suoni, ecc. Tutti dati devono essere trasformati in sequenze di bit per poter essere elaborati. Codifica dei numeri Numeri naturali. Il sistema di numerazione che comunemente utilizziamo si dice arabico. Esso rappresenta i numeri naturali tramite sequenze di cifre; le cifre sono 10 e pertanto questo sistema di numerazione si dice in base 10, è poi un sistema posizionale perché il significato attribuito a ciascuna cifra è funzione della posizione che tale cifra occupa nel numero. Non tutti i sistemi di numerazione sono posizionali; la principale alternativa è data dai sistemi additivi, in cui il significato dei simboli che compongono il numero dipendente dalla posizione in cui tali simboli compaiono. I sistemi tradizionali hanno un indubbio vantaggio rispetto a quelli additivi: consentono di rappresentare il modo più contratto e di svolgere su di essi calcoli modo più efficiente. Per l’applicazione dei calcolatori hanno particolare importanza le basi 2, 8, e 16, esse corrispondono ai sistemi di numerazione binario ottale ed esadecimale.
  • Il Sistema binario ha base p=2. Le cifre dell’alfabeto sono 0 e 1.
  • Il sistema ottale ha base p=8. Le cifre dell’alfabeto sono 0, 1, 2, 3, 4, 5, 6, 7.
  • Il sistema esadecimale a base p = 16. Le cifre dell’ alfabeto sono 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Numeri interi. Essi si differenziano dai numeri naturali perché includono, oltre lo zero e i numeri positivi, anche i numeri negativi. Pertanto, dovrà essere rappresentato il segno del numero, oltre al suo valore. Prendiamo in considerazione due diversi codifiche binarie di numeri interi: La prima, la

La memoria centrale è destinata a raccogliere dati di programmi su cui l’elaboratore opera, cioè sequenze di istruzioni. La Memoria centrale ha in genere di dimensioni ridotte rispetto la memorie di massa e può quindi accogliere solo una parte dell’informazione disponibile. Tuttavia essa è un passaggio obbligato: prima di poter essere elaborata l’informazione deve essere acquisita dalla memoria centrale. Da un punto di vista concettuale, la memoria centrale è una sequenza di celle di memoria; ciascuna cella contiene una parola. Le Parole sono sequenze di bit; ciascuna parola durante la compilazione assumerà un particolare valore in base alla sequenza di 0 e 1 che verrà inserita nella corrispondente cella di memoria. Ciascuna cella di memoria può essere indirizzata; con questo termine si indica la capacità dell’elaboratore di selezionare una particolare cella di memoria. Indirizzo di una cella di memoria semplicemente la sua posizione relativa rispetto alla prima cella di memoria che ha posizione 0. L’Indirizzamento della memoria avviene tramite un opportuno registro, detto registro indirizzi, che si trova nell’unità di elaborazione. In generale un registro è un dispositivo elettronico capace di memorizzare una sequenza di bit. È dunque possibile selezionare una specifica cella di memoria caricando il registro indirizzi con una sequenza di 0 e 1 , che indichi la posizione relativa della cella nella memoria. A questo punto, si possono effettuare due operazioni: lettura della memoria e scrittura in memoria. Entrambe le operazioni utilizzano un secondo registro della CPU, detto registro dati, che è lungo come una parola di memoria.

  • L’operazione di lettura provoca la copia del contenuto della cella di memoria nel registro; essa carica registro dati con una parola di memoria.
  • L’operazione di scrittura copia il contenuto del registro di dati in una cella di memoria; essa deposita il contenuto del registro dati in una cella di memoria. La memoria centrale è composta da due tipologie di memoria:
  • RAM (Random Access memory)→ memoria ad accesso diretto di tipo volatile che al momento dello spegnimento del computer si azzera e i dati sono perduti.
  • ROM (Reading only memory)→ memoria di sola lettura. Nella ROM sono memorizzati i programmi che consentono al computer di configurare il sistema durante le operazioni di accensione. Si distinguono in varie categorie a seconda del modo in cui vengono scritte dai costruttori di elaboratori. Alcune di esse, dette EROM possono essere cancellate dopo essere state estratte dal calcolatore. Il fatto di poter solo leggere la memoria rom può sembrare a prima vista una limitazione, In realtà in questo modo il contenuto delle memorie viene protetto da guasti o scritture operate da programmi scorretti. Con l'estensione dell'architettura, è stato inserito un terzo tipo.
  • Memoria Cache → memoria temporanea di elevata velocità di accesso dei dati. È collegata alla CPU per svolgere più velocemente le operazioni di calcolo. (Estensione) Il bus di sistema Il bus di sistema è costituito da un insieme di connessioni elementari lungo le quali viene trasferita l’informazione. Esso collega tra di loro l’unità di elaborazione, la memoria e le varie interfacce di ingresso e uscita. In ogni istante di tempo, il bus dedicato a collegare due unità funzionali: una trasmette dati e l’altra li riceve. Le possibili interconnessioni sono tra l’unità di elaborazione e la memoria, oppure tra l’unità di elaborazione e l’interfaccia di una specifica periferica. Il Bus è in genere sotto il controllo della CPU, che seleziona l’interconnessione da attivare indica l’operazione da compiere; le varie altre unità funzionali collegate al bus entrano in azione solo quando sono selezionate dalla CPU. In

tal caso si dice che l’unità di elaborazione esercita ruolo di master e le altre unità funzionale assumono il ruolo di slave. Le linee vengono a loro volta funzionalmente suddivise in tre categorie a seconda del tipo di informazione trasportata:

  • Il Bus dati trasferisce dati dall’unità master all’unità slave o viceversa.
  • Il bus indirizzi serve per trasmettere il contenuto del registro indirizzi alla memoria centrale.
  • Il bus controlli trasferisce dall’unità master all’unità slave un codice corrispondente all’istruzione da eseguire e dall’unità slave all’unità master informazioni relative all’avvenuto espletamento dell’operazione richiesta L’unità di elaborazione (CPU) Unità di elaborazione contiene gli elementi circuitali che regolano il funzionamento dell’elaboratore. La sua funzione è quella di eseguire programmi contenuti nella memoria centrale prelevando, decodificando eseguendo una dopo l’altra le istruzioni che costituiscono. Elementi che costituiscono la CPU sono:
  • Unità di controllo che è responsabile del prelievo e della decodifica delle istruzioni nonché dell’invio di segnali di controllo che provocano i trasferimenti o elaborazioni necessarie per l’esecuzione dell’istruzione decodificata
  • L’orologio di sistema sincronizza le operazioni rispetto a una data frequenza
  • L’unità aritmetico-logica (ALU) realizza le operazioni aritmetiche e logiche eventualmente richieste per l’esecuzione dell’istruzione Inoltre la CPU ha diversi registri (= elementi di memoria che possono essere letti o scritti molto velocemente e che sono utilizzabili per memorizzare risultati parziali o informazioni necessarie al controllo). I principali sono:
  • Registro dati contiene il dato prelevato da una cella di memoria o pronto per essere trasferito in memoria
  • R egistro indirizzi contiene l’indirizzo della cella di memoria dove si deve prelevare o depositare un dato o un’istruzione
  • Registro istruzione corrente che contiene istante per istante l’istruzione che risulta in esecuzione da parte dell’elaboratore
  • Contatore di programma che contiene l’indirizzo della prossima istruzione del programma in esecuzione
  • Il registro interruzioni che contiene alcune informazioni relative allo stato di funzionamento delle periferiche
  • Registri di lavoro simili alle celle di memoria ma che possono essere letti e scritti in modo molto più rapido senza ricorrere a operazioni di lettura scrittura
  • Registro di stato che riporta in alcuni suoi bit indicazioni relative al risultato delle operazioni svolte nella ALU. Tra essi, ricordiamo: o Il bit di carry che indica la presenza di un riporto o Il bit di zero che indica la presenza di un valore nullo nel registro A o Il bit di segno che riporta il segno del risultato di un’operazione aritmetica o Il bit di overflow che consente di rilevare la condizione di overflow che si verifica quando risultato dell’ultima operazione aritmetica eseguita dalla ALU supera il massimo valore che può essere rappresentato nel registro A. Interfacce di ingresso/uscita Le interfacce di ingresso/uscita costituiscono gli elementi circuitali che consentono il collegamento dell’elaboratore con le varie periferiche. Un’interfaccia necessita dei registri per inviare comandi alla periferica, scambiare dati e controllare il funzionamento della periferica. Le interfacce sono
  • L’ampiezza dei bus dati determina quanti bit alla volta vengono trasmessi fra la CPU e gli altri dispositivi. Il numero di linee nel bus dati influenza la velocità alla quale viaggiano i dati tra i componenti hardware. La velocità massima di trasferimento del bus dati dipende dal prodotto tra la sua ampiezza e la sua frequenza di clock.
  • L’ampiezza dei bus indirizzi determina il numero di byte di memoria cui può accedere la CPU. I problemi sopra elencati hanno portato a modifiche nell’architettura di von Neumann:
  • Estensione dei processori in modo da poter eseguire separatamente e in parallelo le varie fasi di una istruzione. A seconda della tecnica adottata si parla di architetture pipeline e di architettura superscalare.
  • Secondo tipo di estensione concerne l’uso di gerarchie di memoria , caratterizzate da prestazione via via crescenti. In particolare, molti lavoratori utilizzano memorie cache caratterizzate da elevatissime velocità di lettura scrittura dove vengono trasferiti temporaneamente le informazioni di uso più comune o più recente da parte dell’unità centrale. Inserendo una o più memorie cache la più nella memoria centrale è possibile ridurre in modo sensibile il tempo necessario per accedere ai dati. Con questa estensione, la gerarchia di memorie comprende perciò tre livelli: la memoria di massa, la memoria centrale e la memoria cache.
  • L’ultimo tipo di estensione concerne l’uso di più processori in un unico elaboratore. Nel caso di semplice si tratta di affiancare alla CPU dei processi dedicati capaci di eseguire, in modo molto più efficiente e senza interferire con il normale funzionamento della CPU, dei compiti specifici quali: il calcolo numerico, la presentazione di grafici su video, La gestione dei canali di ingresso uscita. Volendo raggiungere prestazioni ancora più elevate si costruiscono architetture dotate di molteplici CPU indipendenti (architettura multiprocessore). 4. IL SISTEMA OPERATIVO Il sistema operativo è uno strato software che opera direttamente sull’hardware, isolando gli utenti dai dettagli dell’architettura hardware e fornendo loro un insieme di funzionalità di alto livello. Per mezzo del sistema operativo si possono svolgere operazioni quali la copia dei file o l’esecuzione di un programma. I sistemi operativi rendono totalmente disponibili agli utenti le architetture dei calcolatori. Un sistema operativo può essere mono-utente, nel caso che l’intero sistema sia dedicato ad un singolo utente, oppure multi-utente, nel caso in cui diversi utenti condividano lo stesso sistema; in un sistema informativo multi-utente il sistema operativo nasconde a ciascun utente la presenza degli altri, dando l’impressione che l’intero sistema gli sia dedicato. Il sistema operativo è un insieme di programmi molto complesso, soprattutto in un contesto multi- utente, organizzato per strati funzionali, con un’architettura che viene detta a “buccia di cipolla”; ciascuno strato funzionale realizza una macchina virtuale, ossia una macchina che maschera le caratteristiche della macchina hardware e offre ai suoi utenti un insieme ben definito di funzionalità. Funzioni di un sistema operativo Struttura a buccia di cipolla del sistema operativo Programmi utente Interprete comandi File system Gestione delle periferiche Nucleo Gestione della memoria

Gestione dei processi Macchina fisica

  1. Il gestore dei processi è responsabile dell’esecuzione dei programmi da parte dell’unità di elaborazione. Il termine “processo” fa riferimento all’esecuzione di un programma; pertanto si tratta di un oggetto dinamico, che evolve nel tempo, contrapposto ad un programma che è un oggetto statico e invariante nel tempo. Un processo è una coppia di elementi che comprende il codice eseguibile e lo stato del processo (in esecuzione, pronto o in attesa). Nel contesto dei sistemi operativi, l’unità di elaborazione che esegue i processi, prende il nome di processore.
  2. Il gestore della memoria ha la funzione di allocare la memoria e partizionarla tra i vari programmi che la richiedono. La gestione della memoria centrale richiede di risolvere vari problemi: in primo luogo, per allocare i programmi in memoria è necessario rilocarli. “Rilocare” significa trasformare gli indirizzi logici, presenti nei programmi, in indirizzi fisici, corrispondenti alle locazioni di memoria ove i programmi sono stati caricati. Un importante meccanismo di suddivisione della memoria centrale e dei programmi è quello di paginazione, un secondo meccanismo è detto segmentazione.
  3. Gestione delle periferiche → I driver sono responsabili delle operazioni di ingresso/uscita che coinvolgono le periferiche; essi sono meccanismi software che eseguono operazioni di ingresso/uscita per uno specifico componente. Anche in questo caso, l’utente ha l’impressione che la periferica sia dedicata.
  4. Il file system è responsabile della gestione dei file in memoria di massa; esso struttura i dati in file, li organizza in directory (cartelle) e fornisce all’utente un insieme di funzioni di alto livello per operare su di essi, mascherando le operazioni che vengono realmente effettuate per allocare la memoria di massa e per accedervi in lettura o scrittura. Tramite il file system, ciascun utente può organizzarsi una zona della memoria di massa e garantire che i suoi file siano adeguatamente protetti da accessi esterni; il file system consente anche che alcuni file vengano condivisi fra più utenti.
  5. L’interprete di comandi consente all’utente di attivare programmi; l’interprete si presenta con un’interfaccia di tipo alfanumerico o di tipo grafico; per eseguire un programma, l’interprete svolge in modo invisibile all’utente un insieme di operazioni tra cui: a. Accedere al programma, tramite il file system b. Allocare memoria e caricarvi il programma, tramite gestore della memoria c. Attivare un processo, tramite il nucleo L’interprete sfrutta l’organizzazione a strati del sistema operativo, cioè può richiedere l’esecuzione di tutte le funzioni di più basso livello rispetto a esso. I primi tre strati del SO (1, 2 3) costituiscono il cosiddetto kernel del sistema operativo. Esso cerca di fare delle scelte convenienti per gli utenti; quando essi siedono a uno dei tanti terminali e richiedono servizi al sistema, l’obiettivo consiste spesso nel ridurre i tempi di attesa terminale. Il sistema operativo cerca di ottimizzare le prestazioni del sistema informatico, determinando le politiche migliori di gestione delle risorse sotto il suo controllo. 5. BASI DI DATI RELAZIONALI Il compito di memorizzare l’informazione spetta di norma alla mente umana, che è in grado di registrarla e organizzarla in modo da poter essere ricordata in un tempo successivo.

o Modificare il contenuto della base di dati (inserimento, cancellazione, aggiornamento) Il modello relazionale Il modello relazionale è caratterizzato da una definizione estremamente compatta ed elegante: un database è una collezione di relazioni. Ciascuna relazione è una tabella caratterizzata da un numero fisso di colonne ( attributi ) e un numero variabile di righe ( tuple ); ciascuna colonna assume valori estratti da uno stesso dominio, cioè da un insieme predefinito di possibili valori. Definiamo grado di una relazione il numero di colonne e come cardinalità il numero di righe. Si dice schema di una relazione la descrizione della struttura di una relazione; esso consiste nel nome della relazione seguito dai nomi dei suoi attributi; a ciascun attributo è associato il suo dominio. Si dice istanza di una relazione l’insieme delle tuple presenti nel database in un determinato istante. Lo schema è una proprietà statica, mentre l’istanza è una proprietà dinamica i quanto le tuple possono essere aggiunte, tolte o modificate. Una chiave di una relazione R è un sottoinsieme K dei suoi attributi che garantisce due proprietà:

  • Unicità : in una qualunque istanza di R, non possono esistere due tuple distinte di R la cui restituzione su K sia uguale.
  • Minimalità : non è possibile sottrarre K a un attributo senza che la condizione di unicità cessi di valere Quando ci sono più chiavi è possibile scegliere una chiave primaria; in generale essa corrisponde all’insieme di attributi che viene usato più spesso per accedere ai dati. IL LINGUAGGIO SQL Il linguaggio SQL è diffuso in tutti i DBMS che usano il modello relazionale dei dati; esso consente di definire relazioni e di esprimere interrogazioni e modifiche a una base di dati. È un linguaggio piuttosto ricco e ridondante, quindi una stessa interrogazione può essere espressa in modi diverso. Tipi sql
  • Int → numeri interi
  • Double → numeri con decimali
  • Date → data
  • Time → orario
  • Datetime → data e ora
  • Char(dimensione) → sequenza composta da un numero preciso di caratteri
  • varChar(dimensione) → indica la dimensione max del parametro Creare un database CREATE DATABASE nome Creare una relazione (tabelle) CREATE TABLE nome ( nome_attributo1 tipo, nome_attributo2 tipo, nome_attributoX tipo, PRIMARY KEY (elenco attributi che formano la chiave primaria) FOREIGN KEY (nome attributo) REFERENCES nome_relazione (nome_attributo));

Se metto il riferimento ad un’altra tabella, questa deve già esistere. Inserire tuble nella base dati Ci sono due metodi per farlo:

  • specificazione degli attributi inseriti: INSERT INTO animali (tipo_animale, colore, età) VALUES (‘cane’, ‘nero’, ‘2’), (‘gatto’, ‘bianco’, ‘3’)
  • non specifica l’ordine degli attributi: in questo caso i valori vanno inseriti secondo l’ordine con cui è stata creata la tabella) INSERT INTO animali VALUES (‘cane’, ‘Roma’, ‘nero’, ‘2’), (‘gatto’, ‘Milano’, ‘bianco’, ‘3’) Cancellare tuple DELETE FROM nome_tabella WHERE condizione

DELETE

FROM animali WHERE colore = ‘nero’ Aggiornare UPDATE nome_tabella SET operazione sul vecchio valore WHERE condizione UPDATE animali SET colore = ‘bianco a macchie’ WHERE tipo_animale = ‘cane’ Aggiungere una colonna ALTER TABLE nome_tabella ADD COLUMN (nome tipo) ALTER TABLE animali ADD COLUMN (razza varChar(40)) Cancellare una colonna ALTER TABLE nome_tabella DROP COLUMN nome ALTER TABLE animali DROP COLUMN provenienza Cancellare una tabella DROP TABLE nome_tabella ATTENZIONE: nel caso in cui ci fosse un vincolo di integrità, prima va eliminata la tabella che ha i riferimenti, poi l’altra. Elencare tutti i valori contenuti in una tabella SELECT * FROM tabella Elencare solo alcuni ATTRIBUTI

FROM world WHERE name LIKE ‘____’ ORDER BY name ES: voglio selezionare tutte le nazioni il cui nome è format da 4 o 5 caratteri SELECT name FROM world WHERE name LIKE ‘____’ OR LIKE ‘_____’ ORDER BY name ES: voglio selezionare tutte le nazioni il cui nome inizia e finisce con A SELECT name FROM world WHERE name LIKE ‘A%A’ ORDER BY name Selezione di un attributo creato ad hoc e non esistente SELECT name, population/area AS densita FROM world ORDER BY densita DESC SELEZIONARE IL MAX SELECT max(attributo) FROM tabella SELEZIONARE LA MEDIA SELECT avg(area) FROM tabella Contare tutte le tuple di una tabella SELECT count() AS ‘totale’ FROM tabella Contare tutte le tuple in cui un attributo e’ diverso da null SELECT count() AS ‘totale’, count(attributo) FROM tabella Selezionare le tuple in cui un attributo e’ nullo SELECT attributo FROM tabella WHERE isNULL (attributo) Selezionare le tuple in cui un attributo non e’ nullo SELECT attributo FROM tabella WHERE NOT isNULL (attributo) Riepilogo: operatori di aggregazione

Sono una serie di operatori che agiscono su:

  • Tutta la relazione quando non proietto alcun attributo
  • Sul raggruppamento quando raggruppo rispetto ad uno o più attributi Essi sono:
  • MAX (attr)
  • MIN(attr)
  • AVG (attr)
  • SUM(attr): somma tutti i valori dell’attributo che deve essere numerico
  • COUNT(*): conta tutte le tuple della relazione/raggruppamento
  • COUNT(attr): conta tutte le tuple in cui l’attributo è diverso da NULL
  • COUNT (DISTINCT attr): conta una volta sola gli stessi attributi ES: voglio conoscete il totale della popolazione mondiale SELECT sum(population) AS totale FROM world ES: voglio conoscere quanti continenti ci sono nella tabella SELECT count(DISTINCT continent) AS totale, count(contintet) AS errore FROM world ES: voglio conoscere quante nazioni ci sono per ogni continente SELECT continent, count(*) AS Nazioni tot FROM world GROUP BY continent Group by Raggruppa le tuple in base ad uno o più attributi:
  • Permette l’uso degli operatori di aggregazione sui raggruppamenti
  • Consente l’uso di operatori di filtro sui risultati dei raggruppamenti (Uso il DB nobel) ES: voglio conoscere per ogni disciplina quanti premi nobel sono stati assegnati SELECT subject, count() FROM nobel GROUP BY subject ES: voglio conoscere per ogni disciplina e per ogni anno quanti premi nobel sono stati assegnati SELECT subject, yr, count() FROM nobel GROUP BY subject, yr Gli attributi che compaiono in SELECT ma non negli operatori di aggregazione devono essere presenti anche in GROUP BY ES: voglio conoscere per ogni disciplina quanti premi nobel sono stati assegnati tra il 1981 e il 1920 SELECT subject, yr, count(*) FROM nobel WHERE yr BETWEEN 1981 AND 1929

6. RETI DI CALCOLATORI

La grande diffusione di massa dell’informatica e delle telecomunicazioni ha contribuito all’espansione delle reti. Fino a poco tempo fa si parlava di IT per indicare le tecnologie dell’informazione e per sottolineare la grande importanza che Hardware e Software avevano nel gestire le informazioni. Al giorno d’oggi si parla per lo più di ICT sottolineando l’importanza assunta anche dalle tecnologie delle comunicazioni, essenziali per scambiare informazioni. È in questo ambito che operano i sistemi distribuiti, sistemi caratterizzati da una rete di calcolatori che interagiscono tra loro. Mezzi e tecniche di trasmissione dati I principali mezzi utilizzati per la trasmissione dei dati sono:

  • Cavi in rame o Cavo coassiale → ha al suo centro un conduttore di rame (anima) circondato da un materiale isolante e da uno schermo metallico intrecciato (maglia). Il tutto è avvolto da un rivestimento esterno. È stato utilizzato fino agli anni ‘ o Doppino telefonico → coppia di fili di rame che viene utilizzata per la trasmissione delle comunicazioni telefoniche ma che è largamente impiegata anche per altri tipi di rete di comunicazione. Solitamente è costituito da una coppia di conduttori ritorti, ossia arrotolati uno sull’altro per cercare di ridurre gli effetti negativi delle inferenze elettromagnetiche.
  • Fibre ottiche → sono filamenti di materiali vetrosi realizzati in modo tale da poter condurre la luce su lunghe distanze. Una fibra ottica è composta da due strati: il core, ossia il mezzo trasparente che trasporta il segnale laser, e il cladding, ovvero lo strato a esso concentrico che costringe l’onda a seguire il percorso della fibra ottica. Le fibre ottiche sono molto sottili e leggere: compreso il rivestimento, il diametro della fibra è < 0,5 mm. Una fibra ottica è capace di trasmettere dati a una velocità di alcuni Tbps anche per centinaia di km.
  • Onde radio e sistemi wireless → parlando di comunicazioni wireless si fa riferimento ad un’ampia gamma di tecnologie che fanno uso delle onde elettromagnetiche per la trasmissione dei dati senza fare uso di cavi: o Infrarossi → sono utilizzate per collegare dispositivi visibili direttamente, sono lente e ormai in disuso o Laser e microonde → utilizzate per collegare sotto-reti costruite utilizzando altri sistemi di comunicazione. Queste due tecnologie sono utilizzate per la loro elevata velocità di trasmissione. o Onde radio → sono utilizzate da reti che devono coprire ambienti eterogenei, dove e diverse postazioni da collegare non sono necessariamente visibili (es. Bluetooth, WiFi, ecc) Modulazione e demodulazione Le reti di telecomunicazione sono nate originariamente per trasmettere la voce. Successivamente le stesse reti sono state utilizzate come rete di accesso per connettere tra loro reti locali o singoli computer. Questo ha reso necessario trasmettere i segnali digitali che i computer utilizzano per scambiarsi informazioni su reti pensate per trasmettere la voce mediante onde. Per questo motivo sono nati degli apparati, i modem , in grado di trasformare i bit trasmessi da un calcolatore in una serie di suoni che poi possono essere inviati su una linea telefonica sotto forma di segnali elettrici. Questo meccanismo è detto modulazione.

Il modem è anche in grado di ricevere questi suoni e di convertirli nuovamente in bit, mediante un meccanismo inverso chiamato demodulazione. Grazio alla modulazione e demodulazione, due computer possono dialogare tra loro utilizzando una normale linea telefonica, purchè ciascuno dei due computer abbia un model. Reti di calcolatori Una rete è un insieme di apparati interconnessi tra loro. Esistono diversi tipi di reti, come, per esempio, la rete telefonica, in cui gli apparati sono le centraline telefoniche e i telefoni, mentre il mezzo di interconnessione sono i cavi della linea telefonica. In ambito informatico, una rete è utilizzata per collegare tra loro più computer, denominati host o nodi, con l’obiettivo di:

  • Condividere il software
  • Consultare archivi comuni
  • Trasmettere dati tra i sistemi Una rete di computer può essere anche utilizzata per permettere agli host di comunicare con periferiche come per esempio le stampanti. Dimensione della rete A seconda della dimensione, possiamo avere:
  • LAN → rete locale. Collega calcolatori che si trovano nella stessa stanza/edificio. La distanza tra i computer è inferiore a 1 km e la velocità di trasferimento dei dati è molto elevata.
  • MAN → rete metropolitana. Copre un’area corrispondente a un’intera città con un’area di copertura inferiore a 10 km e velocità di trasmissione molto elevata
  • WAN → rete geografica. Collega sistemi che si trovano a centinaia o migliaia di km di distanza. Le reti LAN, MAN, WAN sono organizzate secondo una gerarchia di livelli. Negli ultimi anni si è assistito ad una convergenza tecnologica tra le reti di calcolatori e le reti di telecomunicazione. Da un lato, le reti di telecomunicazione si appoggiano sempre di più sulla trasmissione digitale e sui protocolli tipici delle reti di calcolatori. Dall’altro, le reti di calcolatori utilizzano sempre più frequentemente le stesse infrastrutture che erano state realizzate per le reti di telecomunicazione. Oggi è quindi possibile classificare le reti in due nuove categorie:
  • Rete dorsale → è la parte centrale di una rete di telecomunicazione
  • Rete di accesso → è utilizzata per accedere alla core network. Il punto di contratto tra le due reti è il PoP (point of presence) Topologia delle reti Le più classiche topologie di tipo regolare sono:
  • Reti ad anello → gli elaboratori sono disposti lungo un circuito chiuso, uno dopo l’altro: ogni nodo è connesso ad altri due nodi
  • Reti a bus → tutti i nodi sono disposti lungo un unico collegamento chiamato bus.
  • Reti a stella → ha un nodo centrale collegato a un insieme di nodi periferici. Il ruolo del nodo centrale è fondamentale e l’efficienza del sistema dipende in modo significativo dall’efficienza del suo centro. Generalmente il nodo centrale non è un elaboratore tradizionale ma un apparato di rete, ossia un sistema specializzato nello scambio di dati tra i diversi rami della stella. Ci sono poi le reti a Maglia che sono di tipo irregolare