Anteprima
Vedrai una selezione di 10 pagine su 63
Sistemi di calcolo Pag. 1 Sistemi di calcolo Pag. 2
Anteprima di 10 pagg. su 63.
Scarica il documento per vederlo tutto.
Sistemi di calcolo Pag. 6
Anteprima di 10 pagg. su 63.
Scarica il documento per vederlo tutto.
Sistemi di calcolo Pag. 11
Anteprima di 10 pagg. su 63.
Scarica il documento per vederlo tutto.
Sistemi di calcolo Pag. 16
Anteprima di 10 pagg. su 63.
Scarica il documento per vederlo tutto.
Sistemi di calcolo Pag. 21
Anteprima di 10 pagg. su 63.
Scarica il documento per vederlo tutto.
Sistemi di calcolo Pag. 26
Anteprima di 10 pagg. su 63.
Scarica il documento per vederlo tutto.
Sistemi di calcolo Pag. 31
Anteprima di 10 pagg. su 63.
Scarica il documento per vederlo tutto.
Sistemi di calcolo Pag. 36
Anteprima di 10 pagg. su 63.
Scarica il documento per vederlo tutto.
Sistemi di calcolo Pag. 41
1 su 63
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Il passaggio del controllo di un programma al sistema operativo

(ovvero al suo kernel, o nucleo) per effettuare chiamate a sistema avviene normalmente mediante il meccanismo degli interrupt. Un interrupt è un evento che interrompe il flusso di esecuzione del programma e passa il controllo a codice del sistema operativo, cambiando modalità di esecuzione in modo che il programma abbia privilegi più alti. Un interrupt può essere generato dalla CPU stessa oppure da eventi esterni come la pressione di un tasto sulla tastiera.

I moduli principali del kernel del sistema operativo, attivati mediante interrupt, sono adibiti alla gestione dei processi, della memoria, di file e I/O in genere, e del tempo.

Il modulo di esecuzione dei processi è adibito al caricamento di un programma eseguibile (loading), alla sua schedulazione (assegnazione della CPU), alla gestione degli interrupt, al mantenimento delle informazioni sull'esecuzione in una struttura chiamata...

Process Control Block (PCB) e alla gestione dei segnali, un meccanismo di notifica di eventi tra processi e tra sistema operativo e processi. Il modulo di gestione della memoria fornisce nei sistemi operativi moderni un meccanismo di virtualizzazione della memoria in modo che ogni processo veda una porzione tutta sua e non sia possibile per un processo accedere alla memoria di un altro processo senza che quest'ultimo ne sia a conoscenza. Questo meccanismo di protezione impedisce ad esempio a un programma malevolo o difettoso di accedere allo spazio di memoria di un altro programma alternandone il contenuto. La virtualizzazione è basata su una separazione tra memoria fisica e memoria logica accessibile ai programmi. Un altro aspetto della gestione della memoria riguarda l'allocazione dello spazio logico disponibile ai programmi stessi. Il modulo di gestione dei file e dell'I/O in generale si occupa di soddisfare le richieste di uso dei dischi e di dispositivi da

Parte dei programmi. Importanti sono i driver, componenti software che forniscono un'interfaccia standard verso il kernel astraendo le caratteristiche specifiche dei dispositivi esterni.

Il modulo di gestione del tempo fornisce al kernel e alle applicazioni funzionalità per la misurazione del tempo reale e del tempo speso attivamente sulla CPU su base singolo processo.

L'uso dell'hardware da parte di un programma avviene come segue:

  1. la CPU può essere usata dal programma in modalità utente senza il tramite del sistema operativo. Questo avviene quando il programma gira in modalità utente
  2. ogni altra interazione con l'hardware è mediata dal sistema operativo.

Prima Parte Pagina 6

Come viene programmato un sistema di calcolo?

martedì 1 marzo 2022 09:00

Prima Parte Pagina 7

Prima Parte Pagina 8

Sintassi AT&T

mercoledì 2 marzo 2022 09:00

Tipi di dato Suffisso Dimensione Corrispondenza macchina assembly tipi C

Byte b 1 byte

(8 bit) (unsigned) char

Word w 2 byte (16 bit) (unsigned) short

Double word l 4 byte (32 bit) • (unsigned) int•

Indirizzo di memoria• (unsigned) long

Quad word q 8 byte (64 bit) Indirizzo di memoria per x86_64x

Prima Parte Pagina 9

Prima Parte Pagina 10

Prima Parte Pagina 11

Prima Parte Pagina 12

If/if-else in Assembly martedì 8 marzo 2022 09:00

Prima Parte Pagina 13

Prima Parte Pagina 14

While/ for in Assembly mercoledì 9 marzo 2022 09:00

Prima Parte Pagina 15

Prima Parte Pagina 16

Prima Parte Pagina 17

Aritmetica dei puntatori martedì 15 marzo 2022 09:00

Prima Parte Pagina 18

Prima Parte Pagina 19

mercoledì 16 marzo 2022 09:00 c=a

char c

short c

int c

c=a

unsigned char c

unsigned short c

unsigned int c

char a

Spostamento Down-cast

Down-cast unsigned

Spostamento Down-cast

Down-cast

movb %cl, %al

movb %cl, %al

movb %cl, %al

char a

movb %cl, %al

movb %cl, %al

movb %cl, %al

short a

Up-cast

Spostamento Down-cast unsigned

Up-cast

Spostamento Down-cast

movsbw %cl, %ax

%cx, %ax %cx, %ax a %cl, %ax %cx, %ax %cx, %ax a Up-cast Up-cast unisgned Up-cast Up-cast movsbl %cl, %eax %cx, %eax %ecx, %eax a %cl, %eax %cx, %eax %ecx, %eax Pagina 20 Pagina 21 Pagina 22 sull'ABImartedì 22 marzo 2022 09:00 Pagina 23 Pagina 24 23 marzo 2022 09:00 Pagina 25 Pagina 26 Pagina 27 Pagina 28 martedì 29 marzo 2022 09:00 Pagina 29 mercoledì 30 marzo 2022 14:33 Pagina 30 Pagina 31 martedì 5 aprile 2022 09:00 Pagina 32 Pagina 33 mercoledì 6 aprile 2022 09:00 Pagina 34

35 Ottimizzazione dei programmi

martedì 12 aprile 2022 09:00

Seconda Parte Pagina 36

Seconda Parte Pagina 37

Profilazione automatica

mercoledì 20 aprile 2022 09:00

Seconda Parte Pagina 38

Seconda Parte Pagina 39

Ulteriori ottimizzazioni del compilatore

martedì 26 aprile 2022 09:00

Seconda Parte Pagina 40

Seconda Parte Pagina 41

Seconda Parte Pagina 42

Immagine di memoria di un processore

mercoledì 27 aprile 2022 09:00

Seconda Parte Pagina 43

Seconda Parte Pagina 44

Seconda Parte Pagina 45

Esecuzione dei programmi

martedì 3 maggio 2022 09:00

L'esecuzione di un programma, quindi di ogni istruzione che lo compone, è suddivisa dall'hardware in diverse sotto-operazioni che coinvolgono le varie parti della CPU:

  • unità di controllo
  • Registri
  • unità aritmetico-logica (o ALU)
  • interfaccia verso la memoria e l'I/O

Le CPU sono tipicamente organizzate in stadi che sono delegati a portare a termine l'esecuzione delle

sottoparti di un'istruzione, quindi ogni istruzione viene eseguita dalla CPU attivando nella corretta sequenza una serie di stadi di esecuzione.

Gli stadi basati su un'architettura RISC del processore sono:

  1. Fetch (F): l'istruzione corrente viene prelevata dalla memoria e viene calcolato l'indirizzo dell'istruzione che segue la corrente in memoria;
  2. Decode (D): viene interpretata l'istruzione, eventuali operandi immediati dell'istruzione vengono letti, così come eventuali registri di input dell'istruzione;
  3. Execute (E): se richiesto dall'istruzione, l'unità aritmetico-logica esegue un'operazione;
  4. Memory (M): se richiesto dall'istruzione, la memoria di sistema viene acceduta in lettura o scrittura;
  5. Write-Back (W): se richiesto dall'istruzione, i registri di output vengono aggiornati.

Storicamente le CPU erano divise, in base alle istruzioni dell'ISA che potevano essere processate, in:

  • RISC (Reduced Instruction Set Computer):
    • Numero ridotto di istruzioni
    • Hardware più semplice
    • Frequenze di clock più alte
    CISC (Complex Instruction Set Computer):
    • Più istruzioni disponibili
    • Hardware più complesso => più transistor => più consumo energetico
    • Frequenze di clock più basse
    Questa divisione è molto importante nella scrittura del codice in Assembly, ma risulta nascosta al compilatore. Inoltre, oggi i processori sono una via di mezzo tra RISC e CISC, poiché possono essere processate istruzioni più complesse che vengono tradotte automaticamente dal sistema di calcolo all'insaputa del compilatore e del programmatore, in linguaggio micro-architetturale basato sul processore RISC.
    • Il calcolo di ciascuno stadio richiede tipicamente qualche centinaio di picosecondi (10-12 sec).
    • La sequenza di stadi viene ripetuta per ogni istruzione eseguita.
    • Per scandire il tempo e
    consentire l'attivazione dei circuiti combinatori viene usato un orologio (clock) che crea un segnale elettrico. La frequenza di clock, vale a dire il numero di oscillazioni al secondo (cicli di clock) del segnale, misura pertanto la velocità con cui vengono eseguite le istruzioni, assumendo che la frequenza sia costante nel tempo. Ciclo di clock := distanza tra due fronti di salita consecutivi. L'idea del pipelining nasce dall'osservazione che i diversi stadi impegnano porzioni diverse della circuiteria della CPU. In principio quindi, quando un'istruzione lascia uno stadio di fetch per entrare in quello di decode, si potrebbe immediatamente procedere a caricare una nuova istruzione, come in una catena di montaggio. Consente di ottenere un certo grado di parallelismo in cui più di un'istruzione è in esecuzione simultanea (Instruction-Level Parallelism, IPL). Il tempo per istruzione (latenza) non cambia (anzi, aumenta leggermente), ma il throughput (numero di istruzioni eseguite al secondo) può aumentare.

    potrebbe leggermente crescere per via della maggiore complessità dell'hardware con pipelining).

    • Si ha un impatto invece sul numero di istruzioni eseguite nell'unità di tempo (throughput), che in condizioni ideali può aumentare di un fattore pari al numero di stadi
    • La temporizzazione di una CPU con pipelining assume che ogni stadio richieda un ciclo di clock, con frequenze di clock più alte.
    • L'esecuzione sequenziale delle tre istruzioni richiede 15 cicli di clock
    • L'esecuzione con pipelining delle tre istruzioni richiede 7 cicli di clock

    Seconda Parte Pagina 46

    Purtroppo, vi sono varie ragioni (hazard) per cui non è sempre possibile avere una pipeline sempre a regime ("piena") con le istruzioni in esecuzione durante il ciclo designato e ottenere quindi il throughput ideale.

    Ci sono vari tipi di hazard:

    1. Hazard strutturali: due o più istruzioni richiedono di usare simultaneamente lo stesso componente
    2. hardware durante lo stesso ciclo di clock come ad esempio la memoria;

      • Si noti come al ciclo di clock 4 due istruzioni chiedono di accedere contemporaneamente alla memoria: istr1 per leggere un dato, istr4 per prelevare l'istruzione.
      • Questo particolare tipo di hazard è in realtà mitigato dalla presenza di memorie tampone (cache) distinte per dati e istruzioni.
      • Hazard strutturali possono coinvolgere anche altri componenti (registri, ALU) e possono essere in generale risolti duplicando l'hardware oppure mediante la tecnica dello stallo.

      Hazard sui dati: vi sono dipendenze fra i dati su cui operano istruzioni differenti come ad esempio un'istruzione che ha come input l'output di quella precedente;

      movl $1, %eax
      movl %eax, %ecx
      

      Si noti che l'istruzione movl %eax, %ecx non può essere eseguita prima che movl $1, %eax abbia ultimato lo stadio di Write-Back:

      Questo tipo di hazard viene normalmente risolto dall'hardware, con una pen

Dettagli
A.A. 2021-2022
63 pagine
SSD Scienze matematiche e informatiche MAT/08 Analisi numerica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher annalucia.lamacchia di informazioni apprese con la frequenza delle lezioni di Sistemi di calcolo e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Roma La Sapienza o del prof Querzoni Leonardo.