Un sistema per l’elaborazione dell’informazione consiste di due componenti : l’hardware ed il software Si può parlare di una macchina reale, che è costituita dall’hardware e di una macchine virtuali costituite dalla macchina reale + software. La macchina reale esplica le funzioni fondamentali del sistema di elaborazione. Essa è in grado di effettuare un grande numero di operazioni elementari in tempi molto ridotti rispetto a quelli umani La macchina reale è programmabile esclusivamente in linguaggio macchina ed è, pertanto, molto scomoda da utilizzare direttamente: infatti, la programmazione in linguaggio macchina è ardua e poco efficace. E’ difficile adattare la logica sintetica del pensiero umano a quella analitica ed elementare della macchina reale. Le difficoltà maggiori: - è necessario pianificare accuratamente l’impiego della memoria; - i codici operativi vanno riferiti utilizzando il formalismo rigoroso della macchina; -bisogna gestire programmi di notevole complessità, composti da un elevatissimo numero di istruzioni elementari, con conseguente elevato rischio di commettere errori; - un programma realizzato in linguaggio macchina non funzionerà su hardware diverso da quello utilizzato per la sua stesura Per superare queste difficoltà si realizzano degli strati di software che vanno a ricoprire la macchina reale. macchina reale + software--->macchina virtuale Software: - Software di base: Insieme di programmi necessari per lo stesso funzionamento del sistema che costituiscono macchine virtuali di basso livello. -Software applicativo: Programmi orientati alla risoluzione di problemi specifici utilizzati direttamente dall’utente finale. Le macchine virtuali sono orientate alla rappresentazione più efficace (cioè più vicina all’uomo) di problemi specifici da risolvere. La macchina reale è invece ciò fisicamente possibile la soluzione. che rende Schema macchine virtuali ad alto livello Richiedono grandi quantità di risorse (memoria e tempo di calcolo) Le macchine virtuali di livello più basso (e quindi dal software di base) comprendono la gestione delle periferiche e la possibilità di programmare impiegando linguaggi simbolici Linguaggi di programmazione: - Linguaggio macchina - Assemblatori - Compilatori e interpreti Linguaggio macchina Forma espressiva per descrivere programmi di elaborazione direttamente interpretabili dall’unità di controllo della CPU. Le tipiche operazioni elementari : - spostamento dei dati fra due indirizzi di memoria, fra registri o fra memoria e registri. Es.:MOV. LD - operazioni aritmetico-logiche di vario tipo tra gli operandi ES. ADD, SUB, INC, DEC, OR, AND. - trasferimento di controllo (“salto”) a un’istruzione che non sia la prossima. ES. JMP, BRA, CALL, RTS. - valutazione di una condizione, con salto condizionato al verificarsi o meno di essa. ES. JNZ, DBRZ, RTZ. - istruzioni per gestire condizioni particolari che possono verificarsi. Es. HALT, TRAP, INT. Il formato e la lunghezza in bit di un’istruzione in linguaggio macchina dipende dal sistema elaborativo, dal tipo di istruzione, da quanti operandi ha e di che tipo sono. Esempio di istruzione di linguaggio macchina Il campo OPCODE (codice operativo) occupa 8 bit (24-31) e specifica il tipo di istruzione (JMP, INC). Il campo FLAGS occupa 4 bit (20-23) specifica informazioni ausiliarie che variano con il tipo di istruzione (per es. il riporto di una precedente addizione). In questo caso si tratta di un’istruzione con un solo operando (un indirizzo di memoria o il numero di un registro ), che viene specificato dal campo OP1 nei 20 bit (0-19). 31 24 23 0 20 19 OPCODE OP1 FLAGS Istruzione in linguaggio macchina Un’istruzione che specifica due indirizzi di memoria avrebbe 20 bit in più. Assemblatori Il linguaggio assemblativo (assembly language) rappresenta il primo passo verso la semplificazione della programmazione. L’operatore esprime il proprio programma in linguaggio assemblativo, dopodichè un programma (l’assemblatore) traduce le istruzioni in linguaggio macchina, producendo così un programma che è equivalente al primo, ma espresso in una forma utilizzabile direttamente dalla macchina reale. Il linguaggio assembly è un linguaggio simbolico I compiti dell’assemblatore sono: -assegnare automaticamente gli indirizzi a dati e istruzioni; - tradurre i nomi simbolici in indirizzi e valori; - trasformare le istruzioni dalla forma simbolica a quella binaria. L’assemblatore è un particolare tipo di programma per i quale i dati di ingresso e di uscita sono altri programmi. I programmi che, come l’assemblatore, effettuano la traduzione da un linguaggio a un altro sono detti traduttori. Esempio di traduzione del linguaggio assembly: Consideriamo un’istruzione che fa riferimento a un dato in memoria. Supponiamo di avere una locazione di memoria (all’indirizzo 1200) che contiene il numero di pazienti in clinica in un certo istante . Quando un paziente viene dimesso questo numero deve essere decrementato. In linguaggio assembly questo potrebbe essere effettuato con le seguenti istruzioni: PAZIENTI EQU 1200 DEC PAZIENTI La prima istruzione è una direttiva, cioè dice all’assemblatore che il simbolo PAZIENTI si riferisce all’indirizzo 1200. La seconda è una vera e propria istruzione per la macchina reale. Questa istruzione in linguaggio macchina si traduce: opcode flags op1 00011110 0001 00000000010010110000 Abbiamo assunto che l’istruzione DEC (decremento) sia rappresentata dall’opcode 3010=111102. Il valore flags=1 indica che il decremento va effettuato su un indirizzo di RAM e non su un registro di CPU. Il linguaggio assembly, come il linguaggio macchina, riflette l’architettura interna del processore utilizzato. Quindi - ogni CPU ha il proprio linguaggio assemblativo; - programmare in linguaggio assemblativo implica la conoscenza della struttura logico-circuitale del processore target (numero di registri, spazio degli indirizzi ..) -un programma scritto il linguaggio assemblativo può essere impiegato sul processore target; -se si eccettuano le direttive 8che non sono vere istruzioni macchina, ma servono solo ad istruire l’assemblatore su come procedere) esiste una corrispondenza 1:1 tra le istruzioni del programma in linguaggio assemblativo e il programma tradotto in linguaggio macchina. Linguaggi ad alto livello Precisamente per programmare in un linguaggio ad alto livello non è necessario conoscere la macchina reale: lo stesso programma può girare su macchine diverse. Questi linguaggi sono caratterizzati da istruzioni molto sintetiche. La traduzione da questi linguaggi al linguaggio macchina non è più 1:1: infatti, ad ogni istruzione di alto livello corrispondono molte istruzioni macchina. Un traduttore per un linguaggio ad alto livello ha gli stessi compiti di un assemblatore più altri: - riconoscere le strutture sintattiche che specificano cicli iterativi, esecuzione condizionale di istruzioni, richiamo di sottoprogrammi; -applicare le opportune precedenze nelle espressioni numeriche, -allocare la memoria necessaria per contenere i dati; liberare quella che non è più necessaria; Due tipi di programmi di traduzione da un linguaggio ad alto livello in linguaggio macchina: Compilatori ed Interpreti Compilatore Questo programma prende in input il programma scritto nel linguaggio ad alto livello (codice sorgente) e produce in output un programma equivalente scritto in linguaggio macchina (codice oggetto). Il programma oggetto risultante viene conservato in un file e può successivamente essere eseguito in qualsiasi momento. ASCII è il più diffuso codice alfanumerico. Codifica ogni carattere in un byte di cui vengono utilizzati solo 7 bit (lasciando il bit 27) sempre pari a zero. Pertanto il codice ASCII comprende 27=128 caratteri e non 256. Alcuni compilatori non producono un file binario contenente il programma in linguaggio macchina, ma piuttosto scrivono un file ASCII che contiene il programma in assembly. E’ poi l’assemblatore a trasformare quest’ultimo nel codice binario eseguibile. Interprete Nel caso dell’interprete il programma sorgente non viene tradotto tutto insieme: infatti, l’interprete traduce un’istruzione sorgente alla volta e il codice oggetto risultante viene eseguito immediatamente, invece di essere conservato in un file. Differenze: -nel caso di un compilatore la traduzione viene effettuata una volta per tutte; in questo caso il codice oggetto che viene ottenuto come risultato non contiene più traccia del compilatore utilizzato né ha più bisogno di questo. - nel caso dell’interprete ogni esecuzione del programma richiederà la presenza dell’interprete che effettui la traduzione. Ma …… -l’esecuzione interattiva tipica dell’interprete permette di individuare gli errori mentre l’interprete è ancora in esecuzione; -la progettazione e la realizzazione di un interprete è più semplice di quella di un compilatore. Linguaggi di programmazione ad alto livello: Basic: è di facile apprendimento, semplifica la programmazione per i principianti. In origine non molto strutturato. Pascal: si tratta di un linguaggio altamente strutturato, che rappresenta un valido strumento didattico. Fortran: adatto alla risoluzione di problemi numerici di tipo scientifico. Cobol: utilizzato in applicazioni amministrative e gestionali. C: nato per la realizzazione del software di base. HTML: linguaggio adatto a combinare testo e grafica in un ipertesto (usato per la creazione di pagine Web). PostScript: linguaggio per la descrizione grafica di pagine contenenti testo ed immagini. Esso risiede in molte stampanti laser. Fasi di sviluppo di un Programma Dato un problema da risolvere: 1) Scelta del metodo risolutivo e rappresentazione mediante un algoritmo. 2) Rappresentazione dell’algoritmo nel linguaggio di programmazione scelto (ad esempio, Pascal): si ottiene il programma in forma sorgente. La fase di scrittura del programma viene normalmente detta di editing. 3) compilazione. Il programma sorgente prodotto nella fase di editing viene tradotto dal compilatore in linguaggio macchina (programma eseguibile). La fase di compilazione può rilevare eventuali errori (sintattici). 4) debugging. Analisi del corretto funzionamento del programma. Può essere eseguita da speciali programmi detti debugger, che permettono l’esecuzione controllata del programma. (Ad es. esecuzione di una istruzione alla volta, visualizzazione dei valori di variabili e punti di arresto) 5) esecuzione. Quando il programma è stato verificato, può essere eseguito per la risoluzione del problema di partenza Il software applicativo risolve i problemi specifici richiesti dall’utente. Il software di base gestisce e controlla il funzionamento stesso del sistema elaborativo fornendo al programmatore ed all’utente delle astrazioni che hanno lo scopo di nascondere i complicati dettagli sottostanti. Il sistema operativo È una collezione di moduli software che gestiscono le risorse hardware e software e controllano lo svolgimento delle diverse procedure di elaborazione. Le macchine virtuali di livello più basso sono tutte realizzate da moduli di sistema operativo. Fra i vari moduli c’è un supervisore o kernel che risiede stabilmente in memoria centrale,ossia viene caricato una tantum all’atto dell’accensione del sistema. Gli altri moduli, residenti in memoria di massa, vengono richiamati dal supervisore e caricati in memoria centrale quando devono svolgere i compiti specifici di loro competenza I compiti del sistema operativo: 1. Gestione delle risorse disponibili Ogni sistema elaborativo consiste di un processore, memoria centrale, schermo, interfacce, stampanti, tastiera, mouse. Il S.O. deve fare in modo che le richieste per accedere a tali risorse vengano servite in maniera ottimale (come l’esecuzione di vari programmi, le code di stampa, l’accesso ai file su disco..) 2. Gestione delle periferiche Per ogni periferica presente nel sistema operativo ha un modulo chiamato driver. I driver di periferica sono programmi specializzati nel tradurre richieste formulate dall’utente in una forma comprensibile dalla periferica. (Es. Driver per una stampante) 3. Controllo dell’esecuzione dei programmi Quando si ci propone di eseguire un programma, esso risiede in memoria di massa; ma sappiamo che per essere eseguito deve trovarsi in memoria centrale. Viene avviato un modulo di S.O. chiamato loader, che si occupa di copiare il programma dalla memoria di massa nella RAM. 4. Interazione con l’utente Uno dei moduli all’interno del S.O è l’interprete di comandi, anche detto shell. Esso è un interprete che risponde i comandi forniti dall’utente tramite la tastiera o il mouse e li traduce uno ad uno in comandi di livello più basso che portino a termine le azioni specificate dall’utente. Esempio: 1. La shell di MS-DOS con comandi quali DIR, per listare i file contenuti in una directory, o COPY, per copiare i file (shell che ricevono i comandi in forma testuale). 2. Alcune shell interpretano gesti compiuti dall’utente mediante il mouse o altri dispositivi di puntamento (shell visuale in Windows) (a) Monoprogrammazione, monoutenza: il sistema serve un solo utente per volta ed è in grado di eseguire un solo programma per volta (b) Multiprogrammazione, monoutenza: il sistema serve un solo utente per volta ed è in grado di eseguire più programmi contemporaneamente. (c) Multiprogrammazione, multiutenza: (a) (b) (c) INPUT ELABORAZIONE OUTPUT INPUT ELABORAZIONE OUTPUT INPUT ELABORAZIONE OUTPUT INPUT ELABORAZIONE OUTPUT UTENTE 1 UTENTE 2 UTENTE 3 UTENTE 4 UTENTE 5 UTENTE 6 Multiprogrammazione, multiutenza:serve più utenti contemporaneamente. Il S.O. impiega una tecnica basata sulla suddivisione del tempo macchina detta time sharing per assegnare le risorse del sistema ai vari utenti. Ogni utente ha l’impressione di avere la CPU interamente a propria disposizione, mentre quello che succede è che la CPU passa rapidamente da un processo all’altro. Fig III.9 I sistemi operativi più diffusi: MS-DOS Questo S.O. viene caricato da disco, invece, di risiedere in ROM. Esso implementa la monoprogrammazione per singolo utente, con delle limitatissime capacità di multiprogrammazione. Windows Inizialmente non si trattava di un sistema operativo ma di un programma applicativo che aggiungeva al sistema operativo (MS-DOS) una macchina virtuale di alto livello nella quale far girare altro software applicativo. Oggi è il più diffuso S.O. ed implementa la multiprogrammazione in monoutenza e permette la condivisione di risorse fra elaboratori connessi in rete. Unix Fu il primo sistema operativo ad essere scritto quasi interamente in un linguaggio ad alto livello (il C). Unix permette la multiprogrammazione e multiutente; l’accesso al sistema è possibile anche attraverso terminali remoti. Sistemi operativi: interfacce Interfacce testuali: le operazioni vengono compiute scrivendo dei comandi su una riga dello schermo (riga di comando). Esempio per il sistema operativo MS-DOS dove il prompt è del tipo: C:\> Interfacce grafiche: le operazioni vengono compiute selezionando oggetti grafici mediante l’utilizzo del mouse. Point and click: si porta il puntatore del mouse sull’oggetto e poi si preme uno dei tasti sul mouse. Interfacce intuitive: gli oggetti vengono rappresentati mediante disegni (icone) che ne richiamano la funzione. Finestre Mediante le finestre è possibile mandare in esecuzione ed interagire con più applicazioni contemporaneamente: - a ciascuna applicazione è riservata una finestra separata - ad ogni istante, ci sarà una sola finestra attiva corrispondente all’applicazione con la quale si sta interagendo - le finestre possono essere ridimensionate, spostate e chiuse. Elementi costitutivi delle finestre: - barra del titolo: consente di spostare, ridimensionare e chiudere le finestre - barra di menu: il menu consente di eseguire le operazioni offerte dall’applicazione - barra degli utensili: barra contenente le icone corrispondenti alle operazioni di più frequente impiego. Uso del mouse: Una volta posizionato il puntatore del mouse sopra una icona, possono essere eseguite le seguenti operazioni: Selezione: click con il tasto sinistro. Apertura: doppio click con il tasto sinistro. Le possibili operazione dipendono dall’oggetto: cartella: ne viene mostrato il contenuto; applicazione: viene lanciata; file di dati: viene lanciato il programma con cui è stato creato e il file viene aperto. Shortcut menu: click con il tasto destro. Viene mostrato il menu dipendente dall’oggetto e dall’applicazione. Barra delle applicazioni Si compone di tre parti: Menu Start: consente di eseguire le operazioni offerte dal sistema operativo; Bottoni delle applicazioni: quando una applicazione viene lanciata appare un bottone sulla barra; Area degli indicatori: mostra l’orario più le icone di alcune applicazioni. Menu Start: Programmi: applicazioni istallate su sistema, suddivise in sottogruppi; Impostazioni: consente di modificare le impostazioni della macchina; Trova: consente di cercare un file o una cartella; Esegui: consente di lanciare una applicazione mediante una riga di comando; Guida in linea: mostra informazioni di aiuto sul sistema operativo; Chiudi sessione: consente di spegnere la macchina; Il software applicativo Il software applicativo è l’insieme di programmi che concorrono all’implementazione di una macchina virtuale di altissimo livello che ha lo scopo di svolgere ben determinai compiti, specifici di una particolare applicazione. È il software utilizzato dall’utente finale per risolvere il problema specifico che gli interessa. Alcuni esempi: -scrittura di testi e documenti -realizzazione di disegni tecnici ed artistici -composizione di brani musicali -gestione della farmacia di un ospedale -gestione di un laboratorio di analisi cliniche -programmi di posta elettronica (E-mail) -programmi per la navigazione in Internet (Web Browser) Elaboratori di testi o word processor Potente strumento per la creazione, l’organizzazione e la conservazione di documenti. I vantaggi derivanti dall’uso dell’elaboratore: -possibilità di effettuare modifiche e correzioni “invisibili” sul testo -possibilità di conservare i test per riprenderli i un secondo tempo -possibilità di manipolare la parte tipografica di un testo modificando i tipi di carattere (font) e l’impaginazione o inserendo elementi grafici come tabelle, figure e diagrammi - possibilità di effettuare rapidamente ed automaticamente controlli ortografici e lessicali, con eventuale scelta di sinonimi. Tabelloni elettronici programma che manipola tabelle composte da righe e colonne di celle e le visualizza sullo schermo; le celle possono contenere dati numeriici, alfanumerici o formule matematiche. Basi di dati o database Un database è un archivio integrato di dati controllato da un sistema di gestione (detto DBMS - Data Base Management System). Le operazioni supportate da un DBMS sono: -creare archivi -memorizzare su disco o altra memoria i dati dell’archivio -aggiornare e modificare con facilità i dati inseriti -reperire le informazioni tramite interrogazioni (query) Esempi di database: -banca dati anagrafica del comune -banca dati dei donatori di sangue -banca dati di informazioni genetiche (DNA, proteine) - banca dati degli studenti iscritti all’università -sistema informativo ospedaliero (cartelle cliniche dei pazienti ricoverati, gestione posti-letto, gestione farmacia interna) Collegamenti fra sistemi elaborativi …. Un sistema per l’elaborazione dei dati può essere dislocato in un impianto singolo o può essere distribuito su vari laboratori. In quest’ultimo caso le varie unità sono interconnesse tramite una rete di trasmissione dati (rete). Rete locale (LAN) una rete di interconnessione di estensione limitata tipicamente all’ambito di un solo edificio, e che non attraverso suolo pubblico. Rete geografica una rete di interconnessione di estensione maggiore, che può coprire un’area cittadina (MAN, Metropolitan Area Network) o anche un territorio più vasto (Widea Area Network) Reti locali I vari componenti (sistemi completi o singole periferiche di rete) sono connessi mediante un cavo coassiale. Sia i sistemi sia le periferiche possono essere di natura e marca diversa, creando una rete eterogenea (ethernet), in cui tutte le risorse presenti sono utilizzabili da ciascuno dei punti di accesso alla rete. Un apposito insieme di programmi (software di rete) implementa una serie di macchine virtuali, che si occupano di gestire lo scambio di inf. secondo un preciso protocollo. Protocollo: insieme di regole che governano i dettagli tecnici dello scambio di informazioni. Il software di rete risolve anche gli eventuali conflitti (collisioni) dovuti alla richiesta contemporanea di accesso alla stessa risorsa da parte di due o più utenti della rete. Reti geografiche I sistemi, siti in località poste a distanza arbitraria tra loro, possono essere collegati mediante linea commutata o linea dedicata. • Una rete geografica può essere privata (banca, industria) o pubblica (università , enti di ricerca). • Più reti separate possono essere collegate mediante gateway. Poiché ciascuna delle reti collegate può avere un protocollo diverso, il gateway provvede all’opportuna conversione di protocollo al fine di garantire una corretta trasmissione delle informazioni. Linea commutata: modalità di collegamento che sfrutta la diffusione capillare di reti preesistenti, tipicamente la rete telefonica pubblica. Linea dedicata: si impiegano linee esclusivamente alla trasmissione di dati. dedicate Tutte le reti create da organizzazioni tecnicoscientifiche sono collegate tra loro, pervenendo così alla costituzione di una rete unica internazionale che tocca quasi tutti i paesi del mondo: Internet. Internet, Inter-network, cioè “reti fra reti”. Si definisce nodo, ogni sistema connesso in rete. La rete delle reti comprende al suo interno diversi protocolli, ognuno legato ad uno specifico servizio di rete. I principali sono: -Posta elettronica o E-mail: consente lo scambio di messaggi personali tra utenti dei nodi della rete. È possibile spedire solo messaggi contenenti testo (infatti l’invio di file binari non dà risultati garantiti) e, soprattutto, testi non più lunghi di 50-60 Kb. Importanza delle mailing list. -FTP (File Transfer Protocol): servizio di rete che consente di trasferire file da un nodo ad un altro. -Telnet (Teletype Network): è possibile effettuare procedure di elaborazione su un sistema remoto. -World Wide Web o WWW: ragnatela diffusa in tutto il mondo. In questa modalità di fruizione della rete, l’utente sfoglia un ipertesto suddiviso in pagine. All’interno di ciascuna pagina esistono degli oggetti chiamati link (parole o icone) che, se attivati, richiamano suoni, animazioni o altre pagine (scritte in HTML). Poiché il Web è un unico documento enorme per aiutare l’utente a ricercare informazioni specifiche, esistono diversi motori di ricerca (Web browser), che, una volta specificate alcune parole-chiave di nostro interesse, trovano un certo numero di pagine che contengono riferimenti a quelle parole. Indirizzi Internet Sono utilizzati per indicare indirizzi IP, indirizzi di posta elettronica e URL di pagine Web. Domain name: stringa di caratteri, intervallata da punti, che individua un nodo della rete.( FQDN) Esempio: sirio.acme.it - il nodo si trova in Italia (it) -il nodo sta in un sub-network che si chiama ‘acme’ (rete privata di un’aziena o di un’università) -Il computer che ci interessanel sub-network acme.it si chiama ‘sirio’. Indirizzi IP: i domain name, per poter essere compresi dalle macchine collegate, vengono tradotti in un formato costituito da 4 numeri separati da punti. Esempio: 192.9.18.1 La traduzione da indirizzo IP a FQDN si chiama name serving e richiede la consultazione di un enorme database che, a causa delle proprie dimensioni, è distribuito su tutta Internet invece di risiedere su un solo elaboratore. Indirizzi di posta elettronica: questo tipo di indirizzo oltre a specificare un nodo, deve anche specificare un utente di quel nodo. Il formato è utente @ host, dove host è il domain name del sistema utilizzato dal destinatario, mentre utente è il nome con cui il destinatario è conosciuto presso il suo sistema remoto. Negli indirizzi di posta elettronica non si usano l’ indirizzo IP al posto del FQDN. Indirizzi www: sono indirizzi di pagine Web e si dicono URL (Uniform Resource Locator). Il formato usato è prot://host/pathname dove -‘prot’ indica il protocollo da utilizzare (tipo http o ftp) -‘host’ è il domain name o l’indirizzo IP su cui risiede la pagina (tipo www) -‘pathname’ è il pathname del file che contiene la pagina.