• Non ci sono risultati.

Organizzazione della Memoria usata dai Processi Indirizzi text data heap stack 0 max

N/A
N/A
Protected

Academic year: 2021

Condividi "Organizzazione della Memoria usata dai Processi Indirizzi text data heap stack 0 max"

Copied!
11
0
0

Testo completo

(1)

Organizzazione della Memoria usata dai Processi

Indirizzi

text data heap stack

0

max

(2)

La struttura dati Stack (o Pila)

• LIFO (last in - first out)

–Operazioni:

• Push (aggiunge un elemento in cima allo stack (che cresce verso gli indirizzi piu’ piccoli) )

• Pop (toglie un elemento dalla cima dello stack)

–Condizioni d’Errore:

• Underflow (cercare di togliere un elemento quando lo stack è vuoto)

• Overflow (cercare di aggiungere un elemento quando lo stack è già pieno)

–Nei processori, esiste un registro (Stack Pointer)

dedicato a contenere l’indirizzo della cima dello stack.

(3)

Activation Records Records di Attivazione

• Activation Record

–È un insieme di bytes contigui in memoria trattati come un unica entità

–Un diverso Activation Record viene allocato in memoria per ciascuna invocazione di funzione (chiamata di funzione) –L’area di memoria in cui vengono collocati i record di

attivazione è la sezione di memoria chiamata stack

–Un registro della CPU, lo stack pointer (SP), punta alla cima dello stack – contiene l’indirizzo dell’ultimo byte

occupato in cima allo stack, cioè l’INDIRIZZO DI INIZIO DELLA PRIMAWORD OCCUPATA IN CIMA ALLO STACK.

–Ogni elemento dello stack è un activation record.

(4)

Activation Record

return value b

a

return address dynamic link

x y z

Formal

parameters

local variables int funzione (int a, int b)

{

int x, y, z;

………

function body

……..

return z;

}

formal

parameters

(5)

Activation Record – Calling Convention

• Il formato dei Record di attivazione dipende:

– dal Processore su cui il codice esegue

– dal compilatore che genera il codice e dai comandi impartiti al compilatore

– dai tipi e dal numero di parametri formali della funzione – dal tipo di risultato che la funzione restituisce

• Generalmente il risultato è restituito in uno o più registri

• Se il risultato è troppo grande, viene collocato in un’area di

memoria specificata dal chiamante mediante un puntatore messo

sullo stack prima degli argomenti della funzione.

(6)

Activation Record – x86 - __cdecl

Pointer to Result Arg n

…..

Arg 2 Arg 1

Return Address Dynamic Link

Local Var 1

Formal

parameters

Local

variables

Local Var 2 Local Var n Local Var n Saved Reg 1 Saved Reg…

Saved registers Formal

parameters

Next instruction to be executed after the function Pointer to the previous Activation Record (holds the old Base Pointer value)

Pointer to the Result of the function

Temporary (expressions evaluation, …)

addr ess ess

(7)

Example

int Chiamante (int32_t a, int32_t b) {

int32_t x, y, z;

………

y = Chiamata(a);

……..

return y;

}

int Chiamata (int32_t a) {

int32_t x;

………

body

……..

x = 9;

return x;

}

(8)

Example - 2

return value b

a

return address dynamic link

x y z

activation record

of Chiamante

EBP

return value b

a

return address dynamic link

x y z

return value

activation record

of Chiamante

return address 0x4050

x

a activation

record

of Chiamata 0x4050

1) Chiamante is

executing 2) After

Chiamante

calls

Chiamata

3)

Chiamata

terminates

ESP

EBP ESP

Old EBP

addr ess ess

(9)

Terminazione della funzione Chiamata

Chiamata:

…... body ..…

; da qui il codice che termina la funzione

mov esp, ebp pop ebp

; A questo punto lo stack si presenta così

ret 4

; Carica dallo stack (pop) l’indirizzo della ; prossima istruzione da eseguire

; incrementando ESP di 4 (dimensione dello ; indirizzo “return address”),

; poi incrementa ESP dello spazio (espresso in bytes) ; occupato dal parametro formale “a” (4 bytes).

; La dimensione dei parametri formali viene passato ; come argomento all’istruzione ret (nell’esempio 4).

IPOTESI:

- processore i386

- l’argomento a è un int32_t - la word occupa 4 bytes

- gli indirizzi occupano 4 bytes

return value b

a

return address dynamic link

x y z

return value

activation record

of Chiamante

return address

a activation record

of Chiamata

EBP

ESP

Old EBP

(10)

Chi carica sullo stack il record di attivazione della funzione Chiamata ?

return value b

a

return address dynamic link

x y z

return value

activation record

of Chiamante

return address 0x4050

x

a activation

record of

Chiamata 0x4050

EBP ESP

Old EBP

messo da Chiamata messo da Chiamante

(11)

Traduzione in Assembly

per x86

(dialetto Intel) dell’esempio

Chiamante/Chiamata

_Chiamante:

push ebp

mov ebp, esp sub esp, 20

mov eax, DWORD PTR [ebp+8]

mov DWORD PTR [esp], eax call _Chiamata

mov DWORD PTR [ebp-4], eax mov eax, DWORD PTR [ebp-4]

mov esp, ebp pop ebp

ret _Chiamata:

push ebp

mov ebp, esp sub esp, 16

mov DWORD PTR [ebp-4], 9 mov eax, DWORD PTR [ebp-4]

mov esp, ebp pop ebp

ret

dialetto Intel diverso da AT&T per : - Ordine argomenti mov

- No % nel nome registri

-Notare che :

Uso registro EAX per restituire risultato.

- quindi non viene messo Return Value.

Riferimenti

Documenti correlati

Esso contiene: l’indirizzo di ritorno all’istruzione che il main dovrà eseguire dopo la conclusione della funzione fact (tale istruzione è y=valore di ritorno della

• quando il processo in esecuzione cerca di accedere a una pagina alla quale non è assegnato alcun page frame, tale pagina viene copiata dallo swap space a un frame libero;.. •

all’interno della lower level page table situata all’indirizzo appena ottenuto, si accede alla entry specificata dai bit centrali dell’indirizzo logico, che contiene il numero del

Descrivendo i preparativi di Manuele per la guerra contro i Normanni nella prima- vera del 1148, dopo aver dato circostanziata notizia della nomina di Stefano Contoste- fano a

notevolmente le prestazioni servendo prima tutte le richieste che sono vicine alla posizione attuale della testina. • Su questa ipotesi è basato l’algoritmo Shortest Seek Time

[r]

–  Allocazione della memoria ai singoli job –  Protezione dello spazio di indirizzamento –  Condivisione dello spazio di indirizzamento –  Gestione dello swap.. • 

Inoltre, quando l’unità centrale richiede l’accesso a una locazione di memoria virtuale non presente in una cella di memoria reale, si rende necessario effettuare