недеља, 25. децембар 2011.

Stack memorija i stack pointer


Kada se javi interapt sadrzaj programskog brojaca treba negde zapamtiti da bi se nakon obrade interapta program mogao da nastavi tacno od mesta gde je i prekinut. Pamcenje se vrsi u memoriji koja se zove Stack memorija ili magacinska memorija. U jeziku C svaki poziv funkcije znaci njenu aktivaciju na Stacku.
U najvecem broju slucajeva jedan deo operativne memorije  jedan deo operativne memorije odvaja se za stack. Sastavni deo stack memorije je stack pointer. Stack pointer je registar cija je uloga da pokazuje na prvu praznu lokaciju u stack memoriji odnosno da sadrzi adresu prve prazne lokacije u stack memoriji.
U procesu inicijalizacije sistema nakon dovodjenja napona napajanja sadrzaj stack pokazivaca se podesava na vrednost adrese prve lokacije onog dela memorije koja je odredjena da bude stack.
Za stack su vezane dve operacije:
        1. Smestanje podataka na stack.
        2. Uzimanje podataka sa stacka.
Kada se podatak smesta na stack upisuje se na adresu na koju pokazuje stack pokazivac ( prva prazna lokacija ). Potom se stack pointer dekrementira da bi pokazao ponovo na prvu praznu lokaciju. Za upisanih n podataka stack pointer bi pokazivao prema isprekidanoj liniji. Najvisa popunjena lokacija u stack memoriji zove se vrh stack-a (top).
Proces ocitavanja podataka zapocinje inkrementiranjem sadrzaja stack pokazivaca da bi pokazao na vrh stack-a , taj podatak se ocita i nakon toga se smatra da je ta lokacija prazna ( Stack pointer pokazuje na prvu praznu lokaciju).
Ocigledno je da se poslednji upisan podatak ocitava prvi pa se zato kaze da stacka spada u grupu LIFO memorija ( LIFO - Last in first out).
Kod ovakve stack memorije nema pomeranja podataka u memorijskim lokacijama vec se samo menja sadrzaj stack pointera. U nekim slucajevima stack memorija se pravi od niza registara kod kojih je sadrzaj pri ocitavanju i upisivanju pomera od registra ka registru bez adrese stack memorije.
Ako se uzastopno na stack upisuje veliki broj podataka, a slabo ili nikako ne vrsi ocitavanje postoji mogucnost da se prekoraci kapacitet memorije koja je dodeljena stack memoriji odnosno da se javi neispravan rad sistema - Stack Overflow.

Нема коментара:

Постави коментар