Nota
Questi sono appunti presi a lezione da alcuni studenti e non sono stati ancora corretti. Essi rappresentano pertanto una traccia delle lezioni tenute durante il corso ma non devono essere considerati affidabili. Questi appunti rappresentano pertanto soltanto una indicazione degli argomenti trattati.
A. Giordano, 1 Dicembre 2012
Indice
- Introduzione: “Cenni storici sui calcolatori” pag. 2
- Il sistema operativo pag. 8
- Approfondimento pag. 11
- CPU/Microprocessori pag. 14
- Approfondimento pag. 20
- Dalla rete telefonica a quella dati pag. 22
- Esempi di reti pag. 23
- Audio e video nei calcolatori pag. 28
- Audio pag. 28
- Video pag. 29
- Internet: come funziona la rete pag. 32
- Approfondimento pag. 39
- Crittografia pag. 46
- Calcolatori su rete Ethernet pag. 48
- Approfondimento pag. 50
Introduzione: cenni storici sui calcolatori
I primi calcolatori erano macchine di dimensioni notevoli che avevano come obiettivo quello di risolvere calcoli complessi (anni 80’).
Come è noto, un qualunque fenomeno fisico o naturale è descrivibile mediante un’insieme di formule matematiche ovvero in un modello matematico di entità variabile e così facendo i problemi possono essere univocamente descritti e trattati da chiunque possa avere conoscenze matematiche.
Più il fenomeno è complesso o più lo si vuole descrivere in dettaglio e con minori approssimazioni, più diventa complicato il modello matematico e nasce quindi la necessità di disporre di uno strumento in grado di trattare il modello stesso: il calcolatore.
Fino agli anni 80’ i componenti degli elaboratori erano “tridimensionali” perché vi era la necessità di maneggiarli (prenderli, montarli ecc..), con il passare del tempo transistor e resistenze vengono stampati analogamente ad un processo fotografico: nascono i Circuiti Integrati VLSI (1974). Uno degli ultimi calcolatori “tridimensionali” famosi e cioè costruiti con componentistica non VLSI è il PDP11 della Società Digital. Verso il 1980 compare il primo personal computer.
Da questo momento i prezzi iniziano a calare in modo sempre più significativo e si entra nell’ottica di utilizzare il computer per innumerevoli altri compiti per i quali, nel passato, non ne sarebbe stato giustificato l’impiego.
Oggi i calcolatori sono praticamente presenti dappertutto.
Gli schemi di principio e di funzionamento di base di un calcolatore degli anni 80’ e di uno di oggi sono praticamente gli stessi e possono essere rappresentati secondo la rappresentazione di von Neumann mediante tre principali blocchi funzionali.
Architettura di von Neumann
La CPU o microprocessore è la parte operativa. Essa è adibita al comando e a far funzionare tutto il resto.
La memoria è la sede di dati e istruzioni.
Esempio: processore (anni 80) 8080 …… PENTIUM (ieri)
Il blocco I/O Input/Output (ingresso, uscita) consente al PC di interagire con il mondo circostante.
- Modem
- Tastiera
- Mouse
- Schermo
- Stampante
- Hard disk ……….
Bit e Byte
I computer sono in grado di determinare se in un collegamento elettrico fluisce corrente oppure no ed è grazie a questa abilità che si è potuto creare un alfabeto interno mediante il quale la macchina può trattare i dati provenienti dall’esterno.
Questo sistema di codifica è chiamato alfabeto binario e si basa su sequenze di zeri e uni logici associati agli stimoli elettrici che chiameremo BIT (BInary-digiT).
Il computer leggerà un (1) in presenza di corrente e uno (0) in caso contrario cioè in assenza.
In termini di Volt in gioco avremo:
- Per lo (0) = 0 Volt
- Per l’(1) = 3,6 Volt (nell’8080 invece all’(1) corrispondevano 5 Volt)
Il bit è la più piccola unità di trasmissione dati; per avere qualcosa di più sostanzioso è necessario parlare di Byte ossia un insieme di 8 bit.
Operazioni elementari nei calcolatori di una volta
Cella di memoria: situazione iniziale: 8 bit, 16.
Ho 2 celle di memoria ognuna contenente 8 bit. La prima ha indirizzo 0000H mentre l’ultima FFFFH.
La memoria riconosce 16 fili, gli Address bus, che trasmettono sequenze di zeri e uni.
64kb per il mod. 8080.
Il Data bus composto da 8 fili si occupa del collegamento tra la memoria e la CPU.
Un ulteriore filo chiamato RW consente alla memoria di conoscere il compito al quale deve sopperire sia esso lettura o scrittura.
F F F F H esadecimale: 4 bit, 4 bit, 4 bit, 4 bit, 16 bit.
Supponiamo sia presente nel calcolatore un programma in grado di trasformare numeri. All’accensione del PC la CPU invia alla memoria l’ordine di leggere la prima cella di memoria dove è collocato il codice operativo della prima istruzione da eseguire.
Prima istruzione
3A 98
Linguaggio assembler.
3A = MOV A, 98 (consente di spostare l’indirizzo successivo nel registro di A).
Nella CPU una locazione di memoria corrisponde ad un REGISTRO.
1° istruzione: REG A =98. Codice operativo + CPU dato.
Seconda istruzione
3A 2B 98
3A 2B = MOV B, 13.
Il comando svolge la funzione riportata in calce per ottenere a livello di CPU questo risultato:
2° istruzione: 13. REG A 98, REG B 13, CPU.
Terza istruzione
3A ADD A,B 98
È un’unica istruzione fatta di un solo byte che permette di eseguire la somma e ottenere il risultato in A.
2B 13. REG A 3F AB.
N.B. Si possono avere al massimo 256 informazioni diverse.
Quarta istruzione
4A MOV 1234, A 12 34.
Il contenuto di A viene spostato nella locazione di memoria con indirizzo 1234. Quando viene dichiarata una variabile le si associa un’allocazione di memoria.
Viene letta l’istruzione 4A ma per poter essere completata è necessario ricavare l’indirizzo dai due byte successivi; è per questo che il risultato sarà collocato nella cella 1234H.
AB 1234H.
Operazioni
- Shift (SHL): Sposta tutto di una posizione a destra o a sinistra. Equivale a moltiplicare per due.
- Jump (JNZ): A seconda del valore in entrata, salta da una parte all’altra della memoria.
Chi fabbrica microprocessori deve creare un codice che soddisfi le varie esigenze a cui deve sopperire.
Esistono due classi di microprocessori:
- CISC (complex instruction set computer)
- RISC (reduced instruction set computer)
La famiglia più usata è la CISC, ma l’ideale sarebbe un compromesso tra le due.
I coprocessori matematici sono circuiti integrati aventi una struttura tabellare multidimensionale in cui entrano “n” variabili ed escono “m” risultati. Essi vengono principalmente utilizzati per fare calcoli come somme e moltiplicazioni e consentono di ottenere il risultato in un unico passaggio. In genere sono collegati alla CPU tramite un BUS poiché ad essi manca la funzione di passare le informazioni in memoria.
La velocità del collegamento CPU-MEMORIA dipende dalle dimensioni dell’intero sistema.
Il tempo di accesso alla memoria è di 10-100 nano secondi.
Il problema più rilevante infatti, è quello dello spazio.
Elementi come la CPU o i microprocessori stessi, essendo circuiti integrati, devono mantenere dimensioni molto ridotte. L’aumento di queste comporta un possibile incremento dei difetti strutturali e quindi il relativo mal funzionamento dei vari componenti.
Dagli anni ‘80 in poi inizia lo studio strutture che ottimizzano il funzionamento degli accessori come scheda video, scheda audio ecc, ma lo schema di base del calcolatore rimane invariato.
Il sistema operativo
APPLICATIVI
SISTEMA OPERATIVO
BIOS
HARDWARE
EE
Il sistema operativo è un software che gestisce direttamente l’hardware della macchina. Esso è formato da applicativi (es Word, campo minato) che consentono di comunicare direttamente con il computer, e che sono studiati per un particolare sistema operativo (es Word di Windows su Linux non viaggia). Il BIOS invece è comune a tutti i sistemi operativi.
Facciamo un esempio: un evento è qualcosa di asincrono che non dipende dal programma.
Consideriamo l’evento “muovo il mouse”:
CPU MEM INT.
Il collegamento INT ha un piedino che fa arrivare alla CPU il segnale “zero”. Questo significa che è successo qualcosa. La CPU quindi legge l’indirizzo che arriva da I/O e lo manda in memoria dove c’è la routine per servire l’I/O.
I/O mouse.
Nella CPU sono presenti un set di registri:
- Program Counter
- Stack Pointer
0000H 00001400 RET Parametri di ritorno FFFFH SP (stack pointer) FFF…400.
Lo stack pointer è un indirizzo che continua a spostarsi in avanti e indietro tenendo conto di dove deve tornare; consente di annidare le informazioni (funzionamento similare a quello degli IF annidati).
- Svolgo l’operazione
- Si verifica un evento
- Salvo il lavoro
- Svolgo l’operazione dettata dall’evento
- Con Stack pointer torno al lavoro iniziale
Il primo S.O. si chiamava DOS (Dis Operative System 1985-1995), successivamente è nato Windows. Non esisteva il mouse, si usava sola la tastiera e i caratteri alfanumerici. Quando il calcolatore veniva acceso, sul monitor appariva la lettera “C:\>” che indicava l’hard disk, la “A” era il floppy disk.
C:\DATA\> questa scritta indicava che ci si trovava all’interno della cartella DATA.
I comandi e le istruzioni erano poche e semplici ad esempio:
COPY PIPPO-PLUTO era l’istruzione per copiare.
… .exe oppure … .com erano i nomi del programma e venivano usati per chiamarlo e usarlo.
Con DOS poteva girare un solo programma alla volta e quando ciò avveniva non si poteva fare nessun’altra operazione. I programmi venivano lanciati con un’istruzione di salto e se entravano in un ciclo infinito non si poteva più arrestarli e diventava necessario chiudere il computer.
La memoria era poca quindi non esistevano schede grafiche.
Windows 3.11 che girava sotto Dos, si prendeva carico di lanciare i programmi successivi, ed era dotato di interfaccia grafica.
Windows 95 comunicava direttamente con il BIOS; era un sistema operativo multitasking dove potevano girare più task, ovvero più programmi, e multiutente, cioè permetteva a più utenti di usufruire del programma. Questo fu il primo esempio di time sharing, cioè ogni task è alternato velocemente agli altri, ad esempio per un certo intervallo di tempo gira Windows, poi Internet poi un altro programma. Questa modalità è utilizzata ancora oggi; il funzionamento avviene a scatti, ma l’utente non lo percepisce in quanto gli intervalli di tempo sono dell’ordine di 10-6 secondi. Il software gestisce la divisione dei tempi e il sistema operativo lo scheduler, tramite una tabella nella quale si tiene conto di tutti i programmi che devono girare, l’interapp interrompe un programma in esecuzione, salva il contesto come una fotografia degli indirizzi e del contenuto della CPU, e parte il programma successivo. Questo appena descritto, è uno dei compiti principali del sistema operativo multitasking, che permette di risparmiare tempo in quanto la CPU è molto più rapida rispetto a tutto il resto.
Con la barra degli strumenti del desktop è possibile accedere alla finestra dei processi del task manager, dove sono elencati tutti i programmi che stanno girando in modo alternato e che hanno definita una parte di memoria, parti di codice eseguito ognuno nel proprio contesto.
Socket è una routine che permette ai programmi di dialogare tra di loro.
I Thread sono sottoprocessi che condividono la stessa parte di memoria, ad esempio con Visual Basic è possibile creare due finestre tali per cui quello che scrivo su una appare anche nell’altra. I thread vengono generati da un processo e muoiono con esso. La gestione dei Thread avviene con un meccanismo simile a un semaforo, e può essere:
- Cooperativa: Si gestiscono tra di loro
- Preventiva: Stabilita dall’utente a priori
Approfondimento
In informatica, un sistema operativo (abbreviato in SO, o all'inglese OS, operating system) è il programma responsabile del diretto controllo e gestione dell'hardware che costituisce un computer e delle operazioni di base. Si occupa anche di gestire gli accessi degli utenti e dei processi che vengono eseguiti. Il sistema operativo è l'interfaccia uomo-macchina.
Il sistema operativo si compone di un sistema vero e proprio detto kernel e da una serie di programmi di sistema.
Un generico sistema operativo moderno si compone di alcune parti ben definite: un gestore di file system che si occupa di esaudire le richieste di accesso alle memorie di massa, un gestore di memoria virtuale che alloca pagine di memoria a richiesta e si assicura che questa sia presente nella memoria fisica al momento giusto, uno scheduler che assicura ai vari processi in esecuzione una ben definita quantità di tempo di elaborazione, uno spooler che accumula i dati da stampare e li stampa in successione, una interfaccia utente (shell o GUI) che permette agli esseri umani di interagire con la macchina ed un kernel, fulcro del sistema, che gestisce il tutto. A seconda dei casi, un particolare sistema operativo può avere tutti questi componenti o solo alcuni. Vediamo ora una serie di sistemi operativi possibili, dal più semplice al più complesso.
Praticamente il solo kernel, con una minima interfaccia interattiva per impartire i comandi. Permette di scrivere in memoria il programma da eseguire e di lanciarlo, non ha nessuna altra caratteristica. È semplicissimo (per un computer), spesso i suoi comandi sono semplici chiamate dirette a subroutine in linguaggio macchina, è stato anche il primo tipo di sistema operativo mai implementato su un computer. Controlla i processi base del sistema.
Il secondo passo verso una migliore gestione del computer si ha con lo sviluppo di una interfaccia utente separata dal kernel, un interprete di comandi che funga anche da interfaccia utente, da shell. Questa shell primitiva di solito funge anche da interprete per un linguaggio di programmazione: a seconda delle scelte dei progettisti del software può essere un vero linguaggio oppure un più semplice linguaggio di scripting con cui creare comandi batch.
Un computer diventa molto più utile se dotato di una memoria di massa: per gestirla serve un gestore di file system, cioè un insieme di funzioni che permetta di organizzare i dati sulla superficie dei mezzi di memorizzazione secondo una struttura ben precisa. I sistemi operativi che risiedono su disco (inizialmente floppy poi hard disk e altre più evolute unità di massa) capaci di gestire un file system sono detti genericamente Disk Operating Systems, cioè DOS appunto. L'esemplare più famoso è senz'altro il MS-DOS della Microsoft. Esiste anche una versione libera del DOS, denominata: FreeDOS.
Alcuni programmi non hanno sempre realmente bisogno della CPU: a volte, invece di eseguire istruzioni stanno aspettando che arrivino dei dati da un file, o che l'utente prema un tasto alla tastiera. Quindi si può, in linea di principio, usare questi tempi "morti" per far girare un altro programma. Questa idea, sorta fin dai primi anni 50, si concretizzò nei sistemi operativi multitasking, cioè dotati di uno scheduler che manda in esecuzione più processi (esecuzioni di programmi) contemporaneamente, assegnando a turno la CPU ad ognuno e sospendendo l'esecuzione dei programmi in attesa di un evento esterno (lettura sulla/dalla memoria di massa, stampa, input utente ecc.) finché questo non si verifica.
Dovendo ospitare in memoria centrale più programmi nello stesso tempo, i sistemi multitask hanno bisogno di più memoria rispetto a quelli monotask: perciò questo tipo di sistemi operativi è quasi sempre dotato di un gestore di memoria virtuale.
Se un computer può far girare più programmi contemporaneamente, allora può anche accettare comandi da più utenti contemporaneamente: in effetti dal multitasking alla multiutenza il passo è molto breve tecnicamente, ma fa sorgere una serie di nuovi problemi dal punto di vista della sicurezza del sistema: come distinguere i vari utenti tra loro, come accertarsi che nessun utente possa causare danni agli altri o alla macchina che sta usando ecc. Al giorno d'oggi, i diversi sistemi operativi, come ad esempio il nuovo Windows CE 6 [1], sono progettati in modo che questo tipo di operazioni avvengano nel più breve tempo possibile, valorizzando, ad esempio, software come i middleware, i driver, le interfaccia utente, e molti altri.
Questi problemi si risolvono assegnando un account univoco per ogni utente, assegnando un proprietario ai file ed ai programmi e gestendo un sistema di permessi per l'accesso ad essi, e prevedendo una gerarchia di utenti (cioè di account) per cui il sistema rifiuterà tutti i comandi potenzialmente "pericolosi" e li accetterà soltanto se impartiti da un utente in cima alla gerarchia, che è l'amministratore del sistema (generalmente l'account root nei sistemi Unix, Administrator nei sistemi Windows).
Un sistema operativo real-time è un sistema operativo utilizzato tipicamente in un ambito industriale o comunque dove sia necessario ottenere una risposta dal sistema in un tempo massimo prefissato. I sistemi operativi realtime si possono dividere in due categorie: hard e soft, a seconda dei tempi di risposta.
CPU / Microprocessori
La CPU è la parte più significativa del calcolatore.
Al suo interno ci sono svariate “scatolette” che svolgono le princip
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Appunti Informatica
-
Appunti Informatica
-
Appunti Elementi di informatica e programmazione
-
Informatica – Appunti