















































































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Dispensa Modulo tecnico diritto dell'informatica
Tipologia: Dispense
1 / 87
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!
















































































Facoltà di Giurisprudenza
raccolta di materiale didattico per il corso di diritto dell’informatica
Melchiorre Monaca
modulo tecnico - 2 cfu
Testi di riferimento
Premessa
Con questa raccolta s’intende fornire allo studente una sorta di “traccia”, un percorso che guidi lo studio attraverso le tematiche discusse a lezio- ne, trasmettendo il “lessico minimo” indispensabile alla comprensione degli argomenti trattati nel modulo giuridico di questa stessa materia. È stato evidentemente necessario semplificare - forse ai limiti del lecito - i contenuti qui riassunti: il lettore più interessato alla materia potrà appro- fondire gli argomenti di suo interesse sui testi di riferimento consigliati e sui lavori originali citati in bibliografia.
Nel 1936 Alan Turing pubblica l’articolo On Computable Numbers with an application to the Entscheidungsproblem [1], in cui viene descritta una mac- china astratta, che altro non sarà che il principio di funzionamento di tutti i calcolatori a venire, destinata a diventare famosa come Turing Machine. L’invenzione è tanto più ammirevole se si tiene conto che nel 1936 i com- puter non esistevano; solo alcuni anni più tardi, durante la guerra, Turing si trovò coinvolto nella costruzione di una macchina denominata Colossum, destinata alla decodifica dei messaggi criptati tedeschi. Essendo ancora oggi il fondamento della scienza informatica, la Macchina di Turing è stata descritta in innumerevoli testi, in modi più o meno rigorosi e con un proliferare di varianti che, pur risultando tra loro equivalenti, si sono allontanate dalla formulazione originale. Qui si utilizzerà una “rappresenta- zione pittorica”, con l’unico scopo di fornire al lettore un’idea - semplificata, ma sostanzialmente corretta - della Turing Machine. La Turing Machine, (che d’ora in poi abbrevieremo con TM ), è un si- stema formale, in grado di realizzare qualunque procedimento risolutivo di
2
1.1. La macchina di Turing 4
TM stato | input (^) nuovo stato | spostamento | output
....... ....... nastro di memoria
Figura 1.1: Schema della Turing Machine
Nella Fig. 1.1 è visibile un semplice schema della TM , con l’essen- za del suo funzionamento: dalla coppia stato-input viene deterministica- mente fissato il suo comportamento, che consiste nella terna “nuovo sta- to/spostamento/output”. Tutte e tre queste mosse possono essere opzionali: se non c’è un nuovo stato vuol dire che quello attuale è finale, di termine della computazione; la macchina può rimanere nella stessa casella e può non produrre output (Turing standardizza questo caso come scrivere lo stesso sim- bolo letto). Devono essere fissati convenzionalmente uno stato iniziale e una casella iniziale e il funzionamento complessivo della macchina va specificato in una tabella dove sono scritte le istruzioni, sotto forma di corrispondenze tra configurazioni e comportamenti.
⇓ 0/ 0/1 0/
S I NS NC O 0 - 1 ⇒ 0 1 - 0 ⇒ 1
Tabella 1.1: Esempio di una TM che produce la sequenza infinita 0101...
1.2. La RAM machine 5
In Tabella 1.1 viene schematizzata una TM che produce la sequenza in- finita 0101... In alto il nastro di memoria, qui rappresentato con la possibile scelta di valori (alfabeto dei simboli), in basso la tabella delle istruzioni. La freccia verticale sul nastro indica la casella d’inizio. Le colonne della ta- bella contengono, nell’ordine: Stato, Input, Nuovo Stato, Nuova Casella, Output. Il funzionamento passo dopo passo di un’istanza di questa TM è rappre- sentato in Tabella 1.2.
⇓ 0 S I NS NC O 0 - 1 ⇒ 0 1 - 0 ⇒ 1
⇓ 0 1 S I NS NC O 0 - 1 ⇒ 0 1 - 0 ⇒ 1
⇓ 0 1 0 S I NS NC O 0 - 1 ⇒ 0 1 - 0 ⇒ 1
⇓ 0 1 0 1 S I NS NC O 0 - 1 ⇒ 0 1 - 0 ⇒ 1
Tabella 1.2: Esecuzione passo passo di una TM che produce la sequenza infinita 0101...
Il concetto di TM può essere esteso in vari modi rispetto a quanto qui descritto e formalizzato con rigore matematico, per una trattazione più ap- profondita si rimanda alla bibliografia citata.
Proseguendo nel passaggio dalla macchina di Turing al computer reale, ri- mangono dei vuoti che l’astrazione dell’idea di TM aveva lasciato, in partico-
1.2. La RAM machine 7
TM , anziche’ ⇒/⇐/-, si potesse usare un numero, il cosiddetto indirizzo (address), che rappresenta la posizione della casella su cui la macchina si po- sizionerà successivamente. Il concetto di RAM permette la preziosa libertà di poter accedere ad una cella di memoria qualunque, con tempi che non dipendono da qual’è l’ultima casella visitata, ma perde qualcosa della gene- ralità del nastro di memoria di Turing, in quanto adesso ogni casella deve avere rigidamente assegnato a priori un indirizzo, e chi scrive un programma deve conoscere quali sono gli indirizzi disponibili di una RAM. L’altra novità importante è la componente ALU (Arithmetic-Logical Unit), che risponde all’esigenza di rendere disponibili operazioni di uso frequente, evitando quindi di doverle realizzare ogni volta mediante passaggi di stato. La ALU può essere pensata come una collezione di tante TM dedicate: una per l’addizione, una per la congiunzione logica, una per la disgiunzione e così via, ciascuna realizzata con un suo specifico circuito elettronico. Chi scrive il programma, non deve più occuparsi di come implementare queste operazioni, è sufficiente che dia alla ALU l’indicazione che deve attivare una particolare operazione. Anche questa innovazione è a scapito della massima generalità del sistema di Turing, che consentiva di implementare qualunque algoritmo basandosi sull’unico meccanismo del passaggio di stati: adesso per scrivere un programma è necessario conoscere quali sono le modalità che attivano in una ALU l’operazione desiderata. Viene adottato allo scopo il concetto di istruzione, un codice univoco, memorizzabile come sequenza binaria, che la ALU riconosce come comando di attivare i circuiti che provvedono ad una certa operazione. L’insieme di tutte le istruzioni riconosciute dalla ALU va sotto il nome di instruction set. Non esiste un insieme di istruzioni standardizzato, ogni progettista di ALU sceglie le proprie, tuttavia esistono alcune categorie di massima di istruzioni, comuni alla maggior parte delle ALU:
1.3. Dalla RAM machine... la CPU 8
La Ram Machine è totalmente programmabile: il programma da eseguire è codificato e memorizzato nella RAM, esattamente come gli altri dati. Le istruzioni che compongono un programma saranno pertanto sequenze binarie residenti in celle della memoria RAM, da cui vengono prelevate dall’unità di controllo e copiate nella ALU. L’ unità di controllo inoltre scandisce le se- quenze di operazioni del sistema. Continuano ad esistere altri dispositivi di memoria ad accesso sequenziale, che rappresentano i modi con cui il compu- ter colloquia con il mondo esterno, ma l’esecuzione del programma avviene soltanto attraverso la memoria RAM.
Il modello RAM machine ha avuto un tale successo da soppiantare ogni alternativa proposta agli albori dei computer e si è andato sempre più affer- mando come unica ricetta per costruirli, pienamente valida ancora oggi. La sua versione consolidata e applicabile a qualunque computer odierno è un’ar- chitettura semplice ed elegante, sintetizzabile nello schema di figura 1.3. La cosiddetta CPU (Central Processing Unit) dello schema corrisponde al- l’insieme della ALU e del Controller nel modello RAM Machine ed è quella parte del computer dedicata all’elaborazione dei dati, che avviene eseguendo istruzioni che facciano parte del suo instruction set. La memoria corrisponde alla memoria RAM, che contiene sia il program- ma da eseguire, cioè la sequenza di istruzioni che risolvono il compito deside-
1.3. Dalla RAM machine... la CPU 10
prestazioni complessive.
....
microprocessore data register data register data register program counter ( PC ) program status ( PS )
ALU
Controller
Figura 1.4: Componenti principali di un microprocessore
L’ architettura di massima di un microprocessore è quella di Fig. 1.4, notare la somiglianza con la RAM Machine di von Neumann (in Fig. 1.2). La singolarità è che quello era lo schema dell’intero computer, mentre la CPU ne è solo un componente, assimilabile alla ALU della RAM Machine. La somiglianza con la RAM Machine è immediatamente evidente per i componenti ALU e controller, l’equivalente della memoria RAM per il mi- croprocessore è il suo set di registri. Come nella RM, anche qui, la ALU è piuttosto elitaria nella sua comunicazione: parla solo e soltanto con i suoi registri. Questi costituiscono quindi le aree di memoria da cui la ALU pren- de i dati necessari per le sue operazioni e su cui scrive i risultati. I registri sono in genere in numero limitato, insufficiente a mantenere tutti i dati ne- cessari durante l’esecuzione di un programma. Pertanto essi dovranno essere scambiati con la memoria RAM, di questo si occupa il controller. Con una semplificazione si puo riassumere così l’operare della CPU: la ALU opera sui dati nei registri e ogni volta che occorre elaborare dati che non sono già disponibili, il controller li preleva dalla RAM esterna e li copia nei registri stessi. Entriamo ora più all’interno della CPU, per vedere come avviene, in que- sto schema semplificato, il suo funzionamento. Il principio è esattamente
1.3. Dalla RAM machine... la CPU 11
quello della RM: viene letta dalla RAM un’istruzione per volta, ed eseguite le operazioni codificate in tale istruzione. Tali operazioni possono avere come argomenti dei dati o dei numeri direttamente codificati nell’istruzione. Per i dati, il caso migliore è che questi si trovino già nei registri, l’operazione è allora eseguita immediatamente. Se non è così, il controller deve richiedere, specificandone l’indirizzo, il dato all’esterno e trasferirlo in un registro. Come sapere qual’è l’indirizzo in memoria dove è immagazzinata l’istru- zione da eseguire? Possiamo vedere nella figura 1.4, che mentre i primi registri sono disponibili per contenere qualunque dato su cui eseguire operazioni, gli ultimi hanno dei nomi diversi, che corrispondono a delle loro funzioni partico- lari, questi registri dedicati non sono scritti dall’utente, ma direttamente dalla circuiteria interna della CPU. Il registro denominato PC (Program Counter ) ha il computo di contenere l’indirizzo in memoria dell’istruzione da andare a prelevare ed eseguire. Il funzionamento del Program Counter è banale, si basa sul presupposto che un programma sia residente nella memoria con una sequenza ordinata, con ogni istruzione seguita da quella che è opportuno venga eseguita suc- cessivamente. Ciò pare una regola di normale buonsenso, ma si sottolinea come non è affatto scontato debba essere così, le istruzioni della macchina di Turing sono scritte nella tabella in un ordine convenzionale, del tutto indipendente dall’ordine in cui sono eseguite. La CPU si adegua al senso co- mune, pertanto l’esecuzione di un’ istruzione incrementa il Program Counter semplicemente all’indirizzo di memoria successivo. A meno che l’istruzione in corso non appartenga alla categoria di quelle di controllo: in questo caso l’istruzione stessa conterrà l’indicazione del nuovo indirizzo in memoria, che verrà impostato nel Program Counter. Per chiarire quanto detto si inizia a mostrare il comportamento dela CPU nell’esecuzione di un frammento elementare di programma (scritto in un par- ticolare linguaggio, l’assembler ), schematizzato in Fig. 1.5. Prima dell’ese- cuzione tutti i registri della CPU hanno valori arbitrari, eccetto il PC, che contiene 1000 , indirizzo della RAM con la prima istruzione. La numerazione
1.3. Dalla RAM machine... la CPU 13
1001 (^1003) .... (^10061007) (^10081009) 100A100B 100C
1002
mov $1008 R1mov $1009 R add R2mov R1 $1008 R
(^34)
10 20 3 1000
1000
R ....
R R
CPU RAM
PC PS
1001 (^1003) .... (^10061007) (^10081009) 100A100B 100C
1002 mov $1009add R2 R1mov R1 $1008^ R
(^34)
10 20 3 1000
1000 mov $1008 R
mov $1008 R
R ....
R R PC
CPU RAM
PS
1001 (^1003) .... (^10061007) (^1009) 100A 100B100C
1002 add R2^ mov $1009mov R1 $1008 R1^ R
(^34)
10 20 3 1000
1000
mov $1008 R
1008
mov $1008 R
R ....
R R
CPU RAM
PSPC
1001 (^1003) .... (^10061007) (^1009) 100A 100B100C
1002 mov $1009add R2 R1mov R1 $1008^ R
4
20 3 1000
1000 mov $1008 R
1008 3
3
mov $1008 R
R ....
R R
CPU RAM
PCPS
Figura 1.6: Esempio di esecuzione della prima istruzione dell’assembler in RAM (da sinistra a destra, dall’alto in basso).
Quest’istruzione: mov $1008 R viene caricata dalla RAM all’interno della CPU, per essere eseguita. In termini discorsivi, l’istruzione dice di prendere il dato all’indirizzo 1008 della RAM e metterlo nel registro R1. Quindi, (Fig. 1.6 in basso a sinistra), la CPU deve fare un accesso alla RAM all’indirizzo 1008 , leggendo il dato nel registro R1, che varrà ora 3 (in basso a destra). Il resto del programma è mostrato (in modo più sintetico), nella Fig. 1.7: in a si vede l’avanzamento del PC, che da 1000 è passato a 1001 e quindi l’istruzione caricata nella CPU è
mov $1009 R che come conseguenza scrive il valore 4 in R2. In b, con il PC a 1002 , viene caricata la prima istruzione della categoria aritmetica:
add R2 R
1.3. Dalla RAM machine... la CPU 14
anche questa istruzione ha due operandi, che devono essere registri e il secondo operando è anche la destinazione del risultato; come si vede in Fig. 1.7 c, il registro R1 diventa 7. Infine, nei riquadri d e e, è raffigurata un’altra istruzione di spostamento, che questa volta mette il risultato dell’addizione in RAM, alla locazione 1008. Come accennato, non sempre il PC si comporta nel modo elementare appena visto. Vi sono in generale due tipi di istruzioni che interrompono il flusso normale del programma: quelle incondizionate e quelle condizionate. Le prime si spiegano da sole: eseguono sempre il salto ad un punto diverso del programma. Le seconde invece possono sia provocare questo salto, oppure mantenere la sequenza normale, a seconda di una condizione. È il tipico caso di istruzioni che corrispondono alla if dei linguaggi ad alto livello. Il problema è che la condizione è di solito il risultato di un’operazione e quindi a sua volta di un’istruzione che non è quella di controllo di cui stiamo parlando. Per esempio, se la if contiene la condizione “se un dato è maggiore di un certo numero”, questo comporta eseguire la differenza del dato e del numero e vedere se il risultato è maggiore, minore o uguale a 0. È necessario che la CPU abbia quindi eseguito prima l’istruzione corrispondente alla sottrazione, ma che il suo risultato sia in qualche modo conservato per capire come deve comportarsi l’istruzione di salto condizionale successiva. A questo provvede un altro registro dedicato, il PS (Program Status), che è sempre scritto dalla CPU, ma è leggibile dall’utente come fosse un normale registro.
Una rete di telecomunicazioni è un sistema che fornisce servizi relativi al trasferimento di informazioni ad una popolazione di utenti distribuiti geo- graficamente. Le reti di telecomunicazioni sono vicine alla nostra esperienza quotidiana di uomini moderni: basti pensare alla rete telefonica, alla rete postale, alle reti per diffusione radio e TV, alle reti telematiche. Alcune di queste reti sono di nuova concezione e quindi utilizzano tecno- logie avanzate, tipicamente del settore elettronico (e in qualche caso anche della fotonica), mentre altre, come la rete postale, sono state in funzione per quasi due secoli e si basano su strumenti molto più tradizionali, quali i mezzi di trasporto. Sappiamo inoltre che in tempi remoti sono esistite reti di telecomunicazio- ni basate su tecnologie diverse, come torri d’avvistamento e segnali luminosi o bandiere (i castelli della Valle d’Aosta, la Grande Muraglia Cinese), segnali di fumo (caratteristici degli indiani americani), o segnali acustici (i tam-tam della giungla). Inoltre, verso la fine del secolo scorso erano state attivate reti telegrafiche basate su segnalazioni ottiche, utilizzando tralicci su cui erano montati pannelli mobili azionabili dal basso e visibili da lontano. È evidente una rilevante differenza tra le reti citate ad esempio: le reti per diffusione radio e TV, i segnali di fumo ed i tam-tam costituiscono reti a diffusione e unidirezionali: l’informazione viene distribuita da una sorgente
2.1. Dagli albori militari alla fisica delle alte energie 17
a chiunque disponga di un apparato ricevitore, quindi a ogni utente della rete, indipendentemente dalla sua identità. Non è inoltre possibile per la gran maggioranza degli utenti, che dispongono solo di un apparato ricevente, inviare informazioni ad altri. Le reti telematiche, la rete telefonica, il sistema postale, sono invece reti a selezione e bidirezionali: sono caratterizzate dalla possibilità per la sorgente dell’informazione di scegliere a quali interlocutori questa deve essere trasferita. In questo caso tutti gli utenti sono attrezzati sia per trasmettere sia per ricevere.
Internet, la rete delle reti che è divenuta il nostro principale strumento di ricerca, collaborazione ed interazione sociale, una realtà consolidata per il lettore oggi venticinquenne, ha radici lontane nella storia dell’Informatica. Riesaminare insieme i passi remoti della sua storia è un esercizio utile ed istruttivo su come stimoli storici e sociali, idee geniali e tecnologia possono essere fusi per creare qualcosa di unico e così influente da cambiare lo stile di vita di due terzi della popolazione mondiale. Come spesso accade, il primo impulso alla realizzazione di un sistema d’interconnessione di calcolatori su scala geografica fu di origine militare. La “mamma” di Internet fu infatti ARPANET, una rete costruita negli anni ’ a scopo militare, pensata per condividere online il tempo di utilizzazione dei computer tra i diversi centri di elaborazione dati dell’ARPA (Advanced Re- search Projects Agency), che eseguivano ricerche scientifiche a lungo termine per conto del Dipartimento della Difesa degli Stati Uniti. Un’impresa non da poco, dato che all’epoca non esistevano standard per la costruzione di calco- latori ed i “supercomputer” erano isolati e basati su sistemi incompatibili tra loro. Il progetto è principalmente dovuto alla caparbietà di Bob Taylor, diret- tore della divisione informatica dell’ARPA, alle idee rivoluzionarie di Joseph