Processi e processori

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Processi e processori"

Transcript

1 Architettura degli Elaboratori, a.a Processi e processori Queste note hanno i seguenti scopi: operare da collante tra varie parti del corso (macchina assembler, architettura del processore, gerarchie di memoria, introduzione ai sistemi operativi), fornendo una traccia secondo la quale utilizzare il materiale didattico; integrare (sez. 1, 2, 3, parte introduttiva della sez. 4) la parte I del corso sulla strutturazione complessiva dei sistemi a livelli ed a moduli; integrare (sez. 4) la parte II del corso sulla macchina assembler; integrare (sez. 5, 6) la parte V del corso sull introduzione ai sistemi operativi. 1. Compilazione e interpretazione Modello di calcolatore general-purpose a programma memorizzato I livelli assembler e firmware di un calcolatore general-purpose Memoria virtuale e spazio di indirizzamento Inizializzazione di variabili Trasferimenti di ingresso-uscita Caricamento ed esecuzione di un programma Processi cooperanti Dai programmi ai processi Processi cooperanti a scambio di messaggi Sistema operativo e compilazione di programmi applicativi Introduzione ai sistemi operativi: il nucleo Scheduling a basso livello, architettura astratta e architetture concrete Interruzioni ed eccezioni Prerilascio e quanti di tempo Indivisibilità Spazi di indirizzamento Indirizzamento di strutture dati di nucleo Esempio di implementazione di primitive di comunicazione...14

2 2 1. Compilazione e interpretazione Il fine ultimo di un calcolatore è quello di rendere possibile l esecuzione di programmi. Cominciamo con il caratterizzare questa generica affermazione: 1. i programmi vengono progettati mediante linguaggi ad alto livello. Per ragioni di efficienza e di generalità, occorre prevedere una traduzione da linguaggio ad alto livello in una forma intermedia, detta linguaggio macchina o linguaggio assembler. Le caratteristiche di questo linguaggio emergeranno dall analisi successiva; 2. i calcolatori a cui ci riferiamo devono permettere l esecuzione di qualunque programma: devono cioè essere general-purpose. Come sempre accade, coniugare generalità ed efficienza è un problema complesso: uno dei principali obiettivi dell Architettura degli Elaboratori è dare soluzioni ragionevoli a questo problema; 3. la traduzione dal programma sorgente (in gergo, codice sorgente ) scritto in linguaggio ad alto livello, nel programma oggetto o eseguibile (in gergo, codice oggetto o codice eseguibile ), espresso in linguaggio assembler, può essere effettuata secondo una delle due ben note tecniche, la compilazione e l interpretazione, o loro combinazioni. In entrambi i casi, il punto di partenza è una sequenza di comandi, costituenti il programma scritto nel linguaggio ad alto livello, operanti su determinati insiemi di dati. Un compilatore o un interprete sono essi stessi dei programmi, già disponibili in forma eseguibile, che accettano come dato d ingresso il programma sorgente (una rappresentazione opportuna della sequenza di comandi e rispettivi dati) e producono come dato di uscita il programma eseguibile; 4. un traduttore di tipo interprete scandisce tale sequenza sostituendo ogni singolo comando con una sequenza di istruzioni assembler nota, detta l interprete di quel comando. Questa forma di traduzione è effettuata dinamicamente, cioè a tempo di esecuzione, da cui la dizione, equivalente a quella di interprete di un linguaggio, di supporto a tempo di esecuzione di quel linguaggio; 5. un traduttore di tipo compilatore sostituisce l intera sequenza del programma sorgente con una sequenza di istruzioni assembler. Questa forma di traduzione è effettuata staticamente, cioè in fasi di preparazione prima che il programma passi in esecuzione. Anche il compilatore deve disporre di regole per sostituire ogni comando del programma sorgente con il rispettivo supporto a tempo di esecuzione, ma, a differenza dell interpretazione: la compilazione prende in esame tutto il programma sorgente, per ogni comando del linguaggio sorgente, esistono più sequenze eseguibili per tenere conto efficientemente del contesto in cui il comando si trova ad essere inserito. Per esemplificare la differenza tra compilazione e interpretazione, si considerino i due seguenti frammenti di programmi: /programma 1/ int A[N], B[N]; for (i = 0; i < N; i++) A[i] = A[i] + B[i]; /programma 2/ int a; int B[N]; for (i = 0; i < N; i++) a = a + B[i]; In entrambi i casi si tratta di tradurre un comando di tipo for, contenente un comando di assegnamento su dati con tipi opportuni. Mentre nel primo caso ad ogni passo del for viene calcolato un nuovo valore di un nuovo elemento del vettore A, nel secondo caso ad ogni passo del for viene calcolato un nuovo valore della stessa variabile scalare a. Un compilatore utilizzerà modalità diverse per produrre il codice oggetto del comando di assegnamento: nel programma 1 ad ogni passo del for provocherà la modifica della rappresentazione eseguibile del vettore A; nel programma 2, utilizzerà una rappresentazione temporanea dello scalare a, al quale verranno assegnati tutti i successivi valori, finché, all uscita del for, la variabile temporanea verrà scritta nella rappresentazione finale della variabile a, disponibile per successivi usi da parte del seguito del programma. La rappresentazione temporanea di a è più efficiente della rappresentazione finale (tipicamente, il temporaneo risiede in un registro, la rappresentazione finale in una locazione di memoria principale; l accesso in memoria comporta ritardi decisamente maggiori rispetto all accesso ad un registro). Un interprete traduce il comando di assegnamento del programma 1 e del programma 2 nello stesso modo: nel secondo caso non viene utilizzato un temporaneo, ma esiste un unica rappresentazione della variabile a il cui valore viene ripetutamente modificato (viene letto N volte e scritto N volte il valore di a direttamente in memoria, effettuando 2*(N- 1) accessi in memoria in più rispetto alla versione compilata).

3 3 In generale nella traduzione da parte di un interprete, poiché questa avviene passo passo, non viene considerato il contesto in cui si trova il comando da interpretare a ogni passo, applicando sempre la stessa regola di traduzione per uno stesso comando; invece, la traduzione da parte di un compilatore prende in considerazione una sequenza, più o meno ampia, in cui si trova inserito un comando e, per uno stesso comando, applica regole di traduzione diverse allo scopo di ottimizzare le prestazioni (ad esempio, il tempo di elaborazione del programma e/o l occupazione di memoria). La fase di ottimizzazione è in effetti quella che caratterizza più pesantemente un compilatore: allo stato attuale della tecnologia, nel confronto tra due calcolatori di costruttori diversi, quello con il compilatore migliore può talvolta riuscire a colmare il gap prestazionale dovuto ad un processore peggiore. Sempre per rimanere all esempio precedente, si può vedere un ulteriore occasione di ottimizzazione passando dalla versione interpretata alla versione compilata: a seconda del valore di N, l esecuzione del for può consistere in una o più iterazioni (esecuzione tipo do while), oppure non aver luogo nessuna iterazione. Un interprete effettuerà sempre, all inizio di un for, un controllo su N per distinguere le due situazioni, e, per N 0, la gestione del loop verrà effettuata sempre allo stesso modo per qualunque valore di N. Invece, un compilatore sfrutterà la conoscenza sul valore di N disponibile staticamente: se N > 0 verrà generato codice assembler per la gestione di un loop ripetuto più di una volta (nell esempio, essendo N la dimensione di un array, questo è l unico caso), se N = 0 verrà generato codice per il solo corpo del for senza generare codice per la gestione del loop, se N < 0, non verrà generato codice, passando direttamente alla parte successiva del programma. Una classe importante di ottimizzazioni a tempo di compilazione è quella relativa la miglior sfruttamento delle caratteristiche architetturali, ad esempio la memoria cache e/o l architettura internamente parallela di processori. Sulle caratteristiche di compilatori e interpreti torneremo frequentemente durante il corso. Vale fin da ora la pena di rimarcare che: a) anche nel caso della pura interpretazione, è sempre presente un minimo di compilazione, consistente nelle rappresentazione del programma sorgente in un formato facilmente comprensibile all interprete; b) raramente siamo in presenza di linguaggi soggetti a compilazione pura o a interpretazione pura. Ad esempio, anche in linguaggi che facciano soprattutto uso di compilazione, il supporto di eventuali comandi per esprimere strutture dati dinamiche in modo primitivo (come new o malloc) è necessariamente implementato mediante interpretazione; c) interessante è il caso, utilizzato in popolari linguaggi ad oggetti, di on the fly compilation : la prima esecuzione di un programma (o una sua fase iniziale di esecuzione) è soggetta a interpretazione, dopo di che, in base alla conoscenza acquisita sul suo comportamento, il programma può venire parzialmente ristrutturato per introdurre ottimizzazioni tipiche di un compilatore. 2. Modello di calcolatore general-purpose a programma memorizzato Nell architettura firmware di un calcolatore general-purpose, un ruolo chiave è svolto dal Processore: il microprogramma di questa unità di elaborazione (che, come per qualunque unità, definisce il suo funzionamento è la sua struttura) è l interprete del linguaggio assembler, permettendo quindi l esecuzione del programma in versione eseguibile. Ci si potrebbe chiedere perché il livello firmware è un interprete e non un compilatore : in effetti, si può dimostrare che, nella strutturazione a livelli di un sistema di elaborazione, almeno il livello più basso deve essere un interprete. Nel caso della strutturazione tipica (vedi Cap. I della Dispensa), esistono almeno due interpreti: quello a livello firmware (che interpreta l assembler) e quello a livello hardware (che interpreta il firmware). Al più, si potrebbe pensare di compilare l assembler in firmware, con che il vero linguaggio macchina diverrebbe il microlinguaggio, rendendo di fatto inutile il livello assembler; questa soluzione, che è stata adottata con successo nel passato, non è più conveniente alla luce dell evoluzione della tecnologia VLSI (occorrerebbe realizzare processori microprogrammabili ). D altra parte, specie se le istruzioni assembler sono semplici (approccio Risc), i microprogrammi risultano notevolmente ottimizzati anche in un approccio interpretato. Con la terminologia del Cap. III della Dispensa, le istruzioni assembler sono le operazioni esterne dell unità di elaborazione Processore. Una volta stabilito di realizzare di realizzare il Processore come interprete del linguaggio assembler, discende che, nell architettura firmware del calcolatore, occorre prevedere anche una unità Memoria Dati, nella quale fare risiedere le strutture dati riferite dal programma eseguibile, ed un insieme di Unità di Ingresso/Uscita per trasferire dati a/da tale memoria (dischi, monitor, tastiere, mouse, stampanti, interfacce di rete, ecc). Inoltre, occorre prendere una decisione cruciale relativamente all architettura complessiva del calcolatore:

4 4 quale modello di programmazione segue il linguaggio assembler? come vengono fatte pervenire al Processore le richieste di esecuzione delle istruzioni assembler (operazioni esterne), in modo da rispettarne efficientemente l ordinamento a tempo di esecuzione? La risposta al primo quesito comporta una risposta al secondo. Ad esempio, avremmo architetture completamente diverse a seconda che il modello di programmazione del linguaggio assembler fosse puramente funzionale oppure imperativo. La scelta universalmente adottata ormai da molti anni è la seguente: il modello di programmazione a livello assembler è imperativo (per comprenderne a fondo i motivi, occorre studiare aspetti avanzati di Architettura degli Elaboratori, come nel corso di Architetture Parallele e Distribuite). Questa scelta conduce al così detto modello di architettura a programma memorizzato, o modello di Von Neumann: il programma assembler da eseguire (da interpretare da parte del Processore) risiede in una memoria accessibile al Processore, detta Memoria Principale del calcolatore. Questo comporta che le istruzioni del programma assembler, rappresentate in binario (come stringhe di bit), siano memorizzate come parole di memoria, che possono essere lette dal Processore nel giusto ordine; cioè, è il Processore stesso (il suo microprogramma) che reperisce una istruzione alla volta dalla memoria e provvede alla sua esecuzione (interpretazione). Più in dettaglio: i) una volta letta dalla memoria, ogni istruzione verrà riconosciuta univocamente, attraverso un suo campo Codice Operativo, in modo che il microprogramma del Processore possa svolgere quelle azioni che sono necessarie per l esecuzione dell istruzione stessa; ii) iii) completata una istruzione, il Processore deve poter individuare l istruzione successiva. A questo scopo il Processore dispone di un registro, detto Contatore Istruzioni (IC), che contiene l indirizzo dell istruzione da eseguire; il contenuto di IC verrà modificato, durante il (alla fine del) microprogramma di ogni istruzione, in modo da portarlo ad assumere il valore dell indirizzo della prossima istruzione da leggere dalla memoria; tra le azioni da effettuare durante l interpretazione di una istruzione, ci possono essere anche letture o scritture di dati del programma residenti nella Memoria Dati. In una architettura a programma memorizzato, questa viene fatta coincidere logicamente con la Memoria Principale. Ne consegue che, nel modello di Von Neumann, concettualmente non c è distinzione tra istruzioni e dati: in effetti, entrambe le informazioni sono dati utilizzati dal microprogramma-interprete e reperiti in una memoria accessibile al Processore; un particolare tipo di dato è l istruzione, così come in una unità specializzata (vedi Cap. III della Dispensa) i messaggi in ingresso contengono informazioni sia sull operazione esterna che sui dati ad essa associati. L architettura firmware di un elaboratore general-purpose assume allora la forma schematica della fig. 1 Memoria Principale (M) richieste IC Processore (P) risposte Registri Generali (RG) Sottosistema di Ingresso / Uscita (I/O) Memorie di massa (dischi, ecc.) Monitor Tastiere, Mouse Stampanti Interfacce di rete Fig. 1 Note sulla fig. 1: (1) richieste: richieste di accesso alla memoria da parte di P; possono essere richieste di lettura di una istruzione all indirizzo IC, oppure richieste di lettura o di scrittura di una dato all indirizzo generato durante l esecuzione del microprogramma; (2) risposte: parole lette dalla memoria (istruzioni o dati) in risposta ad una richiesta di P, più informazioni sull esito dell accesso;

5 5 (3) nel Processore, oltre al registro contatore istruzioni IC (fondamentale in qualunque realizzazione del modello di Von Neumann), sono indicati i Registri Generali, cioè registri visibili a livello assembler (riferiti esplicitamente dalle istruzioni assembler), che svolgono un ruolo importante agli effetti delle ottimizzazioni introdotte dal compilatore. Ovviamente, come accade nel progetto di ogni unità di elaborazione, nell unità P saranno presenti altri registri, visibili esclusivamente a livello firmware. Il formato di una generica istruzione assembler è codificato come una stringa di bit nella quale si riconoscono campi corrispondenti alle seguenti informazioni (alcune possono essere implicite a seconda del Codice Operativo): Codice Operativo riferimenti (indirizzi ) ad operandi e risultati informazioni su come individuare l istruzione successiva. Tale formato può essere codificato mediante una singola parola oppure mediante più parole consecutive (eventualmente in numero variabile a seconda della classe di istruzione); nel secondo caso, il Processore provvede a leggere dalla memoria il numero corrispondente di parole. Ad alto livello, il microprogramma del Processore (interprete del linguaggio assembler, e quindi interprete del programma eseguibile) assume la forma seguente nel modello di Von Neumann: while true { chiamata dell istruzione: lettura dell istruzione dalla memoria all indirizzo IC; } decodifica dell istruzione: riconoscimento dell istruzione letta mediante il campo Codice Operativo; esecuzione dell istruzione: per ogni Codice Operativo verranno svolte azioni diverse, incluse eventuali letture e/o scritture di dati dalla memoria e/o dai Registri Generali; aggiornamento del contatore istruzioni IC; test di interruzioni: ascolto di eventuali segnalazioni da parte del sottosistema di I/O Inizialmente, IC assume il valore dell indirizzo della prima istruzione eseguibile. 3. I livelli assembler e firmware di un calcolatore general-purpose Nel Cap. V della Dispensa è introdotto un set di istruzioni assembler di tipo Risc, e sono studiate regole di compilazione di programmi. L esempio della sez. 1, per spiegare la differenza tra compilatore ed interprete, è un classico esercizio del Cap. V, che mostra come l uso opportuno dei registri generali permetta di introdurre alcune importanti ottimizzazioni nel codice eseguibile. Nello stesso Cap. V, e attraverso esercizi (Cap. VII, Raccolta 5), sono esaminate diverse alternative nella definizione del linguaggio assembler, sia di tipo Risc che Cisc. Uno schema di Processore capace di interpretare il set di istruzioni assembler del Cap. V è studiato nel Cap. VII. Importante, in questo capitolo, è anche la definizione dei metodi per la valutazione delle prestazioni sulla base delle caratteristiche dell architettura firmware e delle caratteristiche dei programmi. Nel Cap. VIII è studiata una importante soluzione per aumentare le prestazioni di un calcolatore, e cioè la memoria cache. Questa parte del corso permette di esemplificare una importante classe di ottimizzazioni a tempo di compilazione: per una migliore efficienza nello sfruttamento della memoria cache, si può pensare che il compilatore effettui una analisi del programma per individuare casi in cui sia applicabile la tecnica del prefetching dei blocchi (Cap. VIII, sez Memoria virtuale e spazio di indirizzamento Quello finora preso in considerazione è ancora uno schema semplificato dell architettura, a causa di diversi aspetti legati alle caratteristiche di livelli superiori del sistema. In particolare, è importante il concetto di memoria virtuale e le conseguenze che tale concetto ha sulla compilazione e sull architettura firmware. Nelle Dispense del corso, questo

6 6 argomento è trattato per una parte minimale nel Cap. V, ed in modo più sostanziale nel Cap. VI, sez. 2, nel Cap. VII, sez. 1.1, e nel Cap. VIII, sez. 1. Qui di seguito verrà dato un sommario degli aspetti legati a questo importante argomento, in modo che lo studente possa meglio legare tra loro le parti di materiale didattico: 1. gli indirizzi generati da ogni programma non sono direttamente indirizzi di memoria principale (indirizzi fisici), bensì indirizzi logici, cioè indirizzi riferiti ad una astrazione della memoria del programma, detta memoria virtuale. Questa può essere vista come un array unidimensionale, con indici (indirizzi logici) a partire da zero fino al massimo necessario per rappresentare il programma o fino al massimo consentito dall ampiezza dell indirizzo logico in bit (ad esempio, per una macchina a 32 bit e con indirizzamento alla parola, la massima ampiezza della memoria virtuale di ogni programma è 4G parole). Ad esempio, le istruzioni del programma iniziano dall indirizzo logico zero; dopo la zona della memoria virtuale occupata da istruzioni segue la zona occupata dai dati. L insieme degli indirizzi logici di un programma è detto spazio logico di indirizzamento di quel programma; 2. il codice eseguibile del programma, generato dal compilatore, è quindi riferito alla memoria virtuale. Il Processore genera indirizzi logici sia per le istruzioni che per i dati; 3. il risultato della compilazione è un file binario ( file oggetto ) che, come ogni file, viene conservato permanentemente in memoria secondaria e che, in tempi successivi qualsiasi, può venire utilizzato per eseguire il programma; 4. quando viene eseguito, il programma viene allocato in una zona della memoria principale, la cui ampiezza ed i cui indirizzi non coincidono (tranne casi particolari) con quelli della memoria virtuale del programma. In generale, per poter sfruttare convenientemente la risorsa memoria principale, istante per istante ogni programma non è interamente allocato in memoria principale, né la parte allocata è memorizzata ad indirizzi contigui. La memoria principale viene allocata dinamicamente ad ogni programma, contando sul fatto che una copia intera, ed integra, del programma è sempre presente in memoria secondaria; 5. quando un programma viene allocato (o riallocato) in memoria principale, viene stabilita una corrispondenza tra gli indirizzi logici della parte allocata e gli indirizzi fisici in cui viene allocata. Questa funzione, detta funzione di rilocazione o di traduzione dell indirizzo, viene di norma implementata come una tabella associata al programma (Tabella di Rilocazione), che fa parte essa stessa della memoria virtuale ed è allocata essa stessa in memoria principale; 6. la funzione viene aggiornata (dalla funzionalità del sistema operativo relativa alla gestione della memoria principale) ogni volta che l allocazione del programma viene modificata. Ad esempio, in un certo istante un programma in esecuzione può avere bisogno di informazioni che non sono attualmente allocate in memoria principale. Queste verranno copiate da memoria secondaria a memoria principale. In generale, le nuove informazioni andranno a sostituirne altre meno urgenti (dello stesso programma o di altri programmi); se le informazioni sostituite sono state nel frattempo modificate (scritture in variabili), i loro valori verranno ricopiati da memoria principale nelle posizioni corrispondenti della memoria secondaria. Questi spostamenti (riallocazioni) comportano opportune modifiche della Tabella di Rilocazione del programma (dei programmi). Si noti che il file eseguibile, presente in memoria secondaria, è sempre una immagine affidabile del programma; 7. la traduzione dell indirizzo deve essere effettuata in modo molto efficiente (non più di un ciclo di clock del Processore), e quindi l accesso alla Tabella di Rilocazione viene effettuata con opportune soluzioni hardwarefirmware delegate ad una unità interposta tra il Processore e la memoria virtuale (Memory Management Unit, o MMU). Quanto finora sintetizzato ha importanti conseguenze sulla compilazione e sull esecuzione di programmi. Vediamone alcune Inizializzazione di variabili Il compilatore, durante la traduzione di un programma, sceglie gli indirizzi logici di istruzioni e dati, e quindi configura lo spazio di indirizzamento logico, cioè lo spazio occupato dalla memoria virtuale di quel programma. Nel far questo, il compilatore può assegnare valori iniziali a variabili appartenente alla parte dati della memoria virtuale, oltre che valori iniziali a registri generali. Ad altre informazioni, che non hanno un valore iniziale, verrà comunque riservato spazio in memoria virtuale, senza prevederne un contenuto specifico. Il file eseguibile contiene quindi informazioni inizializzate (tutte le istruzioni, alcuni dati in memoria, alcuni registri generali) e non inizializzate. Quando il (una parte del) programma verrà caricato in memoria per essere eseguito, automaticamente verranno inizializzate le locazioni di memoria principale nelle quali sono allocate istruzioni e dati (la parte delle istruzioni e dei dati allocata in memoria principale).

7 Trasferimenti di ingresso-uscita Un altro con concetto molto importante è legato all impatto che la memoria virtuale ha sull implementazione dei traferimenti di ingresso-uscita. L implementazione, detta Memory Mapped I/O, che viene di seguito sintetizzata, si trova nel Cap. VI, sez. 3, Cap. VII, sez. 1.2, e Cap. IX, sez Si consideri il seguente esempio: un programma che opera su un array A di N interi, assegna agli elementi di A i valori iniziali prelevandoli da un dispositivo di I/O (tastiera, disco, rete, ). Invece di introdurre nel programma complesse e intricate codice sequenze di istruzioni dipendenti dalla natura del dispositivo, si può più semplicemente ragionare come segue: a) qualunque informazione presente nel sistema, incluso il sottosistema di I/O, viene vista come una informazione nella memoria virtuale del programma che deve utilizzare tale informazione. Questo è vero non solo per le informazioni che verranno allocate in memoria principale, ma anche per quelle trasferite dai/verso i dispositivi di I/O; b) ogni unità di I/O viene vista come se fosse un modulo di memoria fisica: la memoria principale contiene quindi non solo il modulo (i moduli) della parte indicata come memoria principale in senso stretto, ma anche tutte le memorie di I/O. In effetti, questa astrazione è molto vicina la vero: le unità di I/O contengono una loro memoria fisica (anche molto grande, ad esempio, qualche Kilo fino a qualche centinaio di Mega), realizzata come complesso di RAM, ROM, registri e interfacce; c) il programma di cui sopra può essere scritto come segue: for (i = 0; i < N; i++) A[i] = B[i]; dove B[N] è un array di interi appartenente alla memoria virtuale del programma, ma allocato nella memoria fisica di una qualche unità di I/O. Durante l esecuzione dell istruzione (LOAD) per trasferire il valore del generico B[i] in un registro generale, la traduzione dell indirizzo logico di B[i] produrrà un indirizzo fisico che non è relativo alla memoria principale, bensì a quella specifica memoria di I/O. Sarà compito della MMU (si veda la fig. 2 del Cap. VII, sez. 1) instradare opportunamente la richiesta di accesso in memoria, attendere dall unità di I/O il risultato dell accesso e ritornarlo al Processore; d) la funzione di traduzione degli indirizzi, relativi a dati allocati nello spazio di I/O (come l array B nell esempio), è prevista staticamente in base ad informazioni che il compilatore ha sulla configurazione del sottosistema di I/O ed in particolare sulle memorie di I/O Caricamento ed esecuzione di un programma Si veda Cap. V, sez. 3.4 e 4.10, Cap. VI, sez e sez Di seguito è riportata la sintesi di questo concetto: ad ogni programma (processo) è associato un descrittore di processo (PCB) contenente varie informazioni di utilità durante la vita del programma stesso, in particolare: immagine dei valori dei registri generali, immagine del valore del contatore istruzioni, immagine della Tabella di Rilocazione, ed altre informazioni; il PCB fa parte della memoria virtuale del programma, ed è quindi inizializzato a tempo di compilazione. Ciò significa che il file eseguibile contiene, nella parte PCB, i valori iniziali di IC e dei registri generali; quando viene lanciato il comando di esecuzione di un certo programma, il gestore della memoria principale (sistema operativo) provvede a individuare (se possibile) una parte della memoria principale in cui allocare una porzione del programma ( working set del programma, vedi Cap. VIII, sez. 1.2). Tale porzione, che deve includere comunque il PCB, viene quindi copiata da memoria secondaria a memoria principale. Il PCB viene concatenato alla lista dei programmi eseguibili (Lista dei Processi Pronti, Cap. VI, sez. 1.3). Quando il Processore si rende disponibile, dal PCB primo in lista vengono copiate le immagini dei registri generali e del contatore istruzioni nei registri corrispondenti del Processore. Questo rende quindi possibile l inizializzazione dei registri RG e IC mediante una sequenza di istruzioni assembler. Se l ultima istruzione (START_PROCESS: vedi Cap. V, sez. 2.7) quella che provvede a caricare IC ed a fornire alla MMU le informazioni minime sulla nuova Tabella di Rilocazione, la prossima istruzione eseguita sarà la prima istruzione da cui deve iniziare (o riprendere) l esecuzione del nuovo programma. In termini di sistema operativo, la funzionalità ora vista corrisponde alla così detta creazione di un processo.

8 8 5. Processi cooperanti 5.1. Dai programmi ai processi Per svariate ragioni (costo, efficienza, messa a disposizione di servizi, gestione di risorse), in un sistema di elaborazione general-purpose coesistono, istante per istante, più programmi, alcuni applicativi (utenti), altri di sistema (sistema operativo), altri ancora per lo sviluppo di applicazioni (compilatori, debugger, monitor, editor, interfacce grafiche, ecc). La convenienza di questa visione si può vedere considerando il ciclo di vita di un generico programma applicativo; ad esempio: quando ne viene chiesta la compilazione, il sistema sarà generalmente già occupato ad eseguire altri programmi; quando ne viene chiesta l esecuzione, come sintetizzato nella sez. 4, l allocazione dinamica delle risorse (memoria principale) viene effettuata da altri programmi (di sistema) che coesistono con una o più applicazioni correnti; quando, durante l esecuzione, il programma rileva la mancanza di risorse necessarie (ad esempio, fault di pagina della memoria virtuale), occorre che esso cooperi con programmi di sistema opportuni (gestore della memoria); analogamente se, durante l esecuzione, un programma necessita di accedere a risorse gestite dal sistema (ad esempio, files). Questa coesistenza, detta anche multiprogrammazione (o altri termini), è implementata anche in un calcolatore con un solo processore. Sono i tempi morti che si verificano frequentemente durante l elaborazione di un programma a far sì che possano subentrare, al suo posto nell utilizzo della risorsa Processore, altri programmi. Ovviamente, avendo più Processori (più CPU), l occasione di dar luogo a multiprogrammazione è ancora più evidente: nello stesso istante, tanti programmi per quante sono le CPU sono effettivamente in esecuzione; cioè, si ha parallelismo a livello di programmi. Avendo invece un unico Processore, la multiprogrammazione contribuisce a sfruttare meglio le risorse del sistema (Processore e memoria principale, in primis), dando l illusione, su un certo arco di tempo, che più programmi siano in esecuzione contemporaneamente: in realtà non si ha vero parallelismo, ma parallelismo simulato. Il concetto di processo sta a significare un programma capace di essere eseguito contemporaneamente ad altri, ed in generale di cooperare con altri, dove la contemporaneità può essere effettiva (parallelismo in senso stretto) o simulata (in questo caso si usa il termine concorrenza, più generale di parallelismo). Il concetto di processo è quindi un caso particolare del concetto di modulo di elaborazione (Cap. I, sez. 2), visto ai livelli delle applicazioni e del sistema operativo, così come lo sono le unità di elaborazione a livello firmware. Così come le unità, anche i processi si possono comporre affinché cooperino ad un fine comune (una applicazione). A livello dei processi, un sistema di elaborazione va quindi visto come una collezione (in generale dinamica) di processi cooperanti. Una tipica situazione è quella in cui si distinguono due sottoinsiemi di processi: processi di sistema (operativo): sono processi che esistono permanentemente nel sistema, e che sono delegati alla gestione di risorse e servizi nei confronti di richieste delle applicazioni, ad esempio gestione della memoria principale, gestione della memoria secondaria, gestione dei file, gestione di dispositivi periferici (driver), gestione delle applicazioni (shell). Oltre che con le applicazioni, i processi di sistema cooperano tra loro: ad esempio, il processo shell coopera almeno con il gestore della memoria principale e con il gestore dei file, il gestore della memoria principale può cooperare con il gestore dei file e con il driver del disco, ecc. In sintesi, il sistema operativo può esser visto come un programma parallelo; processi applicativi, che derivano dalla compilazione e dalla richiesta di esecuzione di programmi applicativi. Questi processi, in generale, nascono e muoiono. Se si tratta di processi derivati da programmi sequenziali, i processi applicativi non cooperano direttamente tra loro, ma solo con i processi di sistema. È però possibile avere anche programmi paralleli a livello di applicazioni, pur di adottare opportuni linguaggi ed ambienti di programmazione per il calcolo parallelo e distribuito: in questo caso, una applicazione è costituita da più processi tra loro cooperanti (oltre che cooperare con i processi di sistema) Processi cooperanti a scambio di messaggi Un modo elegante (non l unico, ma del tutto reale e molto frequente) di vedere la cooperazione tra processi è quella di considerare, come modalità di cooperazione, lo scambio di messaggi nel modello ad ambiente locale (Cap. I, sez. 3); in altri termini, ragionare come a livello di unità: la composizione di più processi, ognuno con il proprio ambiente locale, si ottiene facendoli comunicare attraverso canali di comunicazione.

9 9 Si consideri il seguente esempio: un processo applicativo (APPL), sequenziale al suo interno, ha bisogno di accedere a certi file, e quindi di cooperare con il processo gestire dei file (G_FILE), e di inviare dati ad una stampante, e quindi di cooperare con il driver della stampante (D_PRINTER); inoltre, come tutti i processi, può aver bisogno di cooperare con il processo gestore della memoria principale (G_MEM), in seguito ad eventi che attivano l allocazione dinamica della memoria principale stessa. A loro volta, i processi di sistam coinvolti hanno bisogno di cooperare con altri, come ad esempio il driver del disco (D_DISC). La configurazione di processi e canali in gioco può essere quella mostrata in Fig.2: G_MEM L APPL G_FILE D_PRINTER D_DISC Fig. 2 Supponiamo che, in un certo punto del programma, APPL debba leggere in file di nome MY_FILE, e sia BUF la variabile locale in cui copiare il valore del file. Nel modello di Fig. 2, la compilazione del comando di lettura-file consisterà in un comando per inviare al processo G_FILE un messaggio contenente l identificatore dell operazione richiesta (read_file) e il nome del file da leggere (MY_FILE). Sarà interamente compito del processo G_FILE effettuare tutte le azioni per controllare la legittimità di APPL ad accedere in lettura a quel certo file, per leggere fisicamente il file da disco, interagendo allo scopo con D_DISCO, e quindi inviare il valore del file ad APPL con una indicazione di esito (se negativo, il valore del file non è significativo). APPL, da parte sua, dopo aver inviato a G_FILE il messaggio di lettura-file, ed eventualmente avere eseguito altre azioni indipendenti dal valore del file, attende di ricevere un messaggio da G_FILE contenente appunto l esito e l eventuale valore del file che assegnerà alla variabile BUF. Supponiamo di disporre di un formalismo (linguaggio di programmazione concorrente) in cui sia possibile scrivere processi mediante gli usuali comandi sequenziali ed, in più, mediante i comandi per scambiare messaggi con altri processi (si veda Cap. I, sez. 3.4). Una sintassi di tali comandi può essere: send (identificatore di canale, valore) receive (identificatore di canale, identificatore di variabile targa) Oltre a questi comandi, normalmente ne sono presenti altri, in particolare ne occorre almeno un altro per il controllo del nondeterminismo nelle comunicazioni (Cap. V, sez. 3.5). I canali, con tipo, sono contraddistinti da un identificatore unico. I valori di messaggi e le variabili targa possono essere strutturati come tuple. Nel nostro caso, una possibile compilazione di APPL può essere la seguente:

10 10 C1 send (CH_FILE_OUT, (read_file, MY_FILE)) C2 receive (CH_FILE_IN, (esito_file, BUF) test di esito_file e gestione dell eventuale eccezione C3 (da qui in poi il codice è eseguito solo se esito_file = OK) send (CH_PRINTER_OUT, RESULT) C2 receive (CH_FILE_IN, esito_printer) test di esito_printer e gestione dell eventuale eccezione C4 C1, C2, C3, C4 sono sequenze di istruzioni assembler relative alla compilazione dell elaborazione propria di APPL. RESULT è una struttura dati il cui valore deve essere stampato. CH_FILE_OUT, CH_FILE_IN, CH_PRINTER_OUT, CH_PRINTER_IN sono nomi mnemonici di canali che, in realtà, consisteranno in identificatori unici interi. I comandi send e receive vanno intesi come sostituiti da sequenze generali di istruzioni che implementano le primitive di invio e di ricezione di messaggi: cioè, queste sequenze sono l interprete dai comandi send e receive. Equivalentemente, nei punti in cui compaiono i comandi send e receive il compilatore può avere inserito chiamate alle procedure che consistono nel suddetto interprete. Infine, si noti come che la strutturazione a processi comunicanti e la strutturazione ad oggetti: nel primo caso, le interfacce, mediante le quali viene invocato un metodo di una istanza di classe, corrispondono ai canali di comunicazione. Ad esempio, il canale CH_FILE_OUT è l entità attraverso la quale un processo applicativo può invocare la funzionalità di lettura/scrittura/creazione di file; per avere una analogia ancora più forte, avremmo potuto introdurre più canali in ingresso a G_FILE, ognuno corrispondente ad una specifica operazione, eliminando dal messaggio la presenza del parametro operazione Sistema operativo e compilazione di programmi applicativi Quanto esemplificato nella sezione precedente ha carattere di generalità: la compilazione di un programma applicativo produce un processo che contiene tutte le chiamate al sistema operativo, cioè invocazioni all interprete delle funzionalità di gestione delle risorse necessarie al programma stesso. L interprete è il sistema operativo stesso. Consideriamo un sistema operativo a nucleo minimo, nel quale tutta la gestione delle risorse (eccetto dei processori) è effettuata da appositi processi (gestori dello spazio di memoria principale e dello spazio di memoria secondaria, file system, driver delle unità di I/O). Se il linguaggio concorrente di sistema è a scambio di messaggi, i processi di sistema prevedono canali di comunicazione (oltre che con altri processi di sistema) con un certo numero massimo di processi applicativi. Questo permette di realizzare a tempo di compilazione, in modo agevole e modulare, l aggancio tra processi applicativi e processi di sistema. Ad esempio, se un programma applicativo contiene comandi per leggere/scrivere certi file, o per stampare certi dati, il processo derivante dalla sua compilazione contiene, in corrispondenza di tali comandi, chiamate delle procedure send e/o receive necessarie per effettuare richieste ai processi gestori (nell esempio, file system, driver della stampante) e ricevere eventuali risposte, come schematizzato in Fig. 3: I canali sono tutti identificati da interi noti a priori e a disposizione del compilatore per produrre il codice dei comandi di invio e ricezione messaggi. Ad esempio, il compilatore sa che il canale CH_FILE_IN in ingresso al processi gestore dei file ha identificatore 37. Questo valore verrà utilizzato in tutti i comandi send corrispondenti alla richiesta di lettura file, qualunque sia il processo applicativo in cui tale comando è inserito (dal compilatore stesso); in questa visione, i canali sono in gran parte asimmetrici.

11 11 Processo applicativo Gestore memoria principale Gestore File (File System) Driver disco Driver stampante... Driver rete I/O disc I/O printer I/O net... Fig. 3 Allo stesso modo, ai canali d ingresso dei processi applicativi vengono assegnati, a compilazione, identificatori appartenenti ad un insieme di interi noto a priori. Si tenga conto che questa soluzione è corretta in quanto gli stessi processi applicativi sono contraddistinti da identificatori unici, e questi sono in numero limitato in quanto esiste un numero massimo di processi (ad esempio, 20000) che possono essere ammessi al sistema contemporaneamente; ogni volta che un processo applicativo termina, il suo identificatore verrà riutilizzato per contraddistinguere un processo creato successivamente. 6. Introduzione ai sistemi operativi: il nucleo Dopo l introduzione al concetto di processo e di processo cooperante della sez. 5, lo studente può passare allo studio del Cap. VI della Dispensa. In particolare nella sez. 1.3 si studia come implementare il concetto di processo, dando luogo al così detto nucleo del sistema operativo visto come supporto a tempo di esecuzione (cioè, l interprete) del linguaggio concorrente di sistema, ad esempio come interprete di un linguaggio sequenziale arricchito di comandi per la cooperazione a scambio di messaggi. Le sezioni che seguono servono da ulteriore chiarimento di quanto esposto nella sez. 1.3 del Cap. VI Scheduling a basso livello, architettura astratta e architetture concrete Consideriamo una computazione, ai livelli delle Applicazioni e del Sistema Operativo, costituita da un certo numero di processi cooperanti P 1, P 2,, P n. L architettura astratta che supporta l elaborazione di tale computazione è costituita da tanti processori virtuali, PV 1, PV 2,, PV n, per quanti sono i processi: il generico PV i è delegato all elaborazione di P i. Inoltre, supporremo che tale architettura astratta sia un multiprocessor a memoria condivisa, nel quale (come mostrato nella figura seguente) tutti i processori (CPU con propria memoria locale o cache) sono connessi ad una stessa memoria principale, nella quale sono allocate, in particolare, strutture dati condivise tra i processi, come le strutture dati di nucleo (Figura 4):

12 12 Memoria Principale Condivisa arbitro di memoria e comunicazione tra processori PV 1 PV i PV n Fig. 4 Con questa architettura astratta gli stati di avanzamento sono solo quelli di Esecuzione e di Attesa. Quest ultimo è di Attesa Attiva, in quanto, una volta che il generico P i attenda il verificarsi di un certo evento, PV i non ha alcun altro processo da eseguire e può solo essere sbloccato da una esplicita segnalazione da parte di un altro processore virtuale (in modo del tutto analogo a quanto avviene tra unità comunicanti a livello firmware). Il nucleo, ed in particolare la funzionalità di scheduling a basso livello, ha il compito di emulare l architettura astratta su una specifica architettura concreta. Quest ultima potrà essere ancora un multiprocessor, ma con un numero di processori minore di n o,come caso particolare, un uniprocessor. Per rendere possibile tale emulazione: agli stati di avanzamento viene aggiunto lo stato di Pronto (vedi Dispensa, Cap. VI, sez. 1.3): i descrittori (PCB) di tutti i processi in stato di pronto sono collegati da un unica Lista Pronti (nel caso più semplice con disciplina FIFO, più spesso con disciplina a priorità); lo stato di Attesa è ora di Attesa Passiva: il processore su cui veniva eseguito il processo che si sospende viene reso disponibile al primo processo in Lista Pronti. Questa modalità di attesa viene introdotta per ragioni di efficienza (miglior sfruttamento dei processori) e per ragioni di correttezza (se l architettura concreta è uniprocessor, non appena un processo si sospendesse in attesa di un evento che deve essere provocato da un altro processo, il sistema risulterebbe bloccato in eterno). L elaborazione della computazione a processi sull architettura concreta procede quindi con il meccanismo della multiprogrammazione, o interleaving: in un uniprocessor quei processi, che sarebbero eseguibili simultaneamente, vengono eseguiti in un qualsiasi ordine sull unico processore disponibile, sfruttando le transizioni di stato di avanzamento (concorrenza); in un multiprocessor si ha anche un certo parallelismo effettivo, ma viene ancora sfruttato l effetto concorrenza su ogni processore Interruzioni ed eccezioni Per il trattamento di questi eventi, che è parte integrante del nucleo, è necessario un minimo di supporto a livello firmware: si veda nelle Dispense il Cap. VI, sez. 2.5 e 3.2, e il Cap. VII, sez Prerilascio e quanti di tempo Nella sez del Cap. VI è indicato come il prerilascio di un processore si possa verificare in due occasioni distinte: i) un processo A in Attesa viene svegliato da un processo B ed A ha priorità maggiore di B (la priorità di un processo è indicata da un campo del proprio PCB): A passa direttamente in Esecuzione sul processore utilizzato da B, e B passa in stato di Pronto; ii) un processo A in Esecuzione passa in stato di Pronto per permettere al primo processo Pronto di passare in Esecuzione: questo meccanismo viene utilizzato nella gestione del processore a quanti di tempo (time sharing), in modo da bilanciare l utilizzazione del processore stesso da parte di processi lunghi, e/o con scarse occasioni di cooperazione con altri processi, e di processi corti, e/o con frequenti interazioni con altri processi.

13 13 Lo scheduling a quanti di tempo utilizza una apposita unità di I/O che funge da Timer: a distanza di un quanto di tempo (scandito da un certo numero di cicli di clock dell unità; ad esempio, circa un milione di cicli di clock per un quanto di tempo dell ordine del msec), tale unità invia una interruzione di fine quanto di tempo : il suo trattamento consiste nella sequenza di azioni per effettuare il prerilascio del processore. Il funzionamento a quanti di tempo, insieme al meccanismo delle interruzioni ed all ordine casuale con cui i processi si pongono in Lista Pronti, contribuisce a rendere ancora sostanzialmente impredicibile l ordine con il quale i processi utilizzano i processori in un funzionamento in multiprogrammazione o interleaving Indivisibilità Tutti problemi di sincronizzazione e consistenza di strutture dati condivise, che si possono verificare sull architettura astratta, si verificano anche su una qualunque architettura concreta. La soluzione di tali problemi sarà di volta in volta specifica dell architettura concreta considerata. Si consideri il seguente esempio: un processo A intende svegliare un processo B, e contemporaneamente un processo C intende svegliare un processo D. Nell architettura astratta A e C provano ad appendere alla Lista Pronti B e D rispettivamente: è evidente che queste due operazioni devono essere eseguite in modo mutuamente esclusivo (in un ordine qualsiasi, purchè una dopo l altra) in quanto, altrimenti, il valore finale della struttura dati Lista Pronti potrebbe risultare impredicibile. Occorre garantire che la sequenza di azioni per effettuare la fase di sveglia sia indivisibile, cioè che nessun altro processo effettui contemporaneamente, sulla stessa struttura dati, una sequenza di azioni incompatibile. Altri esempi di sequenze di azioni incompatibili se eseguite contemporaneamente, e dunque da rendere indivisibili, sono: la manipolazione del buffer, o di altri campi, di un canale di comunicazione da parte del processo mittente e del processo destinatario di comunicazioni; la manipolazione della Lista Pronti per eseguire una sveglia e per eseguire contemporaneamente una commutazione di contesto (a seconda della realizzazione della Lista Pronti). Nell architettura astratta il meccanismo per rendere indivisibili sequenze di operazioni, eseguite da processori virtuali distinti, utilizza la struttura di arbitraggio della memoria condivisa: un processore virtuale segnala all arbitro (mediante una apposita operazione di lock) che intende iniziare una sequenza indivisibile e, alla fine della sequenza, segnala all arbitro che la sequenza si è conclusa (unlock). Durante tutta la sequenza di accessi indivisibile, l arbitro non permette ad altri processori virtuali di accedere alla memoria o, almeno, alla specifica struttura dati sulla quale è in corso la sequenza indivisibile. Nell architettura uniprocessor il problema dell indivisibilità si presenta allo stesso modo, a causa dell impredicibilità con la quale avviene l utilizzazione del processore da parte dei processi eseguibili: come detto, tale impredicibilità è dovuta al meccanismo delle interruzioni, al meccanismo dello scheduling a quanti di tempo ed all ordine con cui i processi si pongono in Lista Pronti. Nell esempio in cui A vuole svegliare B e C vuole svegliare D, supponiamo che A sia in Esecuzione e C in Pronto e che, prima di aver concluso la sequenze di azioni per appendere il PCB di B alla Lista Pronti, A venga portato in stato di Pronto in seguito allo scadere del suo quanto di tempo oppure in seguito ad una qualunque altra interruzione che provochi un prerilascio. Se è proprio C ad entrare in Esecuzione, C si trova a lavorare sulla Lista Pronti lasciata da A in uno stato non consistente (il risultato finale probabilmente è che né B né D passeranno in stato di Pronto). Analoghe considerazioni valgono per tutti gli altri esempi. Nell architettura uniprocessor, per quanto ora detto il meccanismo per assicurare l indivisibilità consiste nella disabilitazione delle interruzioni. In una architettura multiprocessor concreta, oltre al meccanismo della disabilitazione delle interruzioni per ogni processore, deve anche essere adottata una tecnica, come quella descritta per l architettura astratta, basata su operazioni lock-unlock sulla memoria condivisa per impedire che più processori contemporaneamente effettuino sequenze incompatibili sulle stesse strutture dati. Durante tutto il tempo in cui ad un processore è impedito l accesso alla memoria, il processo da esso eseguito effettua dunque Attesa Attiva Spazi di indirizzamento Come discusso a più riprese, lo spazio di indirizzamento di un processo è l insieme di tutti i possibili indirizzi logici che il processo può generare trovandosi in stato di Esecuzione. Tale spazio comprende gli indirizzi per le seguenti informazioni: a) codice del programma;

Il Sistema Operativo

Il Sistema Operativo Il Sistema Operativo Il sistema operativo Con il termine sistema operativo si intende l insieme di programmi e librerie che opera direttamente sulla macchina fisica mascherandone le caratteristiche specifiche

Dettagli

Modelli di interazione tra processi

Modelli di interazione tra processi Modelli di interazione tra processi Modello a memoria comune (ambiente globale, global environment) Modello a scambio di messaggi (ambiente locale, message passing) 1 Modello a memoria comune Il sistema

Dettagli

L hardware da solo non è sufficiente per il funzionamento dell elaboratore È necessario introdurre il software:

L hardware da solo non è sufficiente per il funzionamento dell elaboratore È necessario introdurre il software: Il Software L hardware da solo non è sufficiente per il funzionamento dell elaboratore È necessario introdurre il software: un insieme di programmi che permettono di trasformare un insieme di circuiti

Dettagli

Modelli di interazione tra processi

Modelli di interazione tra processi Modelli di interazione tra processi Modello a memoria comune (ambiente globale, global environment) Modello a scambio di messaggi (ambiente locale, message passing) 1 Modello a memoria comune Il sistema

Dettagli

Modelli di interazione tra processi

Modelli di interazione tra processi Modelli di interazione tra processi Modelli di interazione Modello a memoria comune (ambiente globale) Modello a scambio di messaggi (ambiente locale, message passing) Modello a memoria comune Il sistema

Dettagli

Sistemi Operativi: Concetti Introduttivi

Sistemi Operativi: Concetti Introduttivi Sistemi Operativi: Concetti Introduttivi 1.1 Principali funzioni di un Sistema Operativo 1.2 Cenni Storici 1.3 Classificazione dei Sistemi Operativi 1.4 Struttura dei Sistemi Operativi 1.5 Processi e gestione

Dettagli

Modello a scambio di messaggi

Modello a scambio di messaggi Modello a scambio di messaggi Aspetti caratterizzanti il modello Canali di comunicazione Primitive di comunicazione 1 Aspetti caratterizzanti il modello modello architetturale di macchina (virtuale) concorrente

Dettagli

Lezione 16. Il Software di base

Lezione 16. Il Software di base Lezione 16 Software di base Il Software di base Con il termine software di base si intende l insieme dei programmai che consentono ad un utente di eseguire operazioni base come costruire e mandare in esecuzione

Dettagli

Architettura hardware

Architettura hardware Architettura hardware la parte che si può prendere a calci Architettura dell elaboratore Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione

Dettagli

Informatica Generale 07 - Sistemi Operativi:Gestione dei processi

Informatica Generale 07 - Sistemi Operativi:Gestione dei processi Informatica Generale 07 - Sistemi Operativi:Gestione dei processi Cosa vedremo: Esecuzione di un programma Concetto di processo Interruzioni Sistemi monotasking e multitasking Time-sharing Tabella dei

Dettagli

Note sull utilizzazione di componenti logici di tipo memoria

Note sull utilizzazione di componenti logici di tipo memoria Architettura degli Elaboratori, a.a. 2005-06 Note sull utilizzazione di componenti logici di tipo memoria Queste note precisano e completano il contenuto nel Cap. III, sez. 7 delle Dispense, in particolare

Dettagli

I SISTEMI OPERATIVI. Insieme di programmi che implementano funzioni essenziali per l uso di un sistema elaboratore.

I SISTEMI OPERATIVI. Insieme di programmi che implementano funzioni essenziali per l uso di un sistema elaboratore. I SISTEMI OPERATIVI Insieme di programmi che implementano funzioni essenziali per l uso di un sistema elaboratore. Le funzioni di un S.O. non sono definibili in modo esaustivo e puntuale così come non

Dettagli

La memoria-gerarchia. Laboratorio di Informatica - Lezione 3 - parte I La memoria - La rappresentazione delle informazioni

La memoria-gerarchia. Laboratorio di Informatica - Lezione 3 - parte I La memoria - La rappresentazione delle informazioni La memoriaparametri di caratterizzazione Un dato dispositivo di memoria è caratterizzato da : velocità di accesso, misurata in base al tempo impiegato dal processore per accedere ad uno specificato indirizzo

Dettagli

Capitolo 6 Le infrastrutture SoftWare

Capitolo 6 Le infrastrutture SoftWare Capitolo 6 Le infrastrutture SoftWare Funzioni del sistema operativo Rendere utilizzabili le risorse fisiche presenti nel sistema informatico: garantire la correttezza e la precisione nell elaborazione

Dettagli

Livelli del sottosistema di I/O

Livelli del sottosistema di I/O Input/Output 1 Livelli del sottosistema di I/O Software di I/O di livello utente Software di sistema indipendente dal dispositivo Driver dei dispositivi Gestori delle interruzioni Hardware Modo utente

Dettagli

Struttura Logica del S.O:

Struttura Logica del S.O: Avvertenza Quanto segue NON è un libro, ma è una copia dei lucidi usati a lezione che NON sostituisce i libri di testo adottati e consigliati per l insegnamento di Informatica Generale. Questa copia è

Dettagli

Organizzazione di un SO monolitico

Organizzazione di un SO monolitico Organizzazione di un SO monolitico Applicazioni Interprete di comandi (shell) Interfaccia grafica (desktop) Gestore del Gestore delle processore / Gestore della periferiche/ Scheduler(s) memoria dispositivi

Dettagli

Il Sistema Operativo. Informatica Sistema Operativo 1

Il Sistema Operativo. Informatica Sistema Operativo 1 Il Sistema Operativo Informatica Sistema Operativo 1 O.S.:.: un intermediario SW Applicativo Sistema Operativo HW Informatica Sistema Operativo 2 O.S. vs applicativi Applicativi accesso a un insieme ridotto

Dettagli

interoperabilità fra dispositivi forniti da diversi produttori; superare i problemi legati alla limitazione del numero di risorse.

interoperabilità fra dispositivi forniti da diversi produttori; superare i problemi legati alla limitazione del numero di risorse. Capitolo 7 Le infrastrutture SoftWare Funzioni del sistema operativo Rendere utilizzabili le risorse fisiche presenti nel sistema informatico: correttezza e precision; anywhere, anytime; affidabilità,

Dettagli

Componenti e connessioni. Capitolo 3

Componenti e connessioni. Capitolo 3 Componenti e connessioni Capitolo 3 Componenti principali CPU (Unità Centrale di Elaborazione) Memoria Sistemi di I/O Connessioni tra loro Architettura di Von Neumann Dati e instruzioni in memoria (lettura

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 205-6 Pietro Frasca Lezione 3 Martedì 7--205 Paginazione su richiesta Con la tecnica della paginazione

Dettagli

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori AXO - Architettura dei Calcolatori e Sistema Operativo organizzazione strutturata dei calcolatori I livelli I calcolatori sono progettati come una serie di livelli ognuno dei quali si basa sui livelli

Dettagli

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Lez. 5 La Programmazione. Prof. Salvatore CUOMO Lez. 5 La Programmazione Prof. Salvatore CUOMO 1 2 Programma di utilità: Bootstrap All accensione dell elaboratore (Bootsrap), parte l esecuzione del BIOS (Basic Input Output System), un programma residente

Dettagli

Linguaggi di alto livello, compilatori e interpreti

Linguaggi di alto livello, compilatori e interpreti Linguaggi di alto livello, compilatori e interpreti Percorso di Preparazione agli Studi di Ingegneria Università degli Studi di Brescia Docente: Massimiliano Giacomin Il punto della situazione STATO DATI

Dettagli

Corso di Linguaggi di Programmazione + Laboratorio

Corso di Linguaggi di Programmazione + Laboratorio Corso di inguaggi di Programmazione + aboratorio Capitolo 1 - Introduzione Si ringrazia il Dott. Marco de Gemmis per la collaborazione nella predisposizione del materiale didattico Apprendimento di un

Dettagli

Linguaggi, compilatori e interpreti

Linguaggi, compilatori e interpreti Linguaggi, compilatori e interpreti 1 Il codice macchina Ciascun calcolatore ha un ampio insieme di istruzioni che è in grado di eseguire. Le istruzioni vengono rappresentate mediante sequenze di bit 001000100011

Dettagli

LA GESTIONE DELLA I/O

LA GESTIONE DELLA I/O LA GESTIONE DELLA I/O Il S.O. È l interfaccia tra l hardware e i programmi che effettuano richieste di I/O Sottosistema di I/O strutturato in moduli chiamati DRIVER uno per ogni dispositivo I Driver rendono

Dettagli

Programmi e Oggetti Software

Programmi e Oggetti Software Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 2 Programmi e Oggetti Software Alfonso Miola Settembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Programmi e Oggetti Software

Dettagli

Calcolatori Elettronici Parte VIII: linguaggi assemblativi

Calcolatori Elettronici Parte VIII: linguaggi assemblativi Anno Accademico 2013/2014 Calcolatori Elettronici Parte VIII: linguaggi assemblativi Prof. Riccardo Torlone Universita di Roma Tre Linguaggi di Programmazione Linguaggi ad alto livello Maggiore espressività

Dettagli

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema Algoritmo 2 Procedimento di risoluzione di un problema La programmazione Ver. 2.4 Permette di ottenere un risultato eseguendo una sequenza finita di operazioni elementari Esempi: Una ricetta di cucina

Dettagli

Esercizio 1. Progettare la PO a partire dal microprogramma eseguibile e successivamente:

Esercizio 1. Progettare la PO a partire dal microprogramma eseguibile e successivamente: Architettura degli Elaboratori Prima prova di verifica intermedia - A.A. 2014-2015 Riportare Nome, Cognome, Numero di matricola e Corso di appartenenza su tutti i fogli consegnati. I risultati saranno

Dettagli

Il linguaggio di programmazione Python

Il linguaggio di programmazione Python Università Roma Tre Dipartimento di Matematica e Fisica Percorso Abilitante Speciale Classe A048 Matematica Applicata Corso di Informatica Il linguaggio di programmazione Python Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Macchine Astratte. Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari. Linguaggi di Programmazione feb, 2016

Macchine Astratte. Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari. Linguaggi di Programmazione feb, 2016 Macchine Astratte Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione 010194 29 feb, 2016 Sommario 1 Introduzione Macchina astratta Interprete Implementazione

Dettagli

Il Sistema Operativo fa parte del software di base; e` costituito da un insieme di programmi che interagiscono e cooperano per:

Il Sistema Operativo fa parte del software di base; e` costituito da un insieme di programmi che interagiscono e cooperano per: Il Sistema Operativo Il Sistema Operativo fa parte del software di base; e` costituito da un insieme di programmi che interagiscono e cooperano per: gestire efficientemente l'elaboratore e le sue periferiche,

Dettagli

Bootstrap. Bootstrap. Shutdown. Struttura di un SO. Elementi principali di un SO:

Bootstrap. Bootstrap. Shutdown. Struttura di un SO. Elementi principali di un SO: Bootstrap Bootstrap All accensione di un calcolatore vengono attivati programmi di diagnostica scritti nella ROM (Read Only Memory) che verificano l assenza di guasti Poi viene attivato il programma di

Dettagli

Parte II. Introduzione ai sistemi operativi e WindowsX. Parte II 1

Parte II. Introduzione ai sistemi operativi e WindowsX. Parte II 1 Parte II Introduzione ai sistemi operativi e WindowsX Parte II 1 tutto è un programma Insieme di istruzioni che il calcolatore deve eseguire Programma Input Calcolatore Output Parte II 2 Come comunicare

Dettagli

Architettura di Von Neumann

Architettura di Von Neumann Architettura di Von Neumann L architettura è ancora quella classica sviluppata da Von Neumann nel 1947. L architettura di Von Neumann riflette le funzionalità richieste da un elaboratore: memorizzare i

Dettagli

Corso di Fondamenti di Informatica Linguaggi di Programmazione

Corso di Fondamenti di Informatica Linguaggi di Programmazione Corso di Fondamenti di Informatica Linguaggi di Programmazione Anno Accademico Francesco Tortorella Linguaggi di programmazione Un calcolatore basato sul modello di von Neumann permette l esecuzione di

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic Ada

Dettagli

La macchina di Von Neumann

La macchina di Von Neumann Università degli Studi di Palermo Facoltà di Ingegneria La macchina di Edoardo Ardizzone & Ignazio Infantino Appunti per il corso di Fondamenti di Informatica Corso di Laurea in Ingegneria Informatica

Dettagli

COMPILAZIONE. Tarsformazione di linguaggi

COMPILAZIONE. Tarsformazione di linguaggi COMPILAZIONE Tarsformazione di linguaggi Le fasi della compilazione File sorgente Compilazione File sorgente File sorgente File sorgente Compilazione Compilazione Compilazione Libreria di run-time File

Dettagli

PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE

PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE 1 ALGORITMO, PROGRAMMA, PROCESSO Algoritmo Procedimento logico che deve essere eseguito per risolvere un determinato problema. Programma Descrizione di un

Dettagli

CLASSIFICAZIONE DEI SISTEMI OPERATIVI (in ordine cronologico)

CLASSIFICAZIONE DEI SISTEMI OPERATIVI (in ordine cronologico) CLASSIFICAZIONE DEI SISTEMI OPERATIVI (in ordine cronologico) - Dedicati Quelli dei primi sistemi operativi. La macchina viene utilizzata da un utente per volta che può eseguire un solo programma per volta.

Dettagli

Struttura interna del sistema operativo Linux

Struttura interna del sistema operativo Linux Struttura interna del sistema operativo Linux 5. I device driver A cura di: Anna Antola Giuseppe Pozzi DEI, Politecnico di Milano anna.antola/giuseppe.pozzi@polimi.it -versione del 30 marzo 2004-1-04.-04

Dettagli

Il calcolatore. È un sistema complesso costituito da un numero elevato di componenti. è strutturato in forma gerarchica

Il calcolatore. È un sistema complesso costituito da un numero elevato di componenti. è strutturato in forma gerarchica Il calcolatore È un sistema complesso costituito da un numero elevato di componenti. è strutturato in forma gerarchica ogni livello di descrizione è caratterizzato da una struttura rappresentante l organizzazione

Dettagli

Traduzione ed Interpretazione

Traduzione ed Interpretazione Traduzione ed Interpretazione Queste sconosciute Siano L Linguaggio ad alto livello M L Macchina astratta di L M 0 Macchina ospite Implementazione interpretativa di L Implementazione compilativa di L Simulazione

Dettagli

TEORIA DEI SISTEMI OPERATIVI. Sistemi monoprogrammatie multiprogrammati

TEORIA DEI SISTEMI OPERATIVI. Sistemi monoprogrammatie multiprogrammati TEORIA DEI SISTEMI OPERATIVI Sistemi monoprogrammatie multiprogrammati 1 STRUTTURA DEL SISTEMA OPERATIVO UTENTE La struttura di un sistema operativo è di tipo gerarchico: i programmi che lo compongono

Dettagli

Macchine astratte, linguaggi, interpretazione, compilazione

Macchine astratte, linguaggi, interpretazione, compilazione Macchine astratte, linguaggi, interpretazione, compilazione 1 Macchine astratte una collezione di strutture dati ed algoritmi in grado di memorizzare ed eseguire programmi componenti della macchina astratta

Dettagli

Il Modello a scambio di messaggi

Il Modello a scambio di messaggi Il Modello a scambio di messaggi 1 Interazione nel modello a scambio di messaggi Se la macchina concorrente e` organizzata secondo il modello a scambio di messaggi: PROCESSO=PROCESSO PESANTE non vi è memoria

Dettagli

Fondamenti di Informatica T. Il Software

Fondamenti di Informatica T. Il Software Il Software TECNOLOGIA DIGITALE CPU, memoria centrale e dispositivi sono realizzati con tecnologia elettronica digitale. Dati ed operazioni vengono codificati a partire da due valori distinti di grandezze

Dettagli

Sistemi Operativi. Sistemi I/O SISTEMI DI INPUT/OUTPUT. Hardware di I/O. Interfaccia di I/O per le applicazioni. Sottosistema per l I/O del kernel

Sistemi Operativi. Sistemi I/O SISTEMI DI INPUT/OUTPUT. Hardware di I/O. Interfaccia di I/O per le applicazioni. Sottosistema per l I/O del kernel SISTEMI DI INPUT/OUTPUT 10.1 Sistemi I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per l I/O del kernel Trasformazione delle richieste di I/O Stream Prestazioni 10.2 I/O Hardware

Dettagli

Capitolo 5 Elementi architetturali di base

Capitolo 5 Elementi architetturali di base Capitolo 5 Elementi architetturali di base Giuseppe Lami Istituto di Scienza e Tecnologie dell Informazione CNR Via Moruzzi, 1 - Pisa giuseppe.lami@isti.cnr.it Struttura - Unità di elaborazione e controllo

Dettagli

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione DAGLI ALGORITMI AI LINGUAGGI Linguaggi di Programmazione E` una notazione con cui e` possibile descrivere gli algoritmi. Programma: e` la rappresentazione di un algoritmo in un particolare linguaggio di

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

Il Sistema Operativo Concorrenza e Grafi di precedenza

Il Sistema Operativo Concorrenza e Grafi di precedenza ISTITUTO TECNICO SECONDO BIENNIO GIORGIO PORCU www.thegiorgio.it Sommario Elaborazione concorrente Elaborazione sequenziale Elaborazione concorrente Elaborazione parallela Grafi di Precedenza Grafi di

Dettagli

Operazioni di I/O. Schema di collegamento fra dispositivi periferici e CPU

Operazioni di I/O. Schema di collegamento fra dispositivi periferici e CPU Operazioni di I/O 1 Schema di collegamento fra dispositivi periferici e CPU Memoria CPU buffer interfaccia Registro di controllo Registro Di stato Unità di controllo Dispositivo fisico 2 1 Unità di interfaccia

Dettagli

Input/Output. Livelli del sottosistema di I/O

Input/Output. Livelli del sottosistema di I/O Input/Output 1 Livelli del sottosistema di I/O Software di I/O di livello utente Software di sistema indipendente dal Di Driver dei didispositivi itii Gestori delle interruzioni Hardware utente kernel

Dettagli

Introduzione al funzionamento di un calcolatore elettronico

Introduzione al funzionamento di un calcolatore elettronico 1 / 21 Introduzione al funzionamento di un calcolatore elettronico Natascia Piroso 23 settembre 2009 2 / 21 Sommario Che cos è un calcolatore? 1 Che cos è un calcolatore? Definizioni preliminari Il calcolatore

Dettagli

Sistemi operativi e distribuiti

Sistemi operativi e distribuiti Sistemi operativi e distribuiti La memoria Indirizzi fisici e indirizzi logici Importante separazione di concetti Ci permette di separare la parte software da la parte hardware Indirizzo logico (o virtuale):

Dettagli

GESTIONE DELLA MEMORIA CENTRALE

GESTIONE DELLA MEMORIA CENTRALE GESTIONE DELLA MEMORIA CENTRALE E MEMORIA VIRTUALE 7.1 Gestione della memoria Segmentazione Segmentazione con paginazione Memoria Virtuale Paginazione su richiesta Sostituzione delle pagine Trashing Esempi:

Dettagli

Sistemi Operativi. A.M. Fanelli Architettura dei Sistemi a. a Livello di Sistema Operativo. Livello di Linguaggi Applicativi

Sistemi Operativi. A.M. Fanelli Architettura dei Sistemi a. a Livello di Sistema Operativo. Livello di Linguaggi Applicativi Sistemi Operativi A.M. Fanelli Architettura dei Sistemi a. a. 2008-09 1 Livello di Sistema Operativo Livello di Linguaggi Applicativi Livello di Linguaggio Assembly Livello di Sistema Operativo Livello

Dettagli

La memoria principale

La memoria principale La memoria principale DRAM (Dynamic RAM) il contenuto viene memorizzato per pochissimo tempo per cui deve essere aggiornato centinaia di volte al secondo (FPM, EDO, SDRAM, RDRAM) SRAM (Static RAM) veloce

Dettagli

Sistema operativo & file system 1

Sistema operativo & file system 1 Il software (sw) Software di sistema e file system Lezione 1b L esecuzione di programmi è lo scopo di un elaboratore I programmi sono algoritmi codificati in un particolare linguaggio di programmazione

Dettagli

Architettura dei calcolatori e Software di sistema

Architettura dei calcolatori e Software di sistema Università degli Studi di Palermo Dipartimento di Ingegneria Chimica, Gestionale, Informatica, Meccanica Lezioni di Informatica di Base per la Facoltà di Lettere e Filosofia Anno Accademico 2012/20103

Dettagli

La gestione dell I/O (Cap. 5, Tanenbaum)

La gestione dell I/O (Cap. 5, Tanenbaum) La gestione dell I/O (Cap. 5, Tanenbaum) Prestazioni e generalità Gestione software Supporti su disco Orologi Lezione Architettura degli Elaboratori - 1 - A. Sperduti Pagina 1 Prestazioni e generalità

Dettagli

Architettura dei computer

Architettura dei computer Architettura dei computer In un computer possiamo distinguere quattro unità funzionali: il processore la memoria principale (memoria centrale, RAM) la memoria secondaria i dispositivi di input/output La

Dettagli

Il Modello di von Neumann (2) Prevede 3 entità logiche:

Il Modello di von Neumann (2) Prevede 3 entità logiche: Introduzione all Architettura degli Elaboratori Sommario Macchina di von Neumann Esecuzione dei programmi Rappresentazione dei dati Dati numerici Dati alfabetici 1 2 Il Modello di von Neumann (1) L architettura

Dettagli

ACSO Programmazione di Sistema e Concorrente

ACSO Programmazione di Sistema e Concorrente ACSO Programmazione di Sistema e Concorrente P2 Modello Thread 2/12/2015 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio di informazione) necessario tra attività

Dettagli

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software Introduzione alla programmazione Algoritmi e diagrammi di flusso F. Corno, A. Lioy, M. Rebaudengo Sviluppo del software problema idea (soluzione) algoritmo (soluzione formale) programma (traduzione dell

Dettagli

Input/Output (Cap. 7, Stallings)

Input/Output (Cap. 7, Stallings) Input/Output (Cap. 7, Stallings) Grande varietà di periferiche gestiscono quantità di dati differenti a velocità diverse in formati diversi Tutti più lenti della CPU e della RAM Necessità di avere moduli

Dettagli

Esempio. Le istruzioni corrispondono a quelle di sopra, ma sono scritte in modo simbolico. E indipendente dalla machina

Esempio. Le istruzioni corrispondono a quelle di sopra, ma sono scritte in modo simbolico. E indipendente dalla machina Il compilatore C Astrazione Linguaggio macchina implica la conoscenza dei metodi usati per la rappresentazione dell informazioni nella CPU Linguaggio Assembly è il linguaggio delle istruzioni che possono

Dettagli

Le risorse. Alcune definizioni

Le risorse. Alcune definizioni Le risorse Dicesi risorsa un qualunque oggetto, fisico o logico, di cui un processo necessita per portare a termine la sua evoluzione. Poiché un processo evolve eseguendo istruzioni (procedure), una risorsa

Dettagli

Il Sistema Operativo

Il Sistema Operativo Università degli Studi di Palermo Dipartimento di Ingegneria Informatica Elaborazione di Immagini e Suoni / Riconoscimento e Visioni Artificiali 12 c.f.u. Anno Accademico 2008/2009 Docente: ing. Salvatore

Dettagli

Teoria dell Informazione

Teoria dell Informazione Corso di Laurea Magistrale in Scienze dell Informazione Editoriale, Pubblica e Sociale Teoria dell Informazione Cosa è l informazione L informazione è qualcosa che si possiede e si può dare ad un altro

Dettagli

Prof. Rossella Cancelliere

Prof. Rossella Cancelliere Laboratorio di Informatica e Statistica Chimica Industriale a.a 2004/05 Prof. Rossella Cancelliere Dip. Informatica Univ.Torino C.so Svizzera 185,Torino email:cancelli@di.unito.it tel: 011/670 67 77 Obiettivi

Dettagli

AMBIENTI DI PROGRAMMAZIONE

AMBIENTI DI PROGRAMMAZIONE AMBIENTI DI PROGRAMMAZIONE È l'insieme dei programmi che consentono la scrittura, la verifica e l'esecuzione di nuovi programmi (fasi di sviluppo) Sviluppo di un programma Affinché un programma scritto

Dettagli

GESTIONE DELLA MEMORIA CENTRALE 6.1 D. - UNICAL

GESTIONE DELLA MEMORIA CENTRALE 6.1 D. - UNICAL GESTIONE DELLA MEMORIA CENTRALE 6.1 Gestione della Memoria Background Spazio di indirizzi Swapping Allocazione Contigua Paginazione 6.2 Background Per essere eseguito un programma deve trovarsi (almeno

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash Funzioni Hash Sommario Tabelle ad indirizzamento diretto e hash Funzioni Hash Requisiti Metodo della divisione Metodo della moltiplicazione Funzione Hash Universale La ricerca Talvolta si richiede che

Dettagli

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX Indice Prefazione Gli Autori Ringraziamenti dell Editore La storia del C XVII XXIX XXXI XXXIII PARTE A Capitolo 1 Computer 1 1.1 Hardware e software 2 1.2 Processore 3 1.3 Memorie 5 1.4 Periferiche di

Dettagli

Ciclo del Processore. Memoria

Ciclo del Processore. Memoria Ciclo del Nella figura seguente è riportata la rappresentazione semplificata ed essenziale di un computer. RESET Canali Di Ingresso Uscita Uscita Ingressi Fig. 1 Rappresentazione semplificata di un computer

Dettagli

Indirettezza. Fetch/Execute. Fetch/Execute. Introduzione della Indirettezza (indirect)

Indirettezza. Fetch/Execute. Fetch/Execute. Introduzione della Indirettezza (indirect) Ciclo esecutivo delle istruzioni: Fetch/Execute Lo avete visto nel corso di Introduzione alle Architetture degli Elaboratori Stallings, Capitolo 3 Ne vediamo una versione revisionata Indirettezza Per recuperare

Dettagli

Fallimenti nella TLB

Fallimenti nella TLB Fallimenti nella TLB Un fallimento nella TLB può essere dovuto a due motivi: 1. la pagina fisica non è presente in memoria (page fault); 2. la traduzione non è nella TLB, anche se la pagina fisica è presente

Dettagli

Modelli di programmazione parallela

Modelli di programmazione parallela Modelli di programmazione parallela Oggi sono comunemente utilizzati diversi modelli di programmazione parallela: Shared Memory Multi Thread Message Passing Data Parallel Tali modelli non sono specifici

Dettagli

Il processore. Istituzionii di Informatica -- Rossano Gaeta

Il processore. Istituzionii di Informatica -- Rossano Gaeta Il processore Il processore (detto anche CPU, ovvero, Central Processing Unit) è la componente dell unità centrale che fornisce la capacità di elaborazione delle informazioni contenute nella memoria principale

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione Linguaggi di Programmazione Programmazione. Insieme delle attività e tecniche svolte per creare un programma (codice sorgente) da far eseguire ad un computer. Che lingua comprende

Dettagli

Macchine Astratte. Luca Abeni. February 22, 2017

Macchine Astratte. Luca Abeni. February 22, 2017 Macchine Astratte February 22, 2017 Architettura dei Calcolatori - 1 Un computer è composto almeno da: Un processore (CPU) Esegue le istruzioni macchina Per fare questo, può muovere dati da/verso la memoria

Dettagli

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica Corso di Laurea Ingegneria Informatica Laboratorio di Informatica Capitolo 4 Traduzione ed esecuzione di programmi Ottobre 2006 Traduzione ed esecuzione di programmi 1 Nota bene Alcune parti del presente

Dettagli

Informatica Generale 06 - Introduzione ai Sistemi Operativi

Informatica Generale 06 - Introduzione ai Sistemi Operativi Informatica Generale 06 - Introduzione ai Sistemi Operativi Cosa vedremo: Funzionalità dei sistemi operativi Bootstrap Stato utente e stato supervisore Componenti di un Sistema Operativo Cos è un sistema

Dettagli

Corso di Architettura (Prof. Scarano) 09/04/2002

Corso di Architettura (Prof. Scarano) 09/04/2002 Corso di Architettura (Prof. Scarano) 09/0/2002 Un quadro della situazione Lezione 15 Il Set di Istruzioni (1) Vittorio Scarano Architettura Corso di Laurea in Informatica Università degli Studi di Salerno

Dettagli

Il software: Istruzioni per il computer

Il software: Istruzioni per il computer Il software: Istruzioni per il computer Software applicativo aiuta a svolgere operazioni utili in vari campi programmi di videoscrittura, fogli elettronici, videogiochi Software di sistema permette l utilizzo

Dettagli

LABORATORIO di Reti di Calcolatori

LABORATORIO di Reti di Calcolatori LABORATORIO di Reti di Calcolatori Architetture client-server 1 of 12 v slide della docente Bibliografia v testo di supporto: D. Maggiorini, Introduzione alla programmazione client-server, Pearson Ed.,

Dettagli

Sistema operativo. Interazione con il SO

Sistema operativo. Interazione con il SO Sistema operativo Il sistema operativo (SO) è un insieme complesso di programmi che, in modo coordinato, controlla le risorse del sistema e i processi che usano queste risorse. Per evidenziare le funzionalità

Dettagli

Introduzione alle gerarchie di memoria

Introduzione alle gerarchie di memoria Introduzione alle gerarchie di memoria 1 Un ripasso Circuito sequenziale Segnale di clock Circuito sincrono Temporizzazione sensibile ai fronti Latch tipo S-R Latch tipo D Flip-flop tipo D Register file

Dettagli

L Allocazione Dinamica della Memoria

L Allocazione Dinamica della Memoria L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento

Dettagli

la traduzione dei programmi ed introduzione a Java

la traduzione dei programmi ed introduzione a Java la traduzione dei programmi ed introduzione a Java programmi descrizioni di algoritmi effettuate tramite linguaggi di programmazione lo stesso algoritmo, fissato un linguaggio di programmazione, può essere

Dettagli

Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova.

Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Programmi applicativi Un programma applicativo (o applicativo) è un eseguibile che può essere utilizzato dall utente e che ha funzionalità di alto livello (word processor, spreadsheet, DBMS) Univ. Milano-Bicocca

Dettagli

8 bit per la parola nel blocco 10 bit per l insieme (gruppo) nella cache 12 bit di etichetta. Esercizio 3 Memoria Cache

8 bit per la parola nel blocco 10 bit per l insieme (gruppo) nella cache 12 bit di etichetta. Esercizio 3 Memoria Cache Esercizio 3 Memoria Cache Prima parte - memoria di 1 Giga parole da 16 bit (indirizzata a livello di parola) - cache di 1 Mega parole da 16 bit (indirizzata a livello di parola) - ogni della cache contiene

Dettagli

CAP9. Device drivers

CAP9. Device drivers Struttura interna del sistema operativo Linux CAP9. Device drivers Device drivers Gestori di periferiche Sono moduli software che realizzano l interfacciamento e la gestione dei dispositivi periferici

Dettagli

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato. Il File System Il file system È quella parte del Sistema Operativo che fornisce i meccanismi di accesso e memorizzazione delle informazioni (programmi e dati) allocate in memoria di massa. Realizza i concetti

Dettagli