• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Elaborazione automatica dei dati: computer e matlab
 

Elaborazione automatica dei dati: computer e matlab

on

  • 1,414 views

Appunti universitari per l'esame di Elaborazione automatica dei dati: computer e matlab

Appunti universitari per l'esame di Elaborazione automatica dei dati: computer e matlab

Statistics

Views

Total Views
1,414
Views on SlideShare
1,411
Embed Views
3

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 3

http://profland.altervista.org 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Elaborazione automatica dei dati: computer e matlab Elaborazione automatica dei dati: computer e matlab Document Transcript

    • Appunti di Elaborazione automatica dei dati: Il Computer ed il Matlab (cenni) Si ricorda che: • l'uso degli appunti qui presenti è consentito per solo uso personale e di studio; • la consultazione è gratuita ed ogni forma atta a ricavarne lucro è vietata! • gli appunti sono fatti da studenti che non possono assumersi nessuna responsabilità in merito; • il materiale qui presente non è sostitutivo ma complementare ai libri di testo: - devi (e ti consiglio) di consultare e comprare i libri di testo; • il materiale qui presente è distribuito con licenza Creative Commons Spero che ciò che hai scaricato ti possa essere utile. Profman Il file è stato scaricato in forma gratuita da: http://profland.altervista.org oppure da qualche mirror, come: www.profland.cjb.net www.profland.135.it o dalla pagina dedicata su slideshare.net: www.slideshare.net/profman
    • Appunti d’esame Il computer www.profland.135.it Il Computer (autore: jiji) FASI DI RISOLUZIONE DI UN PROBLEMA 1. Formulazione del problema: Fase di definizione e stesura del problema. Determinare gli obiettivi appropriati, determinare i vincoli da imporre, esaminare le alternative a disposizione, limitare il periodo temporale di riferimento. 2. Costruzione di un modello: Il problema deve essere misurabile e quindi quantizzabile ad es. modelli matematici o modelli fisici. Deve quindi essere possibile costruire un modello rappresentativo del problema. I modelli potranno essere concreti che sono oggetti fisici con cui rappresento il mio problema (es. modelli di veicoli usati per esperimenti nelle gallerie del vento) o astratti che sono un insieme di relazioni che descrivono il fenomeno in esame, tali relazioni sono di tipo matematico cioè delle funzioni. 3. Ricerca di un procedimento risolutivo(algoritmo): Il problema deve essere risolto secondo un procedimento prestabilito e logico. Algoritmo: costruzione della sequenza di passi logici che se eseguiti portano alla risoluzione del problema descritto dal modello. Esso è il nostro pensiero. 4. Implementazione dell'algoritmo in un contesto reale (programma). Programma: traduzione dell'algoritmo in un linguaggio compreso dall'esecutore. 5. Calcolo della soluzione: tale calcolo viene effettuato dall'esecutore Verifica della soluzione: Non possiamo attuare un procedimento di calcolo inverso poiché non è vero che ogni funzione ammette inversa non è detto che la funzione sia iniettiva cioè che ad ogni x corrisponda un unica y e per x diverse corrispondano y diverse. Inoltre anche se esiste la funzione inversa l'uomo potrebbe non essere capace di scriverla. Le funzioni complesse infatti associano insiemi di numeri ad insiemi di numeri. In tal caso si procede quindi a studiare la funzione effettuando dei tentativi mirati, cioè calcolo la funzione in punti prestabiliti nei quali immagino cosa possa succedere e verifico quello che succede. La verifica del modello deve avvenire usando il modello stesso. Una volta stimate le grandezze del modello queste dovranno essere confrontate con una soluzione nota (calcolate su batterie di dati). IL COMPUTER Il Computer è detto anche elaboratore ma non cervello elettronico poiché non è in grado di prendere decisioni, non è cioè dotato di capacità decisionale. Conseguenza di ciò è che noi dobbiamo pianificare tutto evitando situazioni impreviste altrimenti il computer non può andare avanti. Talvolta si può verificare un errore che non era stato previsto poiché riguardava una eventualità che non era stata presa in considerazione. L'elaboratore è un dispositivo capace di effettuare relazioni ad altissima velocità e di gestire una quantità molto elevata di informazioni. 2
    • Appunti d’esame Il computer www.profland.135.it Es. Problema: Somma di 5 numeri I Dati del problema sono: 5, 7 , 10 , -2 , -1. Innanzitutto occorre stabilire le capacità dell'esecutore. Le istruzioni verranno date in relazione a ciò che il computer è in grado di fare. Ipotizziamo che l'elaboratore sia capace di eseguire solo un'operazione alla volta. Costruiamo l'algoritmo facendo un ciclo ripetitivo inizializzando una grandezza a zero e sommandovi un numero alla volta. Numero Totale 5 5 7 12 10 22 -2 20 -1 19 Tutto questo ha senso solo in presenza di un esecutore che sia capace di fare ciò. Nell'utilizzare il linguaggio per la costruzione dell'algoritmo dovrò evitare l'ambiguità che è originata dal fatto che una stessa parola può avere più significati, o che diverse parole possono avere lo stesso significato. Un linguaggio è scarsamente interpretabile. La riduzione della ambiguità si realizza attraverso la riduzione dei vocaboli a disposizione in modo che ad ogni situazione corrisponda un unico specifico vocabolo, la presenza di quel vocabolo diventa quindi inequivocabile; e attraverso l'irrigidimento della forma (scrivere le frasi secondo uno schema fisso molto rigido. Se faccio questo sono in grado di esprimere l'algoritmo. L'algoritmo può essere espresso mediante una flow chart in cui i singoli passi sono scritti in un grafico. I dati sono messi in blocchi in funzione di un ordine indicato graficamente da una freccia. Questo metodo presenta poche ambiguità la figura geometrica del rettangolo sta ad indicare che si tratta di un'azione. L'ellisse indica un acquisizione di input. La stampa riguarda una fase di output. L'azione decisionale è rappresentata da un rombo. Il difetto principale di questo modello è che si tratta di un modello di difficile rappresentazione, vi sono cioè delle difficoltà di natura grafica. Possiamo rendere l'algoritmo più efficiente eliminando la parte grafica sostituendola con delle parole chiave. Inoltre altro difetto della flow chart sono le numerose frecce, sarà opportuno eliminare tali frecce inventandoci un ordine obbligato con cui scriviamo le cose, dovrò inoltre avere una forma diversa per indicare i vari salti. Definizione di algoritmo è un procedimento per la risoluzione di una classe di problemi, realmente eseguibile e quindi costituito da un numero finito di comandi non ambigui che specificano una sequenza finita di operazioni da eseguire su un numero finito di dati. 3
    • Appunti d’esame Il computer www.profland.135.it Un algoritmo definisce non solo il flusso delle operazioni da compiere ma anche i dati su cui tali operazioni vanno eseguite. Non si deve progettare solo il "da farsi" del problema ma anche il "da farsi" sui dati di cui disponiamo. Un oggetto astratto in grado di risolvere o di eseguire algoritmi (il computer) deve avere delle capacità: • essere in grado di memorizzare l'algoritmo che e costituito dai dati e dalle istruzioni. • essere capace di effettuare delle operazioni aritmetiche e logiche (esiste o non esiste un numero) sui dati. essere capace di gestire il flusso delle operazioni. Anche l'uomo è in grado di eseguire un algoritmo ciò vuol dire che l'uomo ha in se queste capacità. Vi è un input, leggere delle informazioni ed un output, produce un risultato. Gestisce queste cose attraverso la memoria che svolge il ruolo di memorizzazione e di controllo ed utilizza eventualmente una calcolatrice per fare i calcoli. (vedi schema). Nello schema macchina ci saranno esattamente gli stessi schemi che sono presenti nell'esecutore umano di algoritmi: La macchina secondo Von Neumann avrà necessariamente un input (Dati) ed un output (risultato) avrà necessità di una zona di controllo e una zona di memoria ed una zona di calcolo (unità logico aritmetica). L'unità di input legge dei dati che vanno in memoria, la memoria interagisce con il controllo e con il calcolo e produce degli output. Il controllo fa da supervisore a tutte le altre unità. Componenti di un elaboratore • La Memoria è il supporto fisico che permette di immagazzinare informazioni che sono costituite da dati e istruzioni. • Unità di controllo serve a gestire i vari flussi di dati e istruzioni • Unità logico aritmetica consente di effettuare operazioni di natura aritmetica e di natura logica • Unità di input ed output introducono dati ed emettono risultati La MEMORIA è organizzata secondo una lista di cellette che chiameremo locazioni di memoria. Nelle locazioni si scriveranno dei caratteri che rappresentano il messaggio che noi vogliamo comunicare. Il linguaggio utilizzato dalle macchine è il linguaggio binario che è costituito da due caratteri I e O. Una locazione si presenterà come segue 4
    • Appunti d’esame Il computer www.profland.135.it 1 1 0 1 1 0 1 0 In ciascuna locazione no segneremo una sequenza di zeri e di uno. Ogni locazione è a sua volta una sequenza di componenti elementari che contengono esclusivamente i caratteri rappresentativi della memoria O ed I questi componenti elementari si chiamano bit. La memoria è insieme di celle ognuna delle quali contiene una stringa di bit. La stringa di 8 bit forma un byte che sono diventate l'unità di misura della memoria. Ogni locazione deve essere distinta dall'altra per cui ognuna di esse è associata ad un numero che la identifica, ognuno di questi numeri lo chiameremo l'indirizzo della locazione. locazione indirizzo 10110001 0010 11011110 0011 Nel sistema posizionale decimale le singole cifre giocano un ruolo diverso a seconda di dove stanno: 13 significa 1 x 10 + 3 x 1 perché è un sistema posizionale basato sul 10. La macchina usa invece un sistema posizionale basato sul 2 quindi i numeri sono moltiplicati per le potenze del due 0 x 23 + 0 x 22 + 1 x 21+ 0 x 1= 2. L'insieme di locazioni raggruppate prende il nome di parola. Il numero di locazioni che può contenere una parola dipende da quanto sono lunghe le istruzioni della singola macchina. La locazione è la minima unità indirizzabile, la parola è quell'insieme di locazioni sufficienti per poter scrivere un istruzione o un dato. La locazione tipica è costituita da 8 bit, la parola tipica è fatta da 4 locazioni (32 bit). Operazioni sulla memoria • leggere: vedere che ci sta in una certa locazione. • scrivere: inserire caratteri nelle locazioni. I parametri secondo i quali si valutano le prestazioni della memoria sono: • la velocità con cui posso andare a leggere e a scrivere, • la grandezza capacità della memoria cioè il numero di locazioni che essa è in grado di contenere. Per misurare la grandezza di una memoria utilizziamo dei multipli del byte dove il byte identifica una locazione. I multipli del byte sono: K byte 1024 = 29 M (mega) byte  G (giga)byte  T (tera)byte 5
    • Appunti d’esame Il computer www.profland.135.it Nella memoria vi è la parola cioè quante locazioni vengono messe insieme per essere fisicamente usate contemporaneamente. Quindi anche la lunghezza della parola che la memoria può contenere ha una sua importanza. Sarà migliore una memoria che può contenere parole più lunghe cioè che possono contenere più locazioni. W= ampiezza della voce misurata in bit 16, 32, 64 bit L'ordine di grandezza della velocità è il nano-secondo un miliardesimo di secondo. Unità di controllo Serve ad istruire e guidare le altri componenti del sistema nell'esecuzione della loro attività, supervede a tutte le funzioni del sistema. E' un'unità meccanica che non ha capacità decisionale. Si tratta di una unità che è in grado di leggere nella memoria in una parte in cui sono scritte istruzioni, è in grado di capirle e di eseguirle. Tutto ciò che conta è quello che noi abbiamo messo in memoria. Il meccanismo dell'unità di controllo è sequenziale dal punto di vista spaziale, ma anche dal punto di vista temporale cioè vi è una temporizzazione. Si tratta di un meccanismo che temporizza tutte le azioni del computer. Passato un certo tempo ricomincia il ciclo tornando nuovamente a leggere nella memoria l'istruzione successiva (che non è necessariamente quella che segue, ma quella che l'istruzione precedente ha indicato). L'istruzione precedente "determina" la successiva. I processi non sono tutti sequenziali. Random: accedere dove si vuole. Tale ciclo è detto ciclo Fetch. Ciò che differenzia un'unità dall'altra è la velocità con cui svolge questo ciclo. Unità logico aritmetica (ALU) È l'unità che svolge operazioni aritmetiche (moltiplicazione, divisione, addizione, sottrazione) e operazioni logiche (il confronto: se due locazioni hanno lo stesso contenuto o no). Questa è un'unità che opera sui dati. La CPU deve prelevare i dati su cui devono essere effettuate queste operazioni e portarli nella ALU. La ALU svolge il suo lavoro e poi il risultato deve essere riportato dalla memoria. I dati che sono portati nell'ALU devono essere messi da qualche parte ciò vuol dire che la ALU deve avere anch'essa una sua memoria (registri). I dati (due dati) vengono caricati nei due registri si fa l'operazione che gli compete il risultato si trasferisce in un registro e quest'ultimo poi ritorna alla memoria. Oggi la CU è spesso integrata con la ALU. Insieme costituiscono la CPU. UNITÀ DI CONTROLLO + UNITÀ LOGICO ARITMETICA = CPU o processore (central processing unit) Il parametro di misurazione della CPU è la velocità ossia il tempo con cui viene eseguita un istruzione. 6
    • Appunti d’esame Il computer www.profland.135.it Per sincronizzare le attività del sistema si utilizza un circuito elementare (clock) che emette degli impulsi a precisi intervalli di tempo. L'intervallo tra due impulsi consecutivi è chiamato tempo di ciclo di clock. Il ciclo di clock varia più o meno tra 10 e 1 nano secondo. In genere si determina quanti clock vengono fatti in un'unità di tempo (1 sec). Quindi preferiamo misurare la frequenza, cioè quante volte si ha un clock nel secondo. La frequenza va tra i 10 e i 1000 MHz. 1MHz = 106 H. La frequenza limite attuale è 2 GHz. Misure della velocità operativa La velocità operativa è un concetto intimamente legato alla frequenza. Se l'unità di controllo esegue il ciclo Fetch esattamente nell'ambito di un ciclo, ma il ciclo di Fetch potrebbe avvenire anche in più cicli. Una cosa è il ciclo temporale di sincronizzazione una cosa è il ciclo in cui viene eseguita una istruzione (Fetch). L'indicatore che non comporta nessun equivoco è quello che da la conoscenza a priori di quante istruzioni vengono fatte al secondo. Questo parametro è il MIPS milioni di istruzioni per secondo tipicamente coincide con li numero di cicli. Un altro parametro molto importante è quello che consente di misurare quante operazioni aritmetiche possono essere fatte in un secondo. Il MFLOPS (Milioni di operazioni FLOating Point al Secondo) rappresenta quante operazioni vengono fatte al secondo. Quando necessitano più cicli per eseguire un'istruzione i MIPS di questa macchina sono inferiori alla frequenza. Unità di input output Permettono al computer di interfacciare con il mondo esterno: Video, Tastiera, Stampante, Mouse, Plotter, Scanner. Classificazione dei Computer Ogni macchina si distingue per una differente tecnologia. personal computer workstation mainframe super computer Frequenza Hanno un tecnologia Sono oggetti molto Hanno incredibili 1000 - 2000 MHz differente dal PC Sono più grandi ed hanno velocità rispetto ad Capacità più robusti poiché non capacità estremamente altri tipi di computer. 64 - 256 Mbyte si spengono mai superiori. Hanno più di un processore in parallelo. Scopo: Scopo: Scopo: Scopo: piccoli archivi Ricerche Data processing Calcolo scientifico di scrittura CAD (banche dati) altissimo livello internet Calcolo giochi internet Velocità di operazioni al secondo PC e Workstation 5 - 50 milioni di operazioni al secondo (MFLOPS) un super computer è nell'ordine dei GFLOPS di miliardi di operazioni sono cioè 1000 volte più veloci. 7
    • Appunti d’esame Il computer www.profland.135.it Costo Computer PC = 2 - 10 mil di lire WS = 10 - 10 mil di lire MF = 200mil - 2mld SC = 2 - 60 mld Le istruzioni si rappresentano in memoria tali istruzioni vengono scritte utilizzando solo due caratteri O e I. Essendo solo due caratteri nello scrivere avrò bisogno di più caratteri. Si farà corrispondere ad ogni carattere una frase scritta secondo il codice binario. Ad ogni carattere del mio alfabeto farò corrispondere una successione di caratteri dell'altro alfabeto. Esempio caratteri codice DCD codice DIC codice ascii 0 001010 11110000 01010000 1 000001 11110001 11001000 2 000010 11110010 11000100 se utilizzo solo due caratteri avrò solo 4 combinazioni, 00 01 10 11 se ne considero 3 le combinazioni saranno 8. All'aumentare delle combinazioni il tentativo di enumerarle diventa sempre più difficile enumerarle quindi dovrà essere elaborata una strategia. Utilizziamo dei modelli che sono basati su dei criteri, in questi modelli si avrà una deduzione logica che se falsa fallisce anche la strategia ma se è vera la strategia non può fallire. Questo è il pensiero matematico Nel nostro problema la prima combinazione è 2 la seconda è 2 2 la terza 23 forse la quarta secondo la logica sarà 24. Ragioniamo quindi in termini matematici Nel sistema posizionale decimale ogni numero assume un significato in relazione al posto che occupa e alla base di numerazione che nel nostro caso è il 10 Quindi 123 significa 1 x 102 + 2 x 101 + 3 x 10. Al simbolo 123 siamo dunque in grado di dare un significato. Le stringhe di codici di sui sopra sono esattamente la stessa cosa con la differenza che queste stringhe sono basate su due caratteri e sono quindi in base 2.Se è scritto 01 io leggo 0 x 21 + 1 x 20 = 1; 0 x 21 + 0 x 20 Quindi alla domanda quanti sono i caratteri minimi necessari rispondo andando a vedere quanti sono i numeri che io posso rappresentare con un certo numero prefissato di cifre. Es con 1 cifra decimale posso rappresentare 10 numeri, con 2 cifre posso rappresentare i numeri che vanno da 0 a 99 che sono 100, con tre cifre decimali posso rappresentare 1000 numeri cioè da 0 a 999. Quindi con tot cifre quanti numeri posso esprimere? potrò esprimere totn, con tot cifre binarie io esprimo 2tot e quindi ho trovato quanti bit dovrò avere minimo per esprimere i dati. Con una casella 2 bit, con due caselle 4, con tre 8, con quattro 16, 8
    • Appunti d’esame Il computer www.profland.135.it con cinque 32, con sei caselle 64. Quindi 6 caselle è il numero minimo con cui io posso rappresentare i circa 64 caratteri della lingua italiana. Dal punto di vista dell'efficienza sarebbe più logico operare con gruppi di 6 ma dal punto di vista della tecnologia sarebbe, invece più opportuno operare con gruppi di 8 poiché sono potenze di due e sui computer tutto è basato sul 2 o sulle potenze di due. Oggi si usano codici a 8 bit in particolare il codice ascii è il più usato. Es per scrivere Dado ad ogni lettera corrisponderà una stringa di caratteri binari. Ci chiediamo se il modo di esprimere i dati sia soltanto questo. Esprimendo i numeri il metodo suddetto è efficiente? Es 123 lo rappresento 010100000 01010010 01010011 sono necessarie ben 24 cifre binarie. Con una stringhetta da 8 bit posso enumerare 256 oggetti diversi. Se invece ho dei numeri posso usare soltanto 8 bit per rappresentare i numeri che vanno da 1 a 256. Utilizzare questo meccanismo quando opero solo con i numeri questo meccanismo sarebbe solo uno spreco di spazio. Quindi mi converrà utilizzare un processo di conversione del numero decimale nella base 2. Una volta che ho effettuato questa conversione poiché so che con 8 bit si possono rappresentare i numeri da 1 a 256 si possono rappresentare io userò non 24 ma solo 8 bit. Le informazioni nel computer non vengono codificate allo stesso modo ma dipende dal tipo di informazione. I caratteri li rappresenterò convertendo carattere per carattere, i numeri sarà più conveniente convertirli in numeri binari. I tipi di dati - Caratteri (alfanumerici) - Numeri - Informazioni logiche (confronto fra due entità il cui risultato è V o F) Il dato logico si esprime semplicemente con un bit es 0 falso, 1 vero. I dati vengono rappresentati tramite locazioni ma le locazioni spesso non sono sufficienti e quindi dobbiamo utilizzare la parola. La locazione è minimamente 8 bit. La parola può essere formata da più locazioni quindi se la parola è a 32 bit sarà costituita da 4 locazioni. Caratteri Su stringhe di caratteri posso fare le seguenti operazioni: lettura, ordine quindi il computer è in grado di fare dei confronti, trasferimenti e concatenazioni. Numeri Possono essere interi o decimali. Il procedimento di rappresentazione esposto prima lo posso utilizzare solo sui numeri interi. Numeri interi Prendiamo un numero intero e lo trasformiamo in binario, es. 123 diventa un certo numero binario utilizzando un certo numero di bit che mettiamo in memoria. 9
    • Appunti d’esame Il computer www.profland.135.it utilizzerò tante locazioni quante sono necessarie per scrivere tutti questi numeri. Si decide una volta per tutte quanti bit al massimo utilizzare per rappresentare i numeri, normalmente si utilizzano tutti i bit contenuti nella parola. I numeri interi considerati sono solo quelli che possono essere rappresentati nel computer cioè quelli che rimangono al di sotto dei bit prefissati per essere utilizzati. Quindi quando parliamo di tipi interi indichiamo la sottoclasse di numeri interi che noi effettivamente siamo in grado di rappresentare. Es 2 corrisponderà ad un certo numero binario. In presenza di un numero negativo dovrò sacrificare un bit per li segno meno. Se ho a disposizione 8 bit io convertirò i numeri interi che riempiono soltanto 7 bit perché l'ottavo è per il segno. Se ho a disposizione 7 bit il massimo numero rappresentabile è 127, cioè 27 = 128 ma uno è lo zero quindi 127 (01111111). Esiste quindi un massimo intero rappresentabile. Con questo tipo di rappresentazione avremmo due modi per poter rappresentare lo zero 0+,0- ciò potrebbe creare errori. Quindi il numero 10000000 viene interpretato come un ulteriore numero attribuito o ai positivi 128 o ai negativi -128. Sul tipo intero, cioè sull'insieme dei numeri interi rappresentabili, sono definite le seguenti operazioni: addizione, sottrazione, moltiplicazione, divisione. Nelle operazioni dei tipi interi possono sorgere dei problemi legati al fatto che i numeri non sono tutti rappresentabili e quindi il risultato potrebbe non esserlo: Es ipotizziamo una macchina che possa al massimo scrivere i numeri fino a 100 posso scrivere 60, posso scrivere 50 ma non posso fare la somma di 60 + 50 in tal caso si ha una situazione di non rappresentabilità del risultato. Situazione eccezionale │ x │ > max dato non rappresentabile │ x # y│ > max risultato non rappresentabile (# indica una qualsiasi operazione). Tale situazione è in generale detta di overflow. In questo caso la macchina darà errore. La somma di 1 in binario si realizza mediante uno spostamento degli uno fino ad arrivare al massimo numero rappresentabile 11111111 se ci sommo 1 = 2 , 0 e 1 di riporto .... fino a diventare un numero negativo si invade quindi il campo dei numeri negativi -128 dal punto di vista software potrei creare un programma che permetta di segnalare l'errore prima di effettuare il calcolo. Quindi questo rischio ci fa capire che dobbiamo usare molto poco i numeri interi. A cosa servono i numeri interi? Servono solo a contare. I numeri decimali vengono utilizzati per i calcoli, essi possono però avere anche la parte decimale nulla. I numeri usati per i calcoli sono solo apparentemente interi ma in realtà hanno i decimali nulli. Se su una calcolatrice faccio l'operazione 1/2 il risultato è 0.5 se invece faccio un operazione di divisione 1/2 (numeri interi) fa 0 col resto di 2. Esistono numeri interi e numeri reali, le operazioni dell'uno non sono le operazioni dell'altro. Dovrò quindi indicare al computer di trattare i numeri come decimali. I software in genere operano sui numeri reali. I numeri reali vengono trattati in modo completamente differente dai numeri interi. Di Tipo reale 10
    • Appunti d’esame Il computer www.profland.135.it Cos'è un numero? Es. 2 è la rappresentazione in valore di un numero che ottengo contando uno due. I valori sono simboli concatenati tra di loro che esprimono un valore. I simboli identificano delle proprietà dei numeri 1/2 identifica un simbolo che moltiplicato per due darà 1, il suo valore nel mondo dei numeri interi non esiste perché non esiste nessun numero intero che moltiplicato per due da 1. 2 è un simbolo che rappresenta un numero il cui quadrato è esattamente uguale a 2 il, suo valore non è rappresentabile. In conclusione i tipo reale comprende i numeri interi in cui il simbolo corrisponde al valore del numero, i numeri razionali che sono espressi da simboli a volte sono rappresentabili ma altre no, i numeri irrazionali non sono mai rappresentabili. Il tipo reale non considera quindi tutti i numeri reali ma soltanto una parte cioè quella rappresentabile. Per rappresentare un numero considero una locazione Suddividendola in due parti separandole ideologicamente con un punto a sinistra scrivo la parte inter del numero a destra quella decimale 11110.00111 avrò un certo numero di bit da dedicare all'intero ed un certo numero di bit da dedicare al decimale. Questa idea di rappresentazione è un idea molto poco efficiente perché limita moltissimo la rappresentatività occorre quindi cambiare la strategia con cui noi siamo tipicamente abituati a rappresentare i numeri sorge un problema di spazio. Ci chiediamo se esiste un metodo matematico per rappresentare meglio questi numeri posso esprimere numero es. 30 milioni come prodotto tra un numero e una potenza. I tipi reali sono una sottoclasse dei numeri razionali. Abbiamo detto che il modo con cui noi rappresentiamo i numeri è un modo poco efficiente. Si ricorre ad una rappresentazione più efficiente scrivendo una parte principale del numero e indicando l'esponete del 10 che completa quel numero per allinearlo in posizione corretta. Es 1mld = 1 x 109 ; 1/1mld = 1 x 10-9. Questo tipo di rappresentazione è la rappresentazione floating point (pag 98). In generale qualunque numero può essere rappresentato in questo modo: X = f x e dove: f è la mantissa, è la base di numerazione 10 per l'uomo 2 per la macchina, e è l'esponente. In alcuni casi la mantissa è rappresentabile in altri no. La rappresentazione Floating Point non è unica. Ma è invece opportuno che il tipo di rappresentazione sia univoco in modo da evitare ambiguità. Si sceglie quindi un sola tra quelle possibili (scientifica, ingegneristica). L'ingegneristica prende il numero ne guarda le cifre e le trasforma tutte in intero, quella scientifica fa l'operazione esattamente opposta il numero lo interpreta come un numero decimale es 0.35 potrei scrivere anche 0.035 sarebbe ancora decimale e allora mettiamo un'ulteriore limitazione: la prima cifra deve essere obbligatoriamente diversa da zero in questo modo la rappresentazione diventa unica. Questa è la rappresentazione scientifica Floating Point. La mantissa sarà quindi un numero sicuramente più piccolo di 1 e poi la prima cifra deve essere necessariamente diversa da zero ciò significa che nel caso di base 10 la mantissa dovrà essere maggiore di 1/10 in generale 1/ f 1. Per rappresentare il numero io devo conoscere la mantissa e l'esponente. Il calcolatore deve rappresentare due numeri interi trasformandoli in base binaria. (pag 11
    • Appunti d’esame Il computer www.profland.135.it 104). Sia la mantissa sia l'esponente possono avere un proprio segno un bit verrà usato per il segno della mantissa un bit per li segno dell'esponente. Quali problemi possono nascere da questo tipo di rappresentazione? non posso rappresentare il numero: -se la mantissa ha più cifre di quante io ne possa scrivere, (precisione del numero) -se l'esponete ha più cifre di quante ne posso rappresentare (ordine di grandezza) La parte di numeri che posso rappresentare è ovviamente finita. L'insieme infinito dei numeri viene rappresentato con un numero finito di oggetti quindi vi è una approssimazione. I numeri che noi usiamo li chiameremo numeri macchina e sono una sottoparte finita dei numeri. La precisione dipende dal numero di bit che io ho a disposizione. L'approssimazione Il problema della precisione può essere risolto attraverso l'approssimazione. Anche se qui rappresentiamo comunque un intero a tale intero noi attribuiamo un significato diverso Es se il numero intero è 1236 ed io posso rappresentare soltanto 3 cifre siamo in una situazione di overflow. Ora invece abbiamo un numero decimale che è solo rappresentato come intero quindi al posto di scrivere 0.1236 posso scrivere 0.123. Le approssimazioni sono due: Troncamento: Non scrivere le cifre che vanno da t in poi. Arrotondamento: scrivere le cifre fino a t lasciando l'ultima inalterata se quelle che taglio sono inferiori a 0.5 arrotondare alla superiore se invece è maggiore. Tra le due tecniche la più precisa è l'arrotondamento il cui errore varia da 0 a 5. La seconda limitazione consiste in un range limitato, vi è cioè un numero finito di cifre con cui posso rappresentare l'esponente E min < e < Emax. Non posso rappresentare numeri al di fuori di un certo intevallo Es =10 t=3 Emin = -9 Emax = 9 allora: rmax = 0.999 x 109 massimo numero rappresentabile rmin = 0.100 x 10-9 minimo numero rappresentabile Situazioni Eccezionali Cosa accade quando andiamo al di sopra o al di sotto del range possibile? Es devo rappresentare 10100 al massimo posso rappresentare 1099 Se e > Emax si dice che si è verificato un overflow. Se e < Emin si dice che si è verificato un underflow. (pag 120) con i reali il calcolatore si ferma. Nelle situazioni di underflow il calcolatore sostituisce il più piccolo numero di tutti lo zero altri calcolatori si fermano. I numeri che mettiamo nel computer sono sia numeri positivi che negativi e vanno tra un minimo valore rappresentabile e un massimo valore rappresentabile un esponente minimo e un esponente massimo sia dalla parte positiva che dalla parte negativa. Poi c'è una fascia compresa tra il minimo e lo zero di non rappresentabilità. Le situazioni di overflow non possono essere risolte le situazioni di underflow spesso vengono approssimate con lo zero. 12
    • Appunti d’esame Il computer www.profland.135.it I parametri che caratterizzano il sistema aritmetico floating - point a precisione finita sono: (pag 112)  = base di numerazione t = precisione Emin = minimo esponente Emax = massimo esponente Tali parametri variano da macchina a macchina ma i parametri secondo il sistema aritmetico standard IEEE sono: =2 t = 23 Emin = -127 Emax =128 tutto questo è scritto in una voce 32 bit di cui 23 sono per la mantissa, 7 per l'esponente due per il segno. In termini decimali si possono rappresentare dalle 6 alle 7 cifre decimali (da 2-127 a 2128) in decimali da 10-38 a 1039 è dunque di fficile che si verifichi una situazione di overflow. Tipicamente l'overflow sarà causato da situazioni di errore (es la divisione per zero). La precisione t invece è molto limitata 23 cifre binarie sono circa 6 - 7 cifre decimali tale precisione è detta precisione singola. Quando ne abbiamo bisogno noi possiamo ottenere una maggiore precisione aumentando il numero delle cifre che abbiamo a disposizione i computer sono quindi abilitati a mettere il numero in due voci si raddoppia così il numero di bit a disposizione: Doppia Precisione: =2 t = 52 Emin = -1023 Emax =1024 i tempi di calcolo sono più elevati quindi userò la semplice o la doppia a seconda delle esigenze. Di Tipo Logico Vero e Falso. Un dato logico si rappresenterà con un bit (es 0 = vero; 1 = falso ). Sorge un problema di indirizzamento nella loro rappresentazione per cui un intera locazione deve essere sciupata pur avendo bisogno soltanto di un bit (es pag 136) Sul tipo logico si fanno le operazioni dell'algebra di Boule: • Negazione (not,) • Congiunzione (and,) • Disgiunzione (or,) Negazione Se ho un valore logico che è vero il suo opposto sarà falso. p: 12 > 2 (vero) not p: 12 < 2 (falso) Congiunzione 13
    • Appunti d’esame Il computer www.profland.135.it entrano due input ed esce un solo output si tratta infatti di un'operazione e in matematica un'operazione comporta l'ingresso di due input e di un solo output. p: 2 < 3 (vero) q: 5 < 3 (falso) p and q: 2 < 3 e 5 < 3 (falso). La congiunzione lega i due input costituendo un'unica frase logica. Disgiunzione Anche in questo caso si hanno due input ed un output. p: 2 < 3 (vero) q: 5 < 3 (falso) p or q: 2 < 3 o 5 < 3 (vero) Tavole di verità negazione congiunzione e disgiunzione p not p p q p and q p or q V F V V V V F V V F F V F V F V F F F F Esercizio 1 Costuire una funzione logica con queste proprietà: a b v v F f v V v f V f f F La funzione corrispondente è (not a e b) or (a e not b) Esercizio 2 Data una funzione calcolarla a seconda dei valori di a, b, c. Si costruisca la tavola di verità della seguente funzione: (a e b) or c Devo quindi elencare tutte le possibilità e ad ogni possibilità scrivere la risposta. a b c v v v V v v f V v f v V v f f F f v v V f v f F 14
    • Appunti d’esame Il computer www.profland.135.it f f v V f f f F La rappresentazione delle istruzioni Nel computer scriverò dei comandi che verranno interpretati dalla unità di controllo. L'istruzione è la sequenza di bit scritta in linguaggio binario 0 e 1 solo la cpu è capace di interpretare. Questo linguaggio direttamente comprensibile all'elaboratore è detto linguaggio macchina. Questo linguaggio cambia da calcolatore a calcolatore perché dipende dall'unità di controllo. Es calcolo 2 x 3 + 7 le operazioni sono due, un istruzione elementare per il prodotto e un'istruzione elementare per la somma. Il comando fai una moltiplicazione può tradursi in una serie di comandi intermedi che noi non vediamo neanche. Ogni comando viene svolto in un ciclo di Clock, ma il tempo dell'operazione non corrisponde esattamente ad un solo ciclo di Clock. Parlando di MIPS abbiamo visto quante operazioni "ciclo" si fanno al secondo. Come sarà organizzato un programma che fa fare questo calcolo? Innanzitutto dovranno essere inseriti i dati: 2, 3, e 7 in forma binaria. D Bin 0 0 1 1 2 10 3 11 4 100 5 101 6 110 7 111 Le cifre binarie sono allineate a destra nelle locazioni di memoria (pag. 153). Dopo i dati dobbiamo prevedere delle altre locazioni in cui andare a scrivere i risultati. L'operazione può comportare anche due o più risultati parziali che comunque dovranno essere messi in memoria. Il calcoli sono svolti dall'unità logico aritmetica che dotata di sue memorie proprie dette registri. Il processo di esecuzione del calcolo sarà il seguente: Il dato 2 viene preso e portato nel registro; il dato 3 viene preso e portato nel registro, nel registro viene eseguita materialmente l'operazione di prodotto il risultato viene scritto nel registro dei risultati infine questo risultato viene riportato in memoria nel posto in cui avevamo previsto doveva andarsi a scaricare il risultato. La seconda fase del processo è simile alla precedente si somma il parziale a 7. Prendo 7 lo porto nel registro, prendo il risultato parziale e lo porto nel registro faccio le somme il risultato viene messo nel registro dell'operatore di somma, il risultato viene scaricato in memoria (pag. 155). Le istruzioni saranno costituite da stringhe di bit alcuni dei quali 15
    • Appunti d’esame Il computer www.profland.135.it saranno interpretati come codice dell'operazione da fare, altri come gli indirizzi delle locazioni in cui ci sono i dati su cui effettuare l'operazione e di quelle in cui andare a mettere il risultato. Fondamentalmente una stringa di bit è divisa in 4 settori un primo settore contiene un certo numero di bit che sono interpretati come comando, e poi avremo gli indirizzi degli operandi tipicamente due di input ed uno di output. Questa stringa sarà scritta nella memoria. Se il calcolatore opera su 16 bit la stringa sarà di 16 bit 4,4,4,4. Se opera su 32 bit la stringa sarà composta da 8,8,8 e 8. (pag. 157). Le limitazioni: Con 4 bit posso il numero massimo rappresentabile è 15 perché va da 0 a 15 cioè la potenza 24 e quindi con 4 bit posso definire 16 diverse operazioni. Avendo a disposizione 16 bit e devo dare 3 indirizzi posso dare 4 bit a indirizzo significa che io posso localizzare solo 16 locazioni di memoria. Quindi questo tipo di istruzione ha un enorme limitazione dal punto di vista dell'indirizzamento. Una soluzione potrebbe essere quella di aumentare i bit dedicati all'istruzione aumenta la numerosità delle operazioni elementari e aumenta la capacità di indirizzamento. Un'altra soluzione è quella di ridurre il numero di indirizzi da dare. Es un istruzione che invece di avere 3 indirizzi 2 operandi e un risultato, potrei dire di scrivere il risultato sempre in una parte prefissata in questo caso non ho bisogno di dargli l'indirizzo. Il risultato lo scriviamo in uno dei due posti che contengono i dati ad esempio lo scriviamo nel posto in cui c'é il primo dato: 2 x 3 ognuno avrà un suo indirizzo, viene fatto il prodotto che poi viene scritto nell'indirizzo di 2 cioè 1000. L'operazione 6 + 7 coinvolgerà l'indirizzo 1000 che contiene il risultato dell'operazione precedente, e il 7. Il risultato totale comparirà nella locazione del primo operando all'indirizzo 1000. Lo svantaggio di quest'ultimo metodo è che i dati strada facendo si perdono. Se avessi bisogno dei dati in seguito dovrò effettuare dei salvataggi. Oggi potendo avere istruzioni a 32 o 64 bit non sorgono problemi di indirizzamento. L'istruzione sarà sempre costituita da un codice e gli indirizzi degli operandi. Dei due dati uno è libero e io dico l'indirizzo l'altro dato deve risiedere in una locazione predefinita. Per fare una somma o un prodotto ora dovrò fare due operazioni una di salvataggio del dato e poi l'operazione effettiva di calcolo. Allora nell'esecuzione di un programma indicheremo prima di tutto di copiare la locazione che contiene ad es. il dato 2 in un altra locazione chiamata registro poi facciamo la moltiplicazione del contenuto della locazione 1001 che è 3 quest'ultimo sarà moltiplicato con quello che sta nel registro quindi con 2. Il risultato di questo prodotto finirà nel registro che quindi non conterrà più 2 ma 6. L'utima operazione consiste nel sommare il contenuto del registro con 7. Vi sarà un'istruzione in cui si preleva il dato dal registro e si scrive nella memoria il risultato della locazione. (pag. 161). I limiti della programmazione in linguaggio macchina • scarsa interpretabilità poiché devo associare codici numerici a determinate operazioni 16
    • Appunti d’esame Il computer www.profland.135.it • le istruzioni utilizzano indirizzi, le formule sono invece espresse con dei simboli non con degli indirizzi numerici • numero di operazioni elementari molto elevato (scarsa potenza del linguaggio) • riferimento a tipi di dati differenti (es interi o Floating Point) Dati questi limiti si attuano dei correttivi tra cui il più immediato è quello di sostituire i caratteri binari con dei caratteri a noi più familiari (es posso chiamare un casella a senza necessità di ricordare il suo indirizzo. L'istruzione sarà del tipo MPY moltiplica il contenuto di una locazione ideale che io chiamo A ed il contenuto di una locazione ideale che io chiamo B. (es. pag.165). Ancora potrò dare l'istruzione di moltiplicare A e B e di mettere il risultato in A, quindi dico somma A e C. (istruzione a 2 indirizzi) Potrò inoltre dare un istruzione ad 1 indirizzo del tipo: carica nel registro il dato A moltiplicalo con B, sommagli C e quindi salvalo in S. Si ha in questo caso un modo più semplice di scrivere un'istruzione: un nome mnemonico al posto del codice operativo, un nome simbolico al posto dell'indirizzo dell'operando. Quando facciamo questo abbiamo costruito un linguaggio che chiameremo: Linguaggio assembler Tale linguaggio ovviamente non è compreso dalla macchina occorrerà quindi un programma che traduca l'assembler in linguaggio binario e poi sarà necessario gestire gli indirizzi. Io invento le lettere A, B, C, e lui assegnerà a queste lettere degli indirizzi. Dobbiamo disporre quindi di una programma che sia capace di prendere in input il linguaggio assembler e di tradurlo in binario. L'elaboratore sarà sempre affiancato da un programma di base che mi permette di utilizzarlo in maniera più efficiente. Elaboratore e programmi assemblatori costituiscono quella che chiamiamo la macchina virtuale. (pag .168). MACCHINA FISICA calcolatore che mette a disposizione solo le potenzialità del suo hardware e del suo linguaggio macchina MACCHINA VIRTUALE macchina fisica + insieme di programmi (software) che sfruttano le potenzialità della macchina fisica. Il programma Assembler è formato da tante righe quante sono le istruzioni in linguaggio macchina. Quindi noi chiediamo di poter esprimere un messaggio umano che comunichi un contenuto che si traduce più ampio. Posso dunque intervenire sulla capacità di comprensione chiedendo se è possibile di avere delle istruzioni umane più potenti. 17
    • Appunti d’esame Il computer www.profland.135.it Ho sostituito i caratteri binari in caratteri alfanumerici a me facilmente comprensibili, ma ho bisogno inoltre di avere delle istruzioni umane più potenti in cui con un solo comando io gli faccio fare più cose. Il secondo passo evolutivo è quello di costruire: Linguaggio di programmazione ad alto livello • più potente del linguaggio macchina (dietro un istruzione vi sarà un numero elevato di istruzioni in linguaggio macchina). • più vicino al linguaggio naturale • formalmente definito Esistono numerosi linguaggi ad alto livello ognuno dei quali è specializzato in varie cose. Inizialmente c'erano quelli di tipo calcolo scientifico e quelli di tipo gestione dei dati commerciale poi le periferiche di input output del Computer si sono fortemente arricchite, le capacità di interazione sono aumentate e i linguaggi si sono via via evoluti e specializzati. L'errore che talvolta viene commesso è quello di cercare di usare un linguaggio non appropriato per risolvere un problema che una altro linguaggio farebbe meglio. I linguaggi più diffusi sono: Fortran, C, C++, Pascal, Basic, Orcle, Progress, Matlab, Java. Il passaggio tra un linguaggio ad alto livello e il linguaggio macchina è reso possibile mediante l'uso di Programmi Traduttori. Il programma traduttore è molto più complesso di un programma assemblatore. Esistono due tipi di traduttori: Interpreti e compilatori. L'interprete • Prende in input contemporaneamente un'istruzione di un programma a.l. ed i dati ad essa relativi. Capisce le istruzioni le traduce in linguaggio macchina acquisisce i dati e le risolve. • Fornisce in output direttamente il risultato dell'esecuzione dell'istruzione Il concetto compilativo presenta invece due fasi FASE 1 Il Compilatore • prende in input un programma in linguaggio a.l. • Fornisce in output un programma in linguaggio macchina. FASE 2 Il programma in linguaggio macchina, a cui sono forniti in input i dati, viene esguito e fornisce in output i risultati. VANTAGGI E SVANTAGGI Compilatore 18
    • Appunti d’esame Il computer www.profland.135.it le fasi di compilazione ed esecuzione sono logicamente e temporalmente distinte. Il compilatore è più efficiente perché richiede un tempo minore per la risoluzione del problema. Utilizzerò il compilatore quando ho un prodotto consolidato, la strategia è sicura faccio la traduzione e poi naturalmente userò soltanto il prodotto Traduce globalmente assemblando macro istruzioni e poi lo rilegge nella sua globalità e lo ottimizza cosa che l'interprete non può fare. (il Fortran è il compilatore scientifico più utilizzato). L’interprete Se io sto facendo un programma e questo programma contiene un errore io lo devo rifare ritradurlo e poi rilanciarlo cosa che per l'interprete avviene automaticamente. Il programma in linguaggio a.l. è costantemente sotto il controllo dell'interprete (più flessibile). Viene solitamente utilizzato l'interprete nelle fasi in cui devo fare parecchi interventi quindi tipicamente nelle fasi progettuali. Sono interpretativi la maggior parte dei linguaggi di sperimentazione. L'interprete traduce frase per frase. Tutti i linguaggi di programmazione devono avere delle definizioni rigorose e precise, devono essere scritti esclusivamente utilizzando alcune parole, alcuni simboli. I sistemi operativi Sono programmi per il funzionamento minimale di una macchina. Inzialmente i PC utilizzavano le valvole, successivamente si passò ai transistor enormemente più piccoli mantenendo le stesse capacità o anche aumentandole e poi si è passati al circuito integrato che contiene un certo numero di transitor. Lo schema dei calcolatori attuali rispecchia quello della macchina di Von Neumann (pag. 418). Le capacità di memoria di un computer sono vincolate dalla presenza di un campo elettrico che se è assente il computer non contiene niente, senza dati in memoria il computer non può funzionare. Vediamo di ripercorrere i passi logici per poter risolvere un probelma, esso deve essere analizzato, si costruisce un linguaggio e si prepara il problema utilizzando questo linguaggio. Anni 40 I passi erano: 1. preparare il programma in linguaggio macchina 2. memorizzare istruzioni e dati 3. fare eseguire il programma 4. estrarre il risultato dalla memoria 19
    • Appunti d’esame Il computer www.profland.135.it Il programma veniva scritto su un supporto esterno al computer che poi il computer potesse leggere. Uno dei primi strumenti che hanno permesso di immettere dati ne computer sono le schede perforate. I buchi che venivano fatti in verticale corrispondevano alla presenza di zeri e uno. Ogni stringhetta rappresentava un carattere. Si aveva la necessità di memorizzare questi dati cosa che può avvenire solo dando istruzioni al computer. Devo dare istruzione al computer di caricare le schede e necessario disporre di un programma che sia già in memoria che insegni al computer come caricare le schede (loader). Il risultato veniva scritto su altre schede. Come si fa a caricare il loader? Un computer per essere acceso necessita di un processo di inizializzazione. In passato il loader veniva caricato a mano scrivendo a mano una serie di zeri e uno utilizzando una serie di interruttori all'esterno del PC. Lo schema era costituito dal nostro programma, dai dati del nostro programma, il loader. Vi era un comando di start up che faceva leggere il loader che poi permetteva la lettura degli altri programmi. Già all'epoca si era sviluppata l'idea di programmi di utlità generale che servissero a tutte le persone: il software di base di un computer il loader e in un certo senso il precursore dell'attuale sistema operativo. Fine anni 50 Furono poi introdotti i linguaggi ad alto livello e si avvertì la necessità di programmi traduttori che si trovano su schede. Quando lancio il programma scritto su schede dell'utente ad alto livello precedentemente dovrò caricare nella macchina un programma su schede che traduce il primo. (pag. 429) I risultati erano costituiti dal programma tradotto in linguaggio macchina che veniva scaricato su schede. Questo programma in linguaggio macchina veniva rimesso in memoria con i dati che servivano. La logica che veniva usata era di tipo compilativo davo un pacchetto in linguaggio ad alto livello ricevevo in cambio un pacchetto in linguaggio macchina. In caso di errore si doveva correggere la scheda in linguaggio ad alto livello che noi ritenevamo sbagliata rilanciare li processo ed ottenere un altro pacchetto in linguaggio macchina. Il sistema operativo è dunque costituito da un caricatore e da un programma traduttore (pag 430) essi rappresentano l'hardware. Inzialmente vi erano solo le schede perforate come unità di input/output poi fu introdotta la stampante solo successivamente il monitor e la tastiera. Ora sorge un problema la macchina ha una sua velocità interna di natura elettronica, quando interagisce con l'esterno opera con stampanti e tastiere che sono unità di tipo elettro-meccaniche che sono molto più lente delle precedenti. Il probelma è la differenza di velocità operativa tra due oggetti, vi sono operazioni che sono incredibilmente più lente rispetto alle altre, quando vengono eseguite il computer perde tempo. Noi vogliamo che la macchina lavori al massimo delle sue prestazioni cioè vogliamo che il processore svolga sempre qualche cosa. 20
    • Appunti d’esame Il computer www.profland.135.it Mentre viene eseguita l'istruzione di stampa la CPU resta inattiva (pag. 431). Tale processo non è efficiente. Se io lancio solo il comando di stampa alla quale ci pensa poi la stampante e la CPU nel frattempo può riprendere le sue funzioni il processo diventa più efficiente. L'idea è stata quindi quella di introdurre qualcosa che potesse gestire le unità di input/output senza l'intervento diretto dell'unità di controllo. Questo dipositivo aggiuntivo per controllare esclusivamente le operazioni di I/O prende il nome di CANALE di I/O. Il canale può essere visto come un calcolatore indipendente dalla CPU che provvede a gestire il programma utente. Esso si occuperà dell'eventuale conversione di codici, del controllo sulla quantità dei dati da memorizzare, dell'indirizzamento delle varie unità di I/O. Il canale gestisce di solito più unità di I/O due sono i tipi di gestione: • mediante bus (un'ulteriore interfaccia tra il canale e le unità di I/O (pag. 436) • mediante gestione a stella, il canale parla direttamente con l'unità. I PC operano in genere con la logica del bus. La gestione a stella è più efficiente rispetto a quella bus perchè il canale parla direttamente con le singole unità di I/O. Se la comunicazione è diretta significa che io avrò un certo numero di uscite specializzate che non posso aumentare, la soluzione è quindi molto rigida. Invece nell'altro tipo di gestione l'unità si attacca per il tramite di un bus che è un'interfaccia con una tecnologia molto più bassa che mi consente di avere un numero molto elevato di unità di collegamento. Quindi la tecnologia a stella è più efficiente perché il canale parla direttamente con le unità di I/O ma è più limitativa, la tecnologia di bus è meno efficiente ma molto più flessibile. In una macchina in cui vi possono potenzialmente essere più unità di I/O la filosofia più razionale è quella del bus, in una macchina specializzata che ha un unico output userò la tecnologia a stella. Il sistema operativo risulta quindi costituito da: • programma caricatore • programma traduttore • programma per la gestione dell'I/O • programma per la sincronizzazione tra CPU e canale ANNI '60 L'idea del canale è stata una buona idea ma non risolve il problema di esecuzione contemporanea di più programmi. Se la CPU resta momentaneamente inattiva poichè sul prog. 1 sta intervenendo un'altra unità, essa potrà intanto operare su un altro programma, si ha così un uso efficiente della CPU. Nasce dunque la multiprogrammazione (pag. 438) cioè la capacità del sistema operativo di far condividere a più programmi l'uso della CPU. quando un programma effettua una operazione di I/O, l'uso della CPU passa ad un altro programma, i programmi in coda 21
    • Appunti d’esame Il computer www.profland.135.it attendono lunghi periodi di tempo nell'attesa dell'istuzione di I/O del programma che sta utilizzando la CPU. Time Sharing Il processo mediante il quale passiamo da un programma a un'altro richiede una strategia dunque ci dovrà essere nel calcolatore un programma che gestisce questa filosofia con un certo criterio. Nasce la filosofia di gestire il tempo con cui i programmi stanno in memoria ad ogni programma viene assegnato un tempo massimo di utlizzo della CPU (time slice) la filosofia attuale è quella del Time Sharing. Ogni programma può utilizzare la CPU finché non si verifica una delle seguenti condizioni: 1. il programma finisce 2. il programma va in errore (divisione per zero, overflow...) 3. è richiesta una operazione di I/O 4. è terminato il tempo assegnato Casi 1 e 2: il programma è eliminato dalla memoria Casi 3 e 4: il programma è sospeso (viene mantenuto nella memoria) Il mantenimento di un programma in memoria potrebbe essere costoso se questo è di elevate dimensioni conviene quindi scaricarlo da qualche altra parte in attesa che venga ripreso. Lo Scheduler Per decidere quale programma passare in memoria quando diversi programmi sono in attesa, bisogna stabilire un ordine di accesso alla CPU. Si dovrà dunque disporre di un programma che stabilisca quest'ordine, cioè lo scheduler. Lo Scheduler per decidere la priorità si basa su diversi fattori: • memoria richesta dai programmi • tempo di CPU richiesto dai programmi • tipo del programma (di utente o di sistema) • tipo di utente (qualunque o gestore del sistema) • uso recente della CPU Lo scheduler assegna ad ogni programma un numero che determina il criterio di precedenza nell'utilizzo della CPU. Hanno priorità più alta i programmi che richiedono poca memoria e poco tempo di CPU. I programmi di sistema hanno priorità più alta rispetto a quelli di utente. Un SISTEMA OPERATIVO è l'insieme dei programmi che consentono il controllo e la gestione di tutte le risorse del calcolatore Hardware + sistema operativo (software) = macchina virtuale. 22
    • Appunti d’esame Il computer www.profland.135.it Evoluzione della memoria (pag. 454) Buona parte della memoria centrale è occupata da un certo numero di programmi del sistema operativo. L'evoluzione dei sitemi operativi comporta l'uso di memorie che sono sempre più ampie. La memoria del computer ha uno spazio fortemente limitato rispetto a quelle che sono le nostre necessità. La memoria centrale è quella che contiene effettivamente il programma, solo se è contenuto in essa quest'ultimo può essere eseguito. Esistono altre memorie aggintive abilitate a contenere dati storici. I programmi che non posso essere memorizzati in memoria centrale vengono memorizzati nella memoria di massa o ausiliaria. Le memorie di massa hanno un minor costo rispetto alla centrale, maggiore capacità ma più lento tempo di accesso, e sono stabili. Sono costituite da dischi e nastri magnetici. La CPU non può manipolare informazioni direttamente dalla memoria di amssa. Queste devono essere prima trasferite in memoria centrale; si ha quindi la necessità programma che consenta il trasferimento dei dati dalla memoria di massa alla memoria centrale. Poché l'hard disk ha delle capacità molto elevate potrebbe anche contenere programmi che non entrano in memoria centrale in tal caso quel programma non può essere eseguito. Non ho bisogno di caricare tutto il programma affinché esso possa essere eseguito ma lo posso suddividere in blocchi (pagine) per tenere in memoria solo l'istruzione in esecuzione. (pag. 458) I programmi entrano ed escono continuamente dalla memoria, si ha dunque la necessità di programmi per la gestione automatica dello scambio di informazioni tra memoria centrale e memoria ausiliaria (memoria virtuale) Il termine memoria virtuale sta ad indicare che i computer possono andare oltre le loro capacità intrinseche di memoria. Vi deve essere un legame tra la memoria virtuale e quella reale. Se la memoria reale è piccola questo meccanismo di passaggio (paging) deve essere molto frequente ciò rallenta le funzioni del sistema. Le prestazioni di una macchina dipendono da quanta memoria centrale poiché in relazione alle sue dimensioni il paging sarà più o meno frequente. Anche il disco è in grado di influenzare il paging, se il disco è lento lo sarà anche il paging. Il software del computer risiede in una struttura esterna che abbiamo genericamente chiamato memoria di massa. Ogni sistema operativo organizza il proprio archivio in un certo modo creando il file sistem. Col termine file noi indichiamo un insieme di informazioni del computer. Ciò che distingue i file è l'end of file cioè un segnale di fine. Ad ogni file noi daremo un nome che ci permetterà di identificarlo. Ma non basta assegnare dei nomi soltanto occorre fissare delle regole di organizzazione. L'organizzazione è articolata in gruppi, se il gruppo è molto numeroso potrei suddividerlo in sottogruppi, si ha dunque una struttura gerarchica o ad albero. I nomi devono essere assegnati anche ai sottogruppi. I sottogruppi vengono chiamati cartelle. 23
    • Appunti d’esame Il computer www.profland.135.it Una cartella può contenere oggetti o eventualmente altre cartelle. Nel file sistem la nomenclatura segue la logica posizionale, il nome vale per dove sta. Si associa al nome l'intera percorrenza dalla radice sino al file. Ad esempio se ho due file chiamati entrambe B, ma il secondo è contenuto nella 1, quest'ultimo è denominato 1B. I file oltre ad avere un nome, avranno anche un titolo ciò permette di codificarli. Il titolo si può attribuire in due modi: • I nomi per i file non sono liberi (i file Fortran saranno preceduti da una F, gli assembler da una A) tale metodo è complicato e poco flessibile. • I nomi sono liberi, ma ad essi verrà affiancato un titolo (estensione). I programmi possono essere a seconda del tipo essere suddivisi in due parti: • una parte residente in memoria centrale contenete i programmi che devono essere utilizzati da tutti i programmi in esecuzione. • una parte residente in memoria di massa che contiene i programmi che non devono essere mandati immediatamente in esecuzione dopo l'accensione. Questa parte principale prende il nome di Kernel. Il kernel del sistema operativo è l'insieme dei programmi che risiedono permanentemente in memoria centrale (cioé vengono caricati al momento dell'accenzione oltre ai gestori della memoria e della CPU) appartengono generalemete al Kernel i programmi per la gestione di: • I/O • situazioni speciali (accensione, spegnimento, accesso via rete, malfunzionamenti) • scambio di informazioni tra memoria centrale e memorie ausiliarie. La memoria centrale deve contenere almeno il programma che consenta di far partire la macchina. Negli anni quaranta questo programma veniva caricato a mano. Attualmente tali comandi vengono scritti in una terza memoria classificabile come memoria centrale poiché deve essere di tipo operativo, la quale deve avere la caratteristica teconolgica di non cancellarsi. Si tratta di istruzioni che permettono di innescare il processo di caricamento del Kernel. La memoria centrale è dunque divisa in due parti di cui una necessariamente non volatile nella quale vengono scritte le informazioni di partenza. ROM = read only memory memoria di sola lettura che contiene informazioni inserite al momento della costruzione ed il cui contenuto non si perde se si spegne il computer (memoria non volatile) 24
    • Appunti d’esame Il computer www.profland.135.it RAM = random access memory significa memoria di accesso diretto nel senso che ogni locazione di memoria può essere raggiunta indipendente mente dagl'altri. Quindi la memoria dal punto di vista logico non è di tipo sequenziale. inoltre fanno parte della memoria centrale particolari memorie di capacità ridotta ma ad accesso molto rapido: i registri che fanno parte dell'unità logico aritmentica che oggi è parte della CPU. La CPU ha una sua memoria che conterrà i dati che sono in esecuzione. Inoltre poiché le strutture operative hanno velocità diverse è inevitabile che si venga a creare una sturuttura intermedia che attenui le differenze di velocità si hanno così le memorie cache che si collocano tra la Ram e la CPU e sono caratterizzate da una maggiore velocità. 25