This shows you the differences between two versions of the page.
so:cursuri:curs-05 [2014/03/17 23:40] razvan.deaconescu [Granularitatea alocării de memorie] |
so:cursuri:curs-05 [2019/03/15 09:46] (current) razvan.deaconescu |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Curs 05 - Gestiunea memoriei ====== | ====== Curs 05 - Gestiunea memoriei ====== | ||
- | |||
- | <html> | ||
- | <iframe src="http://prezi.com/embed/gfswijyf3vsk/?bgcolor=ffffff&lock_to_path=0&autoplay=0&autohide_ctrls=0&features=undefined&disabled_features=undefined" width="550" height="400" frameBorder="0" webkitAllowFullScreen mozAllowFullscreen allowfullscreen></iframe> | ||
- | </html> | ||
* [[http://prezi.com/gfswijyf3vsk/?utm_campaign=share&utm_medium=copy&rc=ex0share | Curs 05 - Gestiunea memoriei (vizualizare Prezi)]] | * [[http://prezi.com/gfswijyf3vsk/?utm_campaign=share&utm_medium=copy&rc=ex0share | Curs 05 - Gestiunea memoriei (vizualizare Prezi)]] | ||
* [[http://elf.cs.pub.ro/so/res/cursuri/SO_Curs-05.pdf | Curs 05 - Gestiunea memoriei (PDF)]] | * [[http://elf.cs.pub.ro/so/res/cursuri/SO_Curs-05.pdf | Curs 05 - Gestiunea memoriei (PDF)]] | ||
+ | |||
+ | * [[https://docs.google.com/document/d/19vfKQ4PRci64ZKHzrELigoygpLIkw1ZLGczmCpeS8kU/edit?usp=sharing|Notițe de curs]] | ||
* Suport curs | * Suport curs | ||
* Operating System Concepts Essentials | * Operating System Concepts Essentials | ||
* Capitolul 7 - Main Memory | * Capitolul 7 - Main Memory | ||
- | * Modern Operating Systems | + | * Modern Operating Systems, 2nd Ed. |
* Capitolul 4 - Memory Management | * Capitolul 4 - Memory Management | ||
* Secțiunile 4.1, 4.2, 4.3, 4.8 | * Secțiunile 4.1, 4.2, 4.3, 4.8 | ||
+ | * Modern Operating Systems, 3rd Ed. | ||
+ | * Capitolul 3 - Memory Management | ||
+ | * Secțiunile 3.1, 3.2, 3.3, 3.7 | ||
* [[http://lwn.net/Articles/250967/ | Ulrich Drepper - What every programmer should know about memory]] | * [[http://lwn.net/Articles/250967/ | Ulrich Drepper - What every programmer should know about memory]] | ||
+ | |||
+ | <html> | ||
+ | <center> | ||
+ | <iframe src="https://prezi.com/embed/gfswijyf3vsk/?bgcolor=ffffff&lock_to_path=0&autoplay=0&autohide_ctrls=0&features=undefined&disabled_features=undefined" width="550" height="400" frameBorder="0" webkitAllowFullScreen mozAllowFullscreen allowfullscreen></iframe> | ||
+ | </center> | ||
+ | </html> | ||
===== Demo-uri ===== | ===== Demo-uri ===== | ||
Line 97: | Line 104: | ||
Prima comandă alocă un singur octet în mod dinamic în cadrul spațiului de adresă. Ultima comandă o vom rula de mai multe ori pentru a verifica modul în care se modifică spațiul de adresă al procesului. Vedem că la o simplă alocare de 1 octet se alocă o zonă mai mare în spațiul de adresă al procesului, conform modului intern de lucru al apelului de bibliotecă ''malloc''. | Prima comandă alocă un singur octet în mod dinamic în cadrul spațiului de adresă. Ultima comandă o vom rula de mai multe ori pentru a verifica modul în care se modifică spațiul de adresă al procesului. Vedem că la o simplă alocare de 1 octet se alocă o zonă mai mare în spațiul de adresă al procesului, conform modului intern de lucru al apelului de bibliotecă ''malloc''. | ||
+ | |||
+ | ==== Informații despre TLB ==== | ||
+ | |||
+ | Pentru a afla informații despre TLB instalăm pachetul ''cpuid''. Pe un sistem Debian-based folosim comanda<code bash> | ||
+ | apt-get install cpuid | ||
+ | </code> | ||
+ | |||
+ | Ca să determinăm informații despre TLB folosim comanda<code bash> | ||
+ | cpuid | grep TLB | ||
+ | </code> | ||
+ | |||
+ | Dacă vrem să urmărim numărul de miss-uri pentru TLB putem folosi ''perf''. De exemplu, pentru a urmări TLB miss-urile într-un interval de 10 secunde la nivelul sistemului folosim comanda<code bash> | ||
+ | sudo perf stat -e iTLB-load-misses -a sleep 10 | ||
+ | </code> | ||
+ | |||
+ | TLB miss-urile cresc în momentul schimbării spațiului de adresă, adică la planificarea proceselor. Dacă avem multe schimbări de spațiu de adresă între procese atunci numărul de TLB miss-uri va crește. Pentru a verifica acest lucru, din [[http://elf.cs.pub.ro/so/res/cursuri/curs-04-demo.zip|arhiva laboratorului 4]], din subdirectorul ''nice/'' rulăm scriptul ''start-all'' (după ce am compilat în prealabil executabilul ''cpu''). După ce am rulat scriptul folosim o altă consolă pentru a măsura numărul de TLB miss-uri, folosind aceeași comandă ca mai sus:<code bash> | ||
+ | sudo perf stat -e iTLB-load-misses -a sleep 10 | ||
+ | </code> | ||
+ | |||
+ | Observăm un număr semnificativ mai mare de TLB miss-uri datorat numeroaselor schimbări de context ce au loc între procesele pornite de scriptul ''start-all'. |