This is an old revision of the document!


Curs 05 - Gestiunea memoriei

Demo-uri

Pentru parcurgerea demo-urilor, folosim arhiva aferentă. Demo-urile rulează pe Linux. Descărcăm arhiva folosind comanda

wget http://elf.cs.pub.ro/so/res/cursuri/curs-05-demo.zip

și apoi decomprimăm arhiva

unzip curs-05-demo.zip

și accesăm directorul rezultat în urma decomprimării

cd curs-05-demo/

Acum putem parcurge secțiunile cu demo-uri de mai jos.

Informații despre memoria sistemului

Ca să aflăm informații despre memoria RAM (fizică) disponibilă pe sistem folosim comanda

free -m

Rezultatul afișat este în megaocteți.

Altă variantă este consultarea fișierului /proc/meminfo:

cat /proc/meminfo

Spațiul de adresare disponibil îl putem afla prin consultarea fișierului /proc/cpuinfo:

cat /proc/cpuinfo | grep 'address sizes'

Ni se vor afișa informații despre spațiul adresabil fizic și cel virtual. În general, la sistemele cu arhitectură x86_64, deși registrele sunt pe 64 de biți, spațiul adresabil virtual este de 48 de biți.

Pentru a afla informații desre memoria cache a sistemului, folosim comanda

lscpu

și urmărim liniile care conțin cuvântul cache. Sau folosim comanda

getconf -a | grep 'CACHE'

De obicei avem mai multe niveluri de memorie cache. Primul nivel conține în general un cache pentru date și unul pentru instrucțiuni.

Pentru a afla dimensiunea paginii sistemului folosim comanda

getconf PAGE_SIZE

Programatic, astfel de informații pot fi determinate prin intermediul apelului sysconf. O implementare succintă se găsește în subdirectorul system-memory/. În fișierul system-memory.c folosim apelul sysconf pentru a afla dimensiunea paginii sistemului, spațiul de memorie, informații despre memoria cache. Pentru a folosi programul, îl compilăm și îl rulăm:

make
./system-memory

Informații despre spațiul de adresă al unui proces

Spațiul de adresă al unui proces poate fi vizualizat folosind comanda pmap. De exemplu, dacă dorim să vizualizăm spațiul de adresă al procesului curent folosim comanda

pmap $$

Spațiul de adresă al unui proces cuprinde zona de cod/text (marcată r-x), zone de date (marcate r-- și rw-), biblioteci partajate, heap, stivă.

Spațiul de adresă al procesului este modificat dinamic (la runtime) prin alocare și dezalocare de memorie. Pentru a urmări modul în care este alterat spațiul de adresă al procesului la alocare și dezalocare folosim programul din subdirectorul address-space/.

În fișierul address-space.c alocăm și dezalocăm memorie folosind stiva (la un apel de funcție), apelurile malloc și free, respectiv apelurile mmap și munmap. Înaintea executării unui pas programul așteaptă 5 secunde, timp în care putem urmări evoluția spațiului de adresă.

TODO

so/cursuri/curs-05.1395077840.txt.gz · Last modified: 2014/03/17 19:37 by razvan.deaconescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0