Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

21
Architettura Architettura degli degli Elaboratori II Elaboratori II (canale P-Z) (canale P-Z) Linguaggi e moduli Linguaggi e moduli Dott. Franco Liberati Dott. Franco Liberati

Transcript of Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Page 1: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Architettura degli Architettura degli Elaboratori IIElaboratori II

(canale P-Z)(canale P-Z)

Linguaggi e moduliLinguaggi e moduli

Dott. Franco LiberatiDott. Franco Liberati

Page 2: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Argomenti

Linguaggi di programmazione

Assemblatore Compilatore Linker (collegatore)

LINGUAGGI DI PROGRAMMAZIONELINGUAGGI DI PROGRAMMAZIONE

ASSEMBLATOREASSEMBLATORE

COMPILATORECOMPILATORE

LINKERLINKER

Page 3: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Linguaggio Macchina

Linguaggio basato su valori numerici utilizzato dai computer per memorizzare ed eseguire programmi

0111100010101011110101001010101

$t0 $t1

ALU

$t2

Page 4: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Linguaggio macchina Funzionamento base

t0t0t1t1t2t2

t7t7PCPC

ALUALU SHIFTERSHIFTER

STATUSSTATUS

……

CLOCKCLOCK

TRANCODIFICATORETRANCODIFICATORE

000000 0010001010000000

000001 0010010011000000

000010 1010000000100100

000011

000100

……

010000 0000000000000100

010001 0000000000000011

……

011000

011001

……

Page 5: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Linguaggio Assembly

Rappresentazione simbolica (parole mnemoniche) del linguaggio macchina, usato dai programmatori (utilizza simboli invece di numeri per rappresentare istruzioni, registri e dati)

add $t2,$t0,$t1

0111100010101011110101001010101

$t0 $t1

ALU

$t2

Page 6: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Linguaggio AssemblyIstruzioni

Tipicamente una istruzione è strutturata in un

add $t2,$t0,$t1

OPCODEOPCODE Comando/modo di indirizzamentiComando/modo di indirizzamenti

lw $t2,variabile

101101001000100000000000010001

000000001000100001111000011110

sw $t3,variabile 001001001100110001011000010110

Page 7: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Linguaggio AssemblyIstruzioni in SPIM (esempio)

Tipicamente una istruzione è strutturata in un

add $t0,$t1,$t2

OPCODEOPCODE Comando/modo di indirizzamentiComando/modo di indirizzamenti

add $8, $9, $10add $8, $9, $10

0x012a40200x012a4020

100101010010000000010000100101010010000000010000

0000000000000100101001010100101001000010000000000000100000100000

Page 8: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Linguaggio AssemblyIstruzioni in SPIM (esempio)

Tipicamente una istruzione è strutturata in un

lw $t1, pippo

OPCODEOPCODE Comando/modo di indirizzamentiComando/modo di indirizzamenti

111100000000010001000000000001111100000000010001000000000001lui $1, 4097lui $1, 4097

lw $9, 0($1)

0x3c011001

0x8c2900001000110000101001000000000000000010001100001010010000000000000000

Page 9: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Linguaggio Alto Livello

I linguaggi di programmazione ad alto livello sono caratterizzati dalla presenza di astrazioni che permettono al programmatore di non specificare certi tipi di dettagli implementativi della macchina

VISUAL BASICVISUAL BASICC#C#C++C++CCJavaJava

PASCALPASCALBASICBASICSIEBELSIEBELCOBOLCOBOLMLML

Page 10: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Linguaggi di programmazione

Linguaggio C

/*esempio1.c*/

void main(){ int a, b, c; a=4; b=6; c=a+b;}

Linguaggio assembler

/*esempio1.s*/

.textli $t1,4li $t2,6add $t0,$t1,$t2

Linguaggio macchina

FUN REG VAL

001000100000010000100100000001101010000000100100

Ris. Registro $t2:0000000000001010

Page 11: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Codice Sorgente

Programma scritto in linguaggio ad alto livello o assembly

void main(){ int a, b, c; a=4; b=6; c=a+b;}

void main(){ int a, b, c; a=4; b=6; c=a+b;}

.text

.globl main

main:lw $t1,pippolw $t2,paperinoadd $t0,$t1,$t2li $v0,10Syscall

.datapippo: .word 11paperino: .word 15

.text

.globl main

main:lw $t1,pippolw $t2,paperinoadd $t0,$t1,$t2li $v0,10Syscall

.datapippo: .word 11paperino: .word 15

Page 12: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Assemblatore

L’Assemblatore (Assembler) traduce programmi scritti nel linguaggio assembly in linguaggio macchina

L’Assemblatore: legge un file sorgente (scritto in

assembly) produce un file oggetto (detto

anche modulo) contenente linguaggio macchina ed altre informazioni necessarie per trasformare uno o più file oggetto in un programma eseguibile

File File SorgenteSorgente

File File SorgenteSorgente

AssemblerAssemblerAssemblerAssembler

FileFileOggettoOggetto

FileFileOggettoOggetto

Page 13: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

File Oggetto - Modulo

Un modulo può contenere: Istruzioni (routine, sub-routine,

ecc.) Dati Riferimenti a sub-routine e dati

di altri moduli

File OggettoFile Oggetto00010101010000101010100101011111001010111110

(riferimento ad altro modulo)(riferimento ad altro modulo)

011111111100111111111011111000010111110000101111111101111111111011

File OggettoFile Oggetto00010101010000101010100101011111001010111110

(riferimento ad altro modulo)(riferimento ad altro modulo)

011111111100111111111011111000010111110000101111111101111111111011

Page 14: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Compilatore

Il Compilatore traduce un programma scritto in un linguaggio ad alto livello in un: programma equivalente scritto

in linguaggio assembly, che può essere trasformato in un file oggetto da un assembler

oppure, direttamente in un file oggetto

FileFileSorgenteSorgente

FileFileSorgenteSorgente

AssemblerAssembler

FileFileOggettoOggetto

FileFileOggettoOggetto

CompilatoreCompilatore

File AssemblerFile AssemblerFile AssemblerFile Assembler

Page 15: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Linker Il Linker combina un insieme di

moduli e file libreria in un programma eseguibile

Il linker ha tre compiti: Ricercare nei file libreria le

routine di libreria utilizzate dal programma (es. printf: funzione per la stampa a video di dati)

Determinare le locazioni di memoria che il codice di ogni modulo andrà ad utilizzare e aggiornare i riferimenti assoluti in modo opportuno

Risolvere i riferimenti tra i diversi file

Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________sub:sub:……....Jal scanfJal scanf……..______________printf:printf:……..______________scanf:scanf:……..

Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________sub:sub:……....Jal scanfJal scanf……..______________printf:printf:……..______________scanf:scanf:……..

LINKERLINKER

Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________

Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________

sub:sub:……....Jal scanfJal scanf……..______________

sub:sub:……....Jal scanfJal scanf……..______________

printf:printf:……..______________scanf:scanf:……..

printf:printf:……..______________scanf:scanf:……..

Page 16: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Programma sorgente: indirizzi simbolici Compilatore: da indirizzi simbolici a

indirizzi rilocabili (esempio: salto di 14 parole dall’inizio di questo modulo)

Linker: da indirizzi rilocabili indirizzi assoluti

Tempo di compilazione: se si conosce la zona di memoria dove risiederà il programma

Tempo di caricamento: si genera un codice rilocabile si ritarda il collegamento finale fino al caricamento

Tempo di esecuzione: se il processo può essere spostato durante la sua esecuzione in un segmento o l’altro di memoria

Binding degli indirizziFileFile

SorgenteSorgente

FileFileSorgenteSorgente

FileFileOggettoOggetto

FileFileOggettoOggetto

Compilatore/Compilatore/AssemblerAssembler

LINKERLINKER

FileFileOggettoOggetto

FileFileOggettoOggetto

FILE ESEGUIBILEFILE ESEGUIBILEEXEEXE

Page 17: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Linker Determinare le locazioni di memoria che il codice di ogni modulo andrà ad

utilizzare, aggiornare i riferimenti assoluti in modo opportuno e fare riferimento a variabili globali che coinvolgono più moduli

Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________sub:sub:……....Jal scanfJal scanf……..______________printf:printf:……..______________scanf:scanf:……..

Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________sub:sub:……....Jal scanfJal scanf……..______________printf:printf:……..______________scanf:scanf:……..

Main:Main:…..…..Jal (a0)Jal (a0)….….Jal: (a1)Jal: (a1)……..______________sub:sub:……....Jal (a2)Jal (a2)……..______________printf:printf:……..______________scanf:scanf:……..

Main:Main:…..…..Jal (a0)Jal (a0)….….Jal: (a1)Jal: (a1)……..______________sub:sub:……....Jal (a2)Jal (a2)……..______________printf:printf:……..______________scanf:scanf:……..

Main:Main:…..…..Jal 132Jal 132….….Jal: 164Jal: 164……..______________sub:sub:……....Jal 200Jal 200……..______________printf:printf:……..______________scanf:scanf:……..

Main:Main:…..…..Jal 132Jal 132….….Jal: 164Jal: 164……..______________sub:sub:……....Jal 200Jal 200……..______________printf:printf:……..______________scanf:scanf:……..

00…..…..100100….….124124……..__________132132……....140140……..__________164164……..__________200200……..

RIFERIMENTI RELATIVIRIFERIMENTI RELATIVI RIFERIMENTI ASSOLUTIRIFERIMENTI ASSOLUTI

Page 18: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Eseguibile Il Linker combina un insieme di

moduli e file libreria in un programma eseguibile

Il programma eseguibile non deve contenere unresolved references

Solamente il programma eseguibile può essere elaborato su una macchina

Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________sub:sub:……....Jal scanfJal scanf……..______________printf:printf:……..______________scanf:scanf:……..

Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________sub:sub:……....Jal scanfJal scanf……..______________printf:printf:……..______________scanf:scanf:……..

LINKERLINKER

Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________

Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________

sub:sub:……....Jal scanfJal scanf……..______________

sub:sub:……....Jal scanfJal scanf……..______________

printf:printf:……..

printf:printf:……..

FILE ESEGUIBILEFILE ESEGUIBILEEXEEXE

Page 19: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

EseguibileDisposizione in memoria La memoria viene suddivisa in

segmenti Ogni segmento viene utilizzato

per un particolare scopo

Segmenti principali: Text: Contiene il codice dei

programma Data: Contiene i dati “globali”

dei programmi Stack Contiene i dati “locali”

delle funzioni

0x80000000 KERNEL

0x7FFFF000 NOT USED

STACK $SP

HEAP

0x10000000 DATA

TEXT

0x04000000 R DATA

0x00000000 RESERVED

Page 20: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Linguaggi di programmazione

Linguaggio C

/*esempio1.c*/

void main(){ int a, b, c; a=3; b=4; c=a+b;}

Linguaggio assembler

/*esempio1.s*/

.textli $t1,4li $t2,3add $t0,$t1,$t2

Linguaggio macchina

FUN REG VAL

001000100000010000100100000000111010000000100100

Ris. Registro $t2:000000000000111

Page 21: Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

t0t0

t1t1

t2t2

t7t7

PCPC

ALUALU SHIFTERSHIFTER

STATUSSTATUS MEMMEM

……

00100100010001010000010000000000

CLOCKCLOCK

TRANCODIFICATORETRANCODIFICATORE

00000000000001000000000000000100

00000000000000110000000000000011

00100100100010011000011000000000

10110100000000000100010010001000

00000000000001110000000000000111