Riassunto tanenbaum + appunti PDF

Title Riassunto tanenbaum + appunti
Course Informatica
Institution Università degli Studi di Bergamo
Pages 15
File Size 204.8 KB
File Type PDF
Total Downloads 22
Total Views 121

Summary

Riassunto tanenbaum + appunti...


Description

Riassunto tanenbaum + appunti BIOS Il BIOS è un insieme di routine software (firmware), scritte su memoria non volatile, che fornisce una serie di funzioni di base per l'accesso all'hardware del computer o alle periferiche da parte del sistema operativo e dei programmi. Firmware Il firmware è un programma integrato direttamente in un componente elettronico, che consente di avviare il componente stesso e gli consente di interagire con gli altri componenti hardware. Bootstrap (Boot) Quando il computer è spento, la RAM è vuota, la ROM invece contiene il firmware. Il sistema operativo è nel disco di archiviazione. Quando accendiamo il computer, il bootstrap guida il sistema operativo nella RAM e gli passa il controllo. Da quel momento vengono eseguite operazioni solo dal sistema operativo. DMA - Direct Memory Access L'accesso diretto alla memoria è un meccanismo che permette ad alcuni componenti hardware di accedere direttamente alla memoria principale per scambiare, leggere o scrivere dati senza chiamare in causa la CPU, ma generando un singolo interrupt per blocco trasferito. Scheduler Lo scheduler è un programma sotto forma di algoritmo che stabilisce l'ordinamento temporale per l'esecuzione di richieste di accesso ad una risorsa, in modo tale da ottimizzare l'accesso a tale risorsa. Architettura degli Elaboratori Capitolo 1 - Introduzione 1.1 Approccio Strutturale 1.1.2 Attuali Macchine Multilivello Gli oggetti che analizzeremo nel livello più basso della nostra trattazione, il livello logico digitale, sono le porte (gate). Queste, pur essendo costruite utilizzando componenti analogici come i transistor, possono essere correttamente modellate come dispositivi digitali. Ciascuna porta, costituita al più da una manciata di transistor, è dotata di uno o più input digitali (segnali corrispondenti ai valori 0 o 1) e calcola in output una semplice funzione dei valori di ingresso. Livello di Microarchitettura . Qui vi è una memoria locale, formata da un gruppo di registri (in genere da 8 a 32), ed un circuito chiamato ALU (Arithmetic Logic Unit, unità aritmetico-logica), capace di effettuare semplici operazioni aritmetiche. Il livello 2 è costituito da quello che chiamiamo il Livello ISA (Instruction Set Architecture Level, livello di architettura dell’insieme di istruzioni). Il livello successivo è generalmente un livello ibrido. La maggio parte delle istruzioni nel suo linguaggio fa parte anche del livello ISA. Inoltre, vi è un insieme di nuove istruzioni, una diversa organizzazione della memoria e la capacità di eseguire programmi in modo concorrente, oltre a varie altre funzionalità. Alcune istruzioni del livello 3 sono interpretate dal sistema operativo, mentre altre sono interpretate in modo diretto dal microprogramma; Livello Macchina del Sistema Operativo. Mentre i livelli 2 e 3 sono sempre interpretati, i livelli 4, 5 e quelli superiori sono generalmente supportati mediante traduzione. I linguaggi macchina dei livelli 1, 2 e 3 sono numerici; i loro programmi consistono quindi in lunghe serie di numeri, certamente più

adatte alle macchine che agli esseri umani. A partire dal livello 4 i linguaggi contengono invece parole ed abbreviazioni umanamente comprensibili. Il livello 4, quello del linguaggio assemblativo, è in realtà una forma simbolica di uno dei linguaggi sottostanti. Il programma che esegue la traduzione è chiamato assemblatore. Il livello 5 consiste generalmente di linguaggi, spesso chiamati linguaggi ad alto livello, definiti per essere utilizzati dai programmatori di applicazioni. I programmi scritti in questi linguaggi sono generalmente tradotti al livello 3 o al livello 4 da un traduttore detto compilatore; in casi meno frequenti è anche possibile che essi siano interpretati. Riassumendo, il concetto chiave da ricordare è che i computer sono progettati come una serie di livelli, ciascuno costruito su quelli che lo precedono. Ciascun livello rappresenta una diversa astrazione, caratterizzata dalla presenza di oggetti e operazioni diversi. Progettando ed analizzando i computer in questo modo è possibile tralasciare temporaneamente i dettagli irrilevanti, riducendo di conseguenza un soggetto complesso in qualcosa di più facile comprensione. L’insieme dei tipi di dati, delle operazioni e delle funzionalità di ciascun livello è chiamato architettura. Lo studio di come progettare le parti di un computer visibili ai programmatori è chiamato architettura degli elaboratori. 1.1.3 Evoluzione delle Macchine Multilivello I programmi scritti in un vero linguaggio macchina (livello 1) possono essere eseguiti direttamente dai circuiti del computer (livello 0), senza far ricorso ad alcuna traduzione o interpretazione. Questi circuiti formano, insieme alla memoria ed ai dispositivi di input/output, l’hardware del computer. L’hardware consiste di oggetti tangibili. Al contrario, il software consiste di algoritmi e delle loro rappresentazioni per i computer, vale a dire i programmi. “Hardware e software sono logicamente equivalenti.” Ogni operazione eseguita via software può anche essere costruita direttamente in hardware. 1.3 Tipologie di Computer 1.3.1 Forze tecnologiche ed Economiche Moore, durante la preparazione di un discorso dinanzi ad un gruppo industriale, sottolineò che ogni nuova generazione di chip veniva introdotta 3 anni dopo quella precedente. Dato che ogni nuova generazione ha una quantità di memoria quattro volte maggiore della precedente, comprese che il numero di transistor in un chip aumentava ad una velocità costante e predisse che questa crescita sarebbe continuata in questo modo per decenni. Questa osservazione è conosciuta come la Legge di Moore. Attualmente con il termine “Legge di Moore” si intende il fatto che il numero di transistor raddoppia ogni 18 mesi. Un altro fattore che guida lo sviluppo tecnologico è la prima legge del software di Nathan (dovuta a Nathan Myhrvold, un ex dirigente della Microsoft). Egli affermò che: “Il software è come un gas. Si espande fino a riempire il recipiente in cui è contenuto.” 1.3.2 Spettro di Computer Richard Hamming, ex-ricercatore dei Bell Labs, una volta osservò che un cambiamento della quantità di un ordine di grandezza produce un cambiamento della qualità. Probabilmente il più importante sviluppo nell’area di questi tipi di computer è rappresentata dai chip RFID (Radio Frequency Identification, identificazione a radiofrequenza). Oggi è possibile costruire, per pochissimi centesimi, chip RFID senza batteria, larghi meno di 0.5mm, caratterizzati da un numero a 128bit predefinito ed univoco e contenenti al loro interno un piccolo radiotrasmettitore. Quando ricevono impulsi radio

da un’antenna esterna i chip RFID si caricano grazie al segnale entrante sufficientemente a lungo da riuscire a ritrasmettere all’antenna il proprio numero identificativo. Anche se questi chip sono piccoli, le loro possibili implicazioni non lo sono affatto. 1.4 Esempi di Famiglie di Computer 1.4.1 Introduzione al Pentium 4 La memoria cache era usata per conservare, all’interno o vicino alla CPU, le parole di memoria utilizzate con frequenza, in modo da evitare l’accesso (lento) alla memoria centrale. Caratteristica: l’hyperthreading. Questa potenzialità permetteva ai programmi di dividere il loro lavoro in due flussi di controllo che il Pentium 4 poteva eseguire in parallelo, accelerandone l’esecuzione. Capitolo 2 - Organizzazione dei Sistemi di Calcolo 2.1 Processi La CPU (Central Processing Unit, unità centrale di calcolo) è il cervello del computer e la sua funzione è quella di eseguire i programmi contenuti nella memoria principale prelevando le loro istruzioni, esaminandole ed eseguendole una dopo l’altra. I componenti sono connessi tra loro mediante un bus, cioè un insieme di cavi paralleli sui quali vengono trasmessi indirizzi, dati e segnali di controllo. I bus possono essere esterni alla CPU, oppure interni. La CPU è composta da parti distinte, tra le quali l’unità di controllo e l’unità aritmetico-logica. La prima si occupa di prelevare le istruzioni dalla memoria principale e di determinarne il tipo, mentre la seconda esegue le operazioni necessarie per portare a termine l’esecuzione delle istruzioni. La CPU contiene anche una piccola memoria ad alta velocità, utilizzata per memorizzare i risultati temporanei ed alcune informazioni di controllo. Questa memoria è costituita da un certo numero di registri, ciascuno dei quali ha una funzione ed una dimensione predefinite. Ognuno di loro può contenere un numero, il cui valore può variare fino ad un massimo che dipende dalla dimensione del registro, che di solito è uguale per tutti i registri. Dato che sono interni alla CPU possono essere letti e scritti a velocità elevate. Il registro più importante è il contenitore di istruzioni, o Program Counter (PC), che punta alla successiva istruzione che dovrà essere prelevata per l’esecuzione. Un altro registro particolarmente importante è il registro istruzione corrente, o Instruction Register (IR), contenente l’istruzione che si trova in fase di esecuzione. 2.1.1 Organizzazione della CPU La parte della CPU, chiamata percorso dati (data path) di una tipica CPU di Von Neumann è composta dai registri (generalmente da 1 a 32), dalla ALU e da alcuni bus che connettono fra loro le diverse parti. I registri alimentano due registri di input della ALU che mantengono i dati di ingresso della ALU mentre questa è occupata nell’esecuzione di alcune computazioni. La ALU esegue alcune semplici operazioni sui suoi input, come addizioni, e genera un risultato che viene memorizzato in un suo apposito registro di output. La maggior parte delle istruzioni può essere divisa in due categorie principali: le istruzioni registro-memoria e quelle registro-registro. Le istruzioni registro-memoria permettono di prelevare parole di memoria per portarle all’interno dei registri, dove sono utilizzabili, per esempio come input della ALU per effettuare istruzioni successive. Altre istruzioni registromemoria permettono invece di copiare i valori dei registri nella memoria. L’altra classe d’istruzioni è quella registro-registro. Una tipica istruzione di questo tipo preleva due

operandi dai registri, li porta all’interno dei registri di input della ALU, esegue su di loro una qualche operazione (ad esempio l’addizione o l’AND) e ne memorizza il risultato in uno dei registri. Il processo che consiste nel portare i due operandi attraverso la ALU e nel memorizzare il risultato è chiamato ciclo del percorso dati e rappresenta il cuore della maggior parte delle CPU. Più veloce è il ciclo del percorso dati, maggiore sarà la velocità del calcolatore. 2.1.2 Esecuzione dell’Istruzione La CPU esegue ogni istruzione compiendo una serie di piccoli passi: 1- Prelevare la successiva istruzione dalla memoria per portarla nell’IR. 2Modificare il PC per farlo punta re all’istruzione seguente. 3- Determinare il tipo di istruzione appena prelevata. 4- Se l’istruzione usa una parola in memoria determinare dove si trova.5- Se necessario, prelevare la parola per portarla in un registro della CPU. 6- Eseguire l’istruzione. 7- Tornare al punto 1 per iniziare l’esecuzione dell’istruzione successiva. Ciclo esecutivo delle istruzioni, o ciclo di prelievo-decodifica- esecuzione. 2.1.4 Principi di Progettazione dei Calcolatori Moderni Esiste un insieme di principi di progettazione, talvolta chiamati principi di progettazione RISC, che i progettisti delle CPU cercano di seguire il più possibile. - Tutte le istruzioni sono eseguite direttamente dall’hardware. ! L’eliminazione di un livello di interpretazione garantisce ! velocità più alte per la maggior parte delle istruzioni. - Massimizzare la frequenza di emissione delle istruzioni. - Le istruzioni devono essere facili da decodificare. - Solo le istruzioni Load e Store fanno riferimento alla memoria. ! Uno dei modi più semplici per spezzare le operazioni in passi ! separati è quello di richiedere che, per la maggior parte delle ! istruzioni, gli operandi vengano prelevati dai registri e siano ! memorizzati al loro interno. L’operazione di spostamento degli ! operandi dalla memoria ai registri può essere invece compiuta ! mediante apposite istruzioni. - Molti registri disponibili. ! Dato che l’accesso alla memoria è relativamente lento occorre ! prevedere molti registri (almeno 32) di modo che, una volta ! prelevata la parola, possa essere mantenuta nel registro ! fintanto sia necessario. 2.1.5 Parallelismo a Livello d’Istruzione Piepelining Dal 1959 per alleviare al problema di prelievo d istruzioni dalla memoria, i calcolatori sono stati dotati della capacità di poter prelevare in anticipo le istruzioni dalla memoria, in modo da averle già a disposizione nel momento in cui dovessero rendersi necessarie. Le istruzioni venivano memorizzate in un insieme di registri chiamati buffer di prefetch, dai quali potevano essere prese nel momento in cui venivano richieste, senza dover attendere che si completasse una lettura della memoria. Il concetto di pipeline spinge questa strategia molto più avanti; invece di dividere l’esecuzione di un’istruzione solamente in due fasi, la si divide in un numero maggiore di parti. 2.2 Memoria Principale La memoria è quella parte del calcolatore in cui sono depositati programmi e dati. 2.2.1 Bit L’unità di base della memoria è la cifra binaria, chiamata bit. Un bit può avere valore 0 oppure 1 ed è l’unità più semplice possibile. Nel formato decimale sedici bit possono memorizzare i numeri da 1 a 9999, permettendo solo 10.000 combinazioni, mentre una

stringa binaria di 16 bit può avere 65.536 combinazioni distinte. Per questa ragione si dice che il sistema binario è più efficiente. 2.2.2 Indirizzi di Memoria Le memorie sono costituite da un certo numero di celle (o locazioni) ciascuna delle quali può memorizzare informazioni. Ciascuna cella ha un numero, chiamato indirizzo, attraverso il quale il programma può riferirsi ad essa. La cella rappresenta la più piccola unità indirizzabile; negli ultimi anni quasi tutti i produttori di calcolatori ne hanno standardizzato la dimensione impostandola a 8bit. Questa dimensione è chiamata byte; i byte sono raggruppati in parole (word). L’importanza della parola risiede nel fatto che la maggior parte delle istruzioni operano su intere parole, sommandone per esempio due fra di loro. 2.3.3 Ordinamento dei Byte Il primo sistema, in cui la numerazione comincia a partire dall’estremo più “grande” (cioè dal byte più significativo) è chiamato big endian, in contrapposizione al little endian in cui la numerazione incomincia dal byte meno significativo. 2.2.4 Codici Correttori Occasionalmente le memorie dei calcolatori possono commettere degli errori per via di picchi di tensione sulle linee di alimentazione o per altre cause. Per proteggersi da tali errori, alcune memorie utilizzano dei codici di rivelazione e/o correzione degli errori. 2.2.5 Memoria Cache Storicamente le CPU sono sempre state più veloci delle memorie. Più lenta è la memoria, più cicli dovrà attendere la CPU. Esistono due modi per trattare questo problema. Il metodo più semplice consiste nel far iniziare le istruzioni di lettura dalla memoria non appena vengono incontrate, permettendo al contempo di continuare l’esecuzione e bloccando la CPU quando un’istruzione tenta di usare una parola di memoria non ancora arrivata. L’altra soluzione consiste nel richiedere ai compilatori di non generare codice che utilizzi parole ancor prima che queste siano arrivate, il che consente di avere macchine che non si bloccano. Ci sono delle tecniche interessanti che permettono di combinare una piccola quantità di memoria veloce con una grande quantità di memoria lenta al fine di ottenere ad un prezzo modesto sia la velocità della memoria veloce (quasi) sia la capacità della memoria più grande. La piccola e veloce memoria è chiamata cache. L’idea di base è semplice: le parole di memoria usate più frequentemente sono mantenute all’interno della cache. Quando la CPU necessita di una parola, la cerca nella cache e solo nel caso in cui essa non sia presente, la richiede alla memoria centrale. È possibile ridurre drasticamente il tempo medio di accesso se una frazione significativa delle parole è presente nella cache. 2.3 Memoria Secondaria 2.3.1 Gerarchie di Memoria La soluzione che viene tradizionalmente adottata per memorizzare una gran mole di dati consiste nell’organizzare gerarchicamente la memoria. Muovendosi verso il basso della gerarchia aumentano tre parametri chiave. Innanzitutto, il tempo di accesso diventa via via più grande. Secondariamente la capacità di memorizzazione aumenta man mano si scende verso il basso. In terzo luogo scendendo lungo la gerarchia diminuiscono anche i costi unitari.

2.4 Input/Output 2.4.1 Bus Quando un controllore legge e scrive dati in memoria senza l’intervento della CPU si dice che effettua un Direct Memory Access (accesso diretto alla memoria), meglio conosciuto come DMA. Di solito, una volta che il trasferimento è completato, il controllore produce un interrupt che obbliga la CPU a sospendere immediatamente l’esecuzione del programma corrente e a far iniziare una speciale procedura, chiamata gestore dell’interrupt (interrupt handler) che controlla se ci sono errori, compie le azioni eventualmente necessarie e informa il sistema operativo che l’I/O è terminato. Dopo che il gestore dell’interrupt ha terminato il proprio lavoro, la CPU riprende l’esecuzione del programma precedentemente sospeso all’arrivo dell’interrupt. Oggi il più diffuso di questi bus è il PCI (Peripheral Component Interconnect, interconnessione di componenti periferici), progettato da Intel. Capitolo 3 - Livello Logico Digitale 3.3 Memoria 3.3.6 RAM e ROM Le memorie di questo tipo sono chiamate RAM (Random Acces Memory, memoria ad accesso casuale); il termine è fuorviante in quanto tutti i chip di memoria sono accessibili in modo casuale, ma ormai è talmente radicato che è impossibile modificarlo. Chip di memoria non volatile: Alcuni dati devono rimanere memorizzati anche quando viene tolta l’alimentazione. Inoltre non si richiede mai la modifica del programma né dei dati installati. Questi requisiti hanno portato allo sviluppo delle ROM (Read-Only Memory, memoria di sola lettura) che non possono essere modificate o cancellate, né intenzionalmente né accidentalmente. I dati sono inseriti durante la sua fabbricazione. Ciò avviene esponendo alla luce un materiale fotosensibile attraverso una maschera contenente il pattern di bit desiderato ed incidendo la superficie esposta (o non esposta). L’unico modo per cambiare il programma consiste nella sostituzione dell’intero chip. 3.4 Chip della CPU e Bus 3.4.1 Chip della CPU Tutte le CPU moderne sono contenute in un unico chip, rendendo in questo modo ben definita l’interazione con il resto del sistema. Ogni chip di CPU ha un insieme di pin attraverso il quale passano tutte le relative comunicazioni verso il mondo esterno. I pin di una CPU possono essere divisi in tre tipi: indirizzi, dati e controlli. Questi pin sono collegati ad analoghi pin presenti sulla memoria o sui chip di I/ O, mediante un insieme di cavi paralleli chiamato bus. La CPU, per prelevare un’istruzione, ne imposta l’indirizzo sui suoi pin di indirizzamento, e poi asserisce una o più linee di controllo per informare la memoria che vuole leggere una parola. La memoria risponde spedendo la parola richiesta sui pin della CPU dedicati ai dati e asserendo un segnale che notifica che l’operazione è stata completata. Quando la CPU vede questo segnale accetta la parola ed esegue l’istruzione. Oltre ai pin d’indirizzo e dei dati, le CPU sono dotate anche di alcuni pin di controllo. Questi regolano il flusso e la temporizzazione dei dati da e verso la CPU. I pin di controllo possono essere approssimativamente raggruppati nelle seguenti categorie principali: 1- Controllo de Bus. 2- Interrupt. 3- Arbitraggio del Bus. 4- Comunicazione con il Coprocessore 5- Stato. 6- Altro. I pin per il controllo del bus mandano principalmente sul bus

dei segnali della CPU (destinati alla memoria ed ai chip di I/O) per notificare quando la CPU vuole leggere dalla memoria oppure compiere altre azioni. Capitolo 4 - Livello di Microarchitettura Al di sopra del livello logico digitale si trova il livello di microarchitettura. Il suo compito consiste nell’implementare il livello ISA. 4.1 Esem...


Similar Free PDFs