6 Gestiunea memoriei 21 martie martie 2011

Slides:



Advertisements
Similar presentations
Memory.
Advertisements

ITEC 352 Lecture 27 Memory(4). Review Questions? Cache control –L1/L2  Main memory example –Formulas for hits.
4/14/2017 Discussed Earlier segmentation - the process address space is divided into logical pieces called segments. The following are the example of types.
Chapter 3.2 : Virtual Memory
Chapter 7: Main Memory CS 170, Fall Memory Management Background Swapping Contiguous Memory Allocation Paging Structure of the Page Table Segmentation.
CS 346 – Chapter 8 Main memory –Addressing –Swapping –Allocation and fragmentation –Paging –Segmentation Commitment –Please finish chapter 8.
Chapter 8 Memory Management Dr. Yingwu Zhu. Outline Background Basic Concepts Memory Allocation.
8.4 paging Paging is a memory-management scheme that permits the physical address space of a process to be non-contiguous. The basic method for implementation.
1 Chapter 3.2 : Virtual Memory What is virtual memory? What is virtual memory? Virtual memory management schemes Virtual memory management schemes Paging.
Chapter 8 – Main Memory (Pgs ). Overview  Everything to do with memory is complicated by the fact that more than 1 program can be in memory.
8.1 Silberschatz, Galvin and Gagne ©2013 Operating System Concepts – 9 th Edition Paging Physical address space of a process can be noncontiguous Avoids.
Chapter 7: Main Memory CS 170, Fall Program Execution & Memory Management Program execution Swapping Contiguous Memory Allocation Paging Structure.
W4118 Operating Systems Instructor: Junfeng Yang.
Chapter 8: Main Memory Source & Copyright: Operating System Concepts, Silberschatz, Galvin and Gagne.
143A: Principles of Operating Systems Lecture 8: Basic Architecture of a Program Anton Burtsev October, 2017.
Subinterogări multiple
Prof. Elena Răducanu, Colegiul Naţional Bănăţean,Timişoara
CUPRINS Tastatura Imprimanta Scanner Bibliografie Recapitulare.
Structura unui calculator
Sisteme cu microprocesoare
Structura procesoarelor din familia INTEL
SOFTWARE Tipuri de software.
Paging and Segmentation
Dispozitive de stocare
Sisteme de operare Curs
Chapter 8: Main Memory.
3 Procese 28 februarie martie 2011
Cum foloseşti WordPress drept CMS?
Managementul serviciilor IT
Paxos Made Simple Autor: Puşcaş Radu George
Aparatura auxiliară Generalităţi, clasificare
Memory Management Lectures notes from the text supplement by Siberschatz and Galvin Modified by B.Ramamurthy 11/12/2018.
Design and implementation of a virtual shop using the joomla CMS
Proiectarea Microsistemelor Digitale
METODA BACKTRACKING Examenul de bacalaureat 2012
Proiect la “Aplicaţii ale Microcontrollerelor”
Problema rucsacului lacom
MANAGEMENT EDUCAŢIONAL PERFORMANT Limbajul de programare Borland Pacal
Tipuri structurate Tipul tablou
SUBNETAREA.
C# şi platforma .NET.
Curs 2 1 Sistem de operare-concepte: 2 Apeluri de sistem
Modificarea structurii unei tabele
Curs 6: Introducere în programarea SAS
Funcții C/C++ continuare
Ethernet.
Sistem de monitorizare şi control prin Internet cu procesor ARM
Memory Management Lectures notes from the text supplement by Siberschatz and Galvin Modified by B.Ramamurthy Chapter 8 11/24/2018.
Background Program must be brought into memory and placed within a process for it to be run. Input queue – collection of processes on the disk that are.
INTERNET SERVICII INTERNET.
SOAP Simple Object Access Protocol
Universitatea POLITEHNICA din București - Curs de 16 ore – Curs 11
William Stallings Data and Computer Communications
Îmbunătăţirea serviciilor publice prin intermediul Chartelor de Servicii: Elaborarea şi implementarea Planurilor de Acţiune pentru Îmbunătăţirea Serviciilor.
Functia de documentare
Căutarea şi regăsirea informaţiei
Bazele Tehnologiei Informaţiei Curs 13
Administrarea reţelelor de calculatoare
Memory Management-I 1.
Cum să particularizați Microsoft SharePoint Site web online
Din punct de vedere structural:
ARBORI BINARI DE CĂUTARE
Unitatea centrală de prelucrare
ACTIUNEA Programe de Acces Comunitar
Aplicaţii specializate pentru realizarea unei prezentări – PowerPoint
Configurarea metodelor de management al calităţii în sectorul public
Harti de imagini, Cadre, Stiluri
Despre lamaie.net De ce sunt lamaile acre? Realizatori: Cristina Cazan
Lecture 3: Main Memory.
CSE 542: Operating Systems
Presentation transcript:

6 Gestiunea memoriei 21 martie 2011 - 27 martie 2011 Cursul 6 6 Gestiunea memoriei 21 martie 2011 - 27 martie 2011 30.03.2010

Ulrich Drepper - What every programmer should know about memory Suport curs 6 OSC Capitolul 8 – Main Memory MOS Capitolul 4 – Memory Management Secțiunile 4.1, 4.2, 4.3, 4.8 Ulrich Drepper - What every programmer should know about memory 21.03.2010 - 27.03.2010

Cuprins Gestiunea memoriei și a accesului Protecția memoriei Asocierea adreselor (binding) Alocarea memoriei contigue Paginarea Segmentarea Gestiunea memoriei la x86 21.03.2010 - 27.03.2010

Ierarhia memoriei 21.03.2010 - 27.03.2010

De obicei RAM (Random Access Memory) Menținerea mai multor procese Memoria principală De obicei RAM (Random Access Memory) Menținerea mai multor procese Ce tipuri informații sunt menținute în memoria principală? instrucțiuni (cod) date Cum se accesează memoria? prin intermediul adreselor de memorie memoria este un vector de octeți, fiecare cu o adresă proprie 21.03.2010 - 27.03.2010

Gestiunea memoriei Nu interesează modul în care se generează o adresă de memorie (contor de program, adresare directă etc.) Interesează secvența de adrese de memorie generate de un program Subsistemul de gestiune a memoriei alocarea/dezalocarea memoriei translatarea adreselor virtuale Suport hardware 21.03.2010 - 27.03.2010

Comunicarea proces-memorie 21.03.2010 - 27.03.2010

Accesul la memorie Anumite arhitecturi permit accesarea directă a memoriei (x86) Altele (MIPS) folosesc instrucțiuni de tip load/store Valorea citită este stocată într-un registru Procesorul poate efectua calcule doar cu registrele Registru specializat pentru citirea următoarei instrucțiuni (IP/PC) 21.03.2010 - 27.03.2010

Cache între procesor și memoria principală (SRAM) Memoria cache Cache între procesor și memoria principală (SRAM) Fiecare locație din cache are un tag asociat unui set de locații din memoria principală (linii de cache) Înainte de accesarea memoriei principale, procesorul accesează memoria cache cache hit/cache miss [1] hit rate În caz de miss, se alocă o intrare nouă [1] Cache locality, sau cum se scriu programele pt. a optimiza folosirea cache-ului: http://www.cs.cornell.edu/courses/cs3110/2010sp/lectures/lec24.html 21.03.2010 - 27.03.2010

Sisteme multiprogramate cu partiții fixe Cozi pentru fiecare partiţie Job-urile aşteaptă chiar dacă avem memorie disponibilă O singură coadă pentru toate partiţiile 21.03.2010 - 27.03.2010

Address binding Adresele asociate unui program vor trece prin diverse faze de “binding” până la încărcarea în memorie compilatorul va asocia un simbol unei adrese relocabile (14 octeți de la începutul modulului) [1] linkerul sau loaderul va asocia adresa relocabilă la o adresă absolută (spre exemplu 74014) [2] Asocierea poate fi făcută în diverse faze la compilare – se cunoaște la compilare localizarea în memorie a procesului; se generează cod absolut (.COM) la încărcare – compilatorul generează cod relocabil la execuție – o biblioteca poate fi încărcată pe parcursul execuției [1]  Position Independent Code: http://en.wikipedia.org/wiki/Position-independent_code [2] Code Relocation: http://en.wikipedia.org/wiki/Relocation_(computer_science) 21.03.2010 - 27.03.2010

Address binding (2) 21.03.2010 - 27.03.2010

Linking Static linking – rutinele bibliotecilor sunt adăugate executabilului fișiere obiect între ele și cu biblioteci statice exemplu: fiecare proces deține o copie a imaginii funcției printf se rezolvă adresa fiecărei funcții la fiecare instrucțiune call care o apelează Dynamic linking bibliotecile se pot încărca la on-the-fly: necesita relocare la run-time toate procesele folosesc o singură copie a codului bibliotecii – biblioteci partajate necesită suportul sistemului de operare 21.03.2010 - 27.03.2010

Relocare la linking #include <stdio.h> int a; int main() { a=4; Sections: Idx Name Size VMA LMA File off 0 .text 00000030 00000000 00000000 00000040 CONTENTS, ALLOC, LOAD, RELOC, READONLY, 1 .data 00000000 00000000 00000000 00000070 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 00000000 00000000 00000070 ALLOC 6 .rodata 00000006 00000000 00000000 000026a0 CONTENTS, ALLOC, LOAD, READONLY, DATA #include <stdio.h> int a; int main() { a=4; printf(“a=%d\n”, a); } RELOCATION RECORDS FOR [.text]: OFFSET TYPE VALUE 00000008 R_386_32 a 00000015 R_386_32 a 0000001a R_386_32 .rodata 0000001f R_386_PC32 printf SYMBOL TABLE: 00000000 g F .text 0000002a main 00000004 O *COM* 00000004 a 00000000 *UND* 00000000 printf Contents of section .rodata: 0000 613d2564 0a00 a=%d.. 21.03.2010 - 27.03.2010

Relocare la linking (2) Disassembly of section .text: 00000000 <main>: int a; int main() { 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 ec 08 sub $0x8,%esp a=4; 6: c7 05 00 00 00 00 04 movl $0x4,0x0 d: 00 00 00 printf("a=%d\n", a); 10: 83 ec 08 sub $0x8,%esp 13: ff 35 00 00 00 00 pushl 0x0 19: 68 00 00 00 00 push $0x0 1e: e8 fc ff ff ff call 1f <main+0x1f> 23: 83 c4 10 add $0x10,%esp } 26: 89 ec mov %ebp,%esp 28: 5d pop %ebp 29: c3 ret 2a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi RELOCATION RECORDS FOR [.text]: OFFSET TYPE VALUE 00000008 R_386_32 a 00000015 R_386_32 a 0000001a R_386_32 .rodata 0000001f R_386_PC32 printf 21.03.2010 - 27.03.2010

Spațiul de memorie Fiecare proces are asociat un spațiu de memorie Nucleul are un spațiu de memorie propriu [1] Trebuie protejat accesul la spațiul de memorie al nucleului Spațiile de memorie ale proceselor trebuie protejate unele de celelalte Spațiu de memorie = spațiu de adrese valide ce pot fi accesate de un proces [1] Address space split, sau de ce nu poate un proces sa acceseze toti  cei 4GB de memorie din spatiul sau de adrese: http://kerneltrap.org/node/2450 21.03.2010 - 27.03.2010

Protecția spațiului de memorie Registru bază Registru limită 21.03.2010 - 27.03.2010

Adresele generate de procesor se numesc adrese logice Adresare logică Adresele generate de procesor se numesc adrese logice Adresele folosite de unitatea de memorie se numesc adrese fizice În cazul relocării la execuție adresa logică diferă de adresa fizică adresa logică este o adresă virtuală spațiu virtual de adrese spațiu fizic de adrese MMU (Memory Management Unit) - mapare adrese virtuale – adrese fizice 21.03.2010 - 27.03.2010

Alocarea memoriei contigue Spațiul fizic este împărțit în două partiții kernel procese utilizator Alocarea trebuie efectuată eficient În cazul alocării de memorie contiguă, fiecare proces rezidă într-o secțiune contiguă de memorie folosirea unui registru de relocare și a unui registru limită 21.03.2010 - 27.03.2010

Algoritmi de alocare a memoriei [1], [2], [3] Se mențin informații despre blocurile libere și blocurile alocate First-fit: se alocă primul bloc liber suficient de mare Best-fit: cel mai mic bloc suficient de mare Worst-fit: cel mai mare bloc First-fit și best-fit sunt superiori worst-fit (viteză și folosirea memoriei) [1] - Despre alocatorul de memorie din libc: http://gee.cs.oswego.edu/dl/html/malloc.html [2] - Despre jemalloc, inlocuitorul lui malloc() la Facebook: http://www.facebook.com/notes/facebook-engineering/scalable-memory-allocation-using-jemalloc/480222803919 [3] - Despre tcmalloc, inlocuitorul lui malloc() la Google: http://goog-perftools.sourceforge.net/doc/tcmalloc.html 21.03.2010 - 27.03.2010

Fragmentarea memoriei Fragmentare externă există spațiu pentru o nouă alocare dar nu este contiguu Fragmentare internă se alocă un spațiu mai mare decât cel necesar Soluții compactarea blocurilor libere prin glisare folosirea de spații fizice non-contigue de memorie (paginare, segmentare) 21.03.2010 - 27.03.2010

Paginarea Permite spațiu fizic non-contiguu de memorie Se elimină problema găsirii unui bloc de dimensiune potrivită pentru alocare Paginile au o dimensiune fixă (4KB - x86) Paginile fizice sunt denumite “frames” Paginile virtuale sunt denumite “pages” 21.03.2010 - 27.03.2010

Paginarea (2) 21.03.2010 - 27.03.2010

Tabela de pagini Adresa virtuală – număr de pagină (p) + deplasament (d) Numărul paginii este un index în tabela de pagini Tabela de pagini conține adresa fizică asociată fiecărei pagini (adresa frame-ului) Dimensiunea paginii (virtuale și fizice) este dată de hardware (512B – 4MB) (huge pages - 256MB) 21.03.2010 - 27.03.2010

Tabela de pagini (2) 21.03.2010 - 27.03.2010

Alocarea paginilor fizice 21.03.2010 - 27.03.2010

Suportul hardware În general, un sistem de operare alocă o tabelă de pagini pentru fiecare proces Pointer-ul la tabela de pagini a procesului este stocat în PCB O soluție este folosirea de registre pentru stocarea tabelei de pagini problemă: dimensiunea mare PTBR – page table base register punctează către adresa de memorie unde este stocată tabela de pagini problemă: două accese la memorie soluția: TLB 21.03.2010 - 27.03.2010

TLB Translation Look-aside Buffer Cache rapid dar de dimensiune mică și cost ridicat Memorie asociativă rapidă tag (cheie) – page number valoare – frame number Dimensiune tipică între 64 și 1024 de intrări 21.03.2010 - 27.03.2010

TLB (2) 21.03.2010 - 27.03.2010

Exercițiu TLB Date Care este media timpului de acces la memorie? TLB hit rate: 75% Timp de acces la memorie: 60ns Timp de acces la TLB: 10ns Care este media timpului de acces la memorie? Dar dacă TLB hit rate este 95%? 21.03.2010 - 27.03.2010

Protecția memoriei paginate 21.03.2010 - 27.03.2010

Partajarea memoriei Avantaj al paginării Fiecare proces care provine din același executabil poate partaja paginile fizice paginile de date sunt distincte Codul poate fi partajat dacă nu trebuie relocat Codul partajat trebuie să fie read-only Mecanismul de memorie partajată este implementat folosind pagini partajate 21.03.2010 - 27.03.2010

Paginarea ierarhică Situație: sistem cu spațiu de adresă pe 32 de biți, dimensiunea unei paginii de 12 biți tabela de pagini conține 2^32 / 2^12 = 2^20 intrări (1 milion) fiecare intrare ocupă 4 octeți -> 4 MB ocupați doar cu menținerea tabelei de pagini Soluție: paginarea ierarhică împărțirea tabelei de pagini în componente mai mici 21.03.2010 - 27.03.2010

Paginarea ierarhică (2) Pe un sistem pe 32 de biți se poate opta pentru împărțirea numărului de pagină Număr de pagină de 10 biți index în outer page table Offset de pagină de 10 biți index în page table Outer page table nu conține pointeri către page table în pozițiile unde adresele sunt invalide economisire spațiu 21.03.2010 - 27.03.2010

Paginarea ierarhică (3) 21.03.2010 - 27.03.2010

Exercițiu Date Cât spațiu ocupă tabela de pagini în cazul folosirii: Spațiu virtual de adresare de 32 de biți Pagina de 4K Spațiul virtual al unui proces [.text 1020 pagini] [.data 4 pagini] [4096 pagini spatiu nemapat] [.stack 16 pagini] O pagină din tabela de pagini conține 1024 de intrări Cât spațiu ocupă tabela de pagini în cazul folosirii: paginării neierarhice paginării ierarhice pe două niveluri (10 biți, 10 biți, 12 biți) 21.03.2010 - 27.03.2010

Tabela de pagini inversată Altă soluție la dimensiunea mare a tabelei de pagini Există o intrare pentru fiecare pagină fizică (frame din sistem) Intrarea conține pid-ul procesului adresa paginii logice stocate în pagina fizică Se folosește mai puțin spațiu Căutare mai costisitoare – tabele hash 21.03.2010 - 27.03.2010

Tabela de pagini inversată (2) 21.03.2010 - 27.03.2010

Segmentare Utilizatorul/programatorul vede memoria ca o colecție de zone (pentru funcții, date, stivă etc.) Segmentare – spațiul logic de adrese este o colecție de segmente O adresă logică este un tuplu <număr segment, deplasament> Tabela de segmente realizează translatarea între adresa logică și adresa fizică Tabela de segmente conține o adresă de bază a segmentului și o adresă limită Numărul segmentului (din adresa logică) este un index în tabela de segmente 21.03.2010 - 27.03.2010

Segmentare (2) 21.03.2010 - 27.03.2010

Segmentare (3) 21.03.2010 - 27.03.2010

Segmentare cu paginare (Intel) 21.03.2010 - 27.03.2010

Selectorul de segment CS pentru cod, DS pentru date, SS pentru stivă Indexează un descriptor în GDT sau LDT 21.03.2010 - 27.03.2010

Descriptorul de segment 21.03.2010 - 27.03.2010

Adresă liniară 21.03.2010 - 27.03.2010

Niveluri de protecție La x86 sunt 4 niveluri de protecție Apelurile inter-nivel se realizează prin operații de procesor specializate (call-gates) selectorul indică un descriptor ce conține adresa de intrare și nivelul de protecție necesar Un apel de sistem înseamnă trecerea din nivelul de protecție 3 la nivelul 0 21.03.2010 - 27.03.2010

Cuvinte cheie Alocare Ierarhia de memorii Fragmentare Memoria principală Memoria cache Spațiu de memorie Address binding Dynamic linking Pagină virtuală (page) Pagină fizică (frame) Adresă logică Adresă fizică Alocare Fragmentare Paginare Tabelă de pagini TLB Paginare ierarhică Tabelă inversată Segmentare Selector de segment Descriptor de segment Adresă liniară 21.03.2010 - 27.03.2010

Exercițiu Câte elemente de fiecare tip din lista celor de mai jos conține un proces? executabil stivă handler de semnal tabelă de fișiere spațiu de adresă descriptor de fișier deschis tabelă de pagini (discuție paginare ierarhică/neierarhică) 21.03.2010 - 27.03.2010

Exercițiu 2 Un sistem fără TLB și cache accesează memoria folosind paginare neierarhică. Presupunând că timpul de acces la memorie este de 5ns și că o pagină de memorie ocupă 4KB, cât durează operațiile de mai jos? (sizeof(char) = 1) char a[4096 * 16]; char b[4096 * 16]; /* init a[i] */ for (i = 0; i < 4096 * 16; i += 32) { b[i] = a[4096* 16 – i -1]; } 21.03.2010 - 27.03.2010

Întrebări ? 21.03.2010 - 27.03.2010