Platformăde e-learning și curriculăe-content pentru...

39
Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic 1 Sisteme de Operare 2 5. Memoria Fizică SO2 – Sisteme de Operare 2

Transcript of Platformăde e-learning și curriculăe-content pentru...

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

1

� Sisteme de Operare 2

5. Memoria Fizică

SO2 – Sisteme de Operare 2

2

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 222

• Adresarea memoriei pe o arhitectură x86o Segmentareo Paginareo TLB

• Organizarea spaŃiului de adresăo Usero Kernel

• High memory• Bibliografie

o UTLK: capitolul 2

Gestiunea memoriei (I)

SO2 – Sisteme de Operare 2

3

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 333

Adresarea memoriei la x86

�Segmentare + paginare

�Adrese x86:

•Logice: adresele pe care le foloseşte procesorul

•Lineare: adresele ce sunt generate de unitate de segmentare

•Fizice: adresele folosite pentru accesarea memoriei fizice; generate de unitate de paginare

SO2 – Sisteme de Operare 2

4

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 444

�Selectori = Registre: cs, ds, ss, es, fs, gs

�Index: Indexează tabela de descriptori

�TI: indică tabela: GDT sau LDT

�Tabelele sunt ținute în memorie la adrese specificate în registre: gdtr şi ldtr

�RPL: dacă selectorul este încărcat în CS, specifică nivelul curent de privilegiu (CPL)

Selectori

SO2 – Sisteme de Operare 2

5

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 555

Descriptori de segment

SO2 – Sisteme de Operare 2

6

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 666

Descriptori de segment (2)

�Baza: adresa (liniară) pentru începutul segmentului

�Limita: dimensiunea segmentului

�G: bitul de granularitate: dacă nu este setat dimensiunile se exprimă în octeți, altfel în pagini de 4K

�B/D: data/code

�Tipul: segment de cod, date/stivă, TSS, LDT, GTD

�Protecție: nivelul minim de privilegiu necesar accesării segmentului (se compara DPL cu CPL)

SO2 – Sisteme de Operare 2

7

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 777

Segmentare în Linux

� segment pentru TSS – pentru adresa stivei kernel: folosită la schimbarea contextul din user mode în kernel mode

� segment pentru LDT: Aplicațiile ce au nevoie de segmentare (WINE) folosesc apelul de sistem sys_modify_ldt pentru a crea noi segmente (în LDT)

DEFINE_PER_CPU(struct gdt_page, gdt_page) = { .gdt = {

/* kernel 4GB code at 0x00000000 */

[GDT_ENTRY_KERNEL_CS] = { { { 0x0000ffff, 0x00cf9a00 } } },

/* kernel 4GB data at 0x00000000 */

[GDT_ENTRY_KERNEL_DS] = { { { 0x0000ffff, 0x00cf9200 } } },

/* user 4GB code at 0x00000000 */

[GDT_ENTRY_DEFAULT_USER_CS] = { { { 0x0000ffff,0x00cffa00 } } },

/* user 4GB data at 0x00000000 */

[GDT_ENTRY_DEFAULT_USER_DS] = { { { 0x0000ffff,0x00cff200 } } },

...

SO2 – Sisteme de Operare 2

8

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 888

Segmentarea în Windows

c:\so\x\>w2k_mem +c

[...]

CPU information:

----------------

User mode segments:

CS : Selector = 001B, Base = 00000000, Limit = FFFFFFFF, DPL3, Type = CODE -ra

DS : Selector = 0023, Base = 00000000, Limit = FFFFFFFF, DPL3, Type = DATA -wa

ES : Selector = 0023, Base = 00000000, Limit = FFFFFFFF, DPL3, Type = DATA -wa

FS : Selector = 0038, Base = 7FFDE000, Limit = 00000FFF, DPL3, Type = DATA -wa

SS : Selector = 0023, Base = 00000000, Limit = FFFFFFFF, DPL3, Type = DATA -wa

TSS : Selector = 0028, Base = 80244000, Limit = 000020AB, DPL0, Type = TSS32 b

Kernel mode segments:

CS : Selector = 0008, Base = 00000000, Limit = FFFFFFFF, DPL0, Type = CODE -ra

DS : Selector = 0023, Base = 00000000, Limit = FFFFFFFF, DPL3, Type = DATA -wa

ES : Selector = 0023, Base = 00000000, Limit = FFFFFFFF, DPL3, Type = DATA -wa

FS : Selector = 0030, Base = FFDFF000, Limit = 00001FFF, DPL0, Type = DATA -wa

SS : Selector = 0010, Base = 00000000, Limit = FFFFFFFF, DPL0, Type = DATA -wa

TSS : Selector = 0028, Base = 80244000, Limit = 000020AB, DPL0, Type = TSS32 b

SO2 – Sisteme de Operare 2

9

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 999

Paginarea la x86

�Paginare normală

•2 nivele, pagină de 4K

•Adresa (liniară) împarțită în 3 câmpuri

–Directory (cei mai semnificativi 10 biți)

–Table (următorii cei mai semnificativi 10 biți)

–Offset (cei mai puțin seminificativi 12 biți)

�Paginare extinsă

•Un singur nivel, pagină de 4M

•Adresa liniară împarțită în 2 câmpuri

–Directory (cei mai semnificativi 10 biți)

–Offset (cei mai puțin semnificativi 22 biți)

SO2 – Sisteme de Operare 2

10

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 101010

Paginare x86 (normală)

SO2 – Sisteme de Operare 2

11

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 111111

Paginare x86 (extinsă)

SO2 – Sisteme de Operare 2

12

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 121212

Tabelele de pagini x86

�Fiecare tabelă (atât page directory cât şi page table ) poate avea maxim 1024 intrări și este ținută în memorie

�Fiecare intrare are 4 octeți

�Adresa Page Directory se setează prin registrul CR3 – adresă fizică

�Page directory conține pointeri câtre adresa de bază a page table-ului pe care îl referă – adrese fizice

SO2 – Sisteme de Operare 2

13

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 131313

Page table entry

�Prezent/Absent

�PFN: Cei mai semnificativi 20 de biți ai adresei fizice

�Acessed - flagul NU este actualizat de procesor

�Dirty - flagul NU este actualizat de procesor

�Drepturi de acces: Read/Write

�Privilegiu: User/Supervisor

�Page size - numai pentru intrările din Page Directory; dacă este setat se foloseste paginare extinsă

�PCD (page cache disable), PWT (page write through)

SO2 – Sisteme de Operare 2

14

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 141414

Paginarea în Linux

SO2 – Sisteme de Operare 2

15

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 151515

Implementare generică

struct * page;

pgd_t pgd;

pmd_t pmd;

pud_t pud;

pte_t pte;

void *laddr, *paddr;

pgd = pgd_offset(mm, vaddr);

pud = pud_offet(pgd, vaddr);

pmd = pmd_offset(pud, vaddr);

pte = pte_offset(pmd, vaddr);

page = pte_page(pte);

laddr = page_address(page);

paddr = virt_to_phys(laddr);

SO2 – Sisteme de Operare 2

16

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 161616

Platforme cu mai puţin de patru niveluri?

static inline pud_t * pud_offset(pgd_t * pgd,unsigned long address)

{

return (pud_t *)pgd;

}

static inline pmd_t * pmd_offset(pud_t * pud,unsigned long address)

{

return (pmd_t *)pud;

}

SO2 – Sisteme de Operare 2

17

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 171717

Translation Lookaside Buffer (x86)

�Păstrează într-o tabelă informațiile despre o anumită pagină (PFN, drepturi, privilegii)

�Tabelă de dimensiune mică (64-128)

�Memorie asociativă (căutare paralelă)

�Două TLB-uri: i-TLB (pentru cod) şi d-TLB (pentru date)

�Hit time: un ceas

�Miss penalty: 10 – 30 ceasuri

�Nu menține informații despre spațiul de adresă

SO2 – Sisteme de Operare 2

18

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 181818

Translation Lookaside Buffer (2)

�La modificarea mapării paginilor este necesară invalidarea unor intrari din TLB

mov $addr, %eax

invlpg %(eax)

�La modificarea registrului cr3 este invalidat automat tot TLB-ul

mov %cr3, %eax

move %eax, %cr3

SO2 – Sisteme de Operare 2

19

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 191919

Gestiunea memoriei fizice în Linux

�Algoritmi și structuri de date ce mențin starea memoriei fizice

�Se face la nivel de pagină

�(Relativ) independentă de gestiunea memoriei virtuale

�Fiecare pagina fizică are asociată un descriptor: struct page

�În zona lowmem se ține un vector de astfel de descriptori (mem_map)

�(descritorul de pagină conține: un contor de utilizare al paginii, flag-uri, poziția în swap sau în fișier, buferele conținute de pagină, poziția în "page cache", etc.)

SO2 – Sisteme de Operare 2

20

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 202020

Zone (fizice) de memorie

�Zona DMA: 0 - 16Mb

�Zona Normal (LowMem): 16Mb - 896Mb

�Zona HighMem: 896Mb – 4Gb/64Gb

�Non-Uniform Memory Access

•Memoria fizică este împarțită între mai multe noduri

–există un spațiu comun de adrese fizice

–accesul la memoria locală este mai rapidă

•Fiecare nod

–are procesorul propriu

–are zone de memorie proprii: DMA, NORMAL, HIGHMEM

SO2 – Sisteme de Operare 2

21

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 212121

Alocarea de pagini

�alloc_pages(gfp_mask, order)

•Alocă 2^order PAGINI contigue şi întoarce un descriptor de pagină pentru prima pagină alocată

�alloc_page(gfp_mask)

�Funcții mai folositoare (întorc adresa lineară a paginii/primei pagini)

•__get_free_pages(gfp_mask, order)

•__get_free_page(gfp_mask)

•__get_zero_page(gfp_mask)

•__get_dma_pages(gfp_mask, order)

SO2 – Sisteme de Operare 2

22

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 222222

Măștile GFP

�__GFP_WAIT

–Kernelul poate bloca procesul curent pentru a aștepta pagini libere

�GFP_HIGH

–Prioritate mare; kernelul are voie să foloseasca pagini libere rezervate pentru ieșirea din situații critice (atunci când există foarte puțină memorie)

�__GFP_IO

–Kernelul are voie să facă transferuri I/O pe pagini normale pentru a elibera memorie (necesar pentru evitare deadlock-uri)

• __GFP_HIGHIO

� Kernelul are voie să facă transferuri I/O pe pagini din high memory pentru a elibera memorie (necesar pentru evitare deadlock-uri)

• __GFP_FS

� Kernelul are voie să execute operaŃii VFS low level (necesar pentru evitare deadlock-uri)

• __GFP_DMA

� Paginile trebuie alocate din zona DMA

• __GFP_HIGHMEM

� Paginile trebuie alocate din zona HIGHMEM

SO2 – Sisteme de Operare 2

23

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 232323

Măștile GFP (2)

�GFP_ATOMIC

–__GFP_HIGH

�GFP_KERNEL

–__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO

| __GFP_FS

�GFP_USER

–__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO

| __GFP_FS

SO2 – Sisteme de Operare 2

24

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 242424

De ce alocare în puteri ale lui 2?

�Algoritmii de alocare sunt liniari și fragmentează memoria

�O posibilă soluție: paging

•Uneori kernelul chiar are nevoie de memorie fizică contiguă (pentru DMA)

•Dacă s-ar folosi paging, tabela de pagini s-ar modifica => penalizări la accesul la memorie

•Dacă s-ar folosi paging nu s-ar mai putea folosi paginare extinsă (pagini de 4Mb/2Mb)

•Anumite arhitecturi (MIPS) mapează o parte din spațiul liniar de adresă kernel în memoria fizică (i.e. pe acea zonă nu se foloseşte paginare)

SO2 – Sisteme de Operare 2

25

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 252525

Algoritmul buddy

�Blocurile sunt grupate în liste de dimensiune fixă

•Blocurile au ca dimensiune puterile lui 2, aliniate corespunzător cu dimensiunea

�Alocarea se face numai în blocuri de puteri ale lui 2

�La alocarea unui bloc (dimensiune N)

•Dacă există un bloc de dimensiune N se alocă

•Dacă nu, se sparge un bloc de dimensiune 2N în două blocuri de dimensiune N, unul se alocă, altul se pune în lista cu blocuri de dimensiune N

�La dealocarea unui bloc (dimensiune N)

•Dacă există blocuri adiacente în memoria fizică de aceeași dimensiune N, iar primul este aliniat la 2N, cele două blocuri se “coagulează” într-un bloc de dimensiune 2N

•Se încearcă iterativ să se coaguleze cât mai multe blocuri

SO2 – Sisteme de Operare 2

26

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 262626

Implementarea algorimului buddy în Linux

�Sunt folosite 11 liste pentru blocuri de 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 PAGINI

�Fiecare zonă de memorie are alocatorul buddy propriu

�Fiecare zona are asociată un vector de descriptori de blocuri libere, câte o intrare pentru fiecare dimensiune de bloc

�Descriptorul de blocuri libere conține numărul de pagini libere şi capul listei de blocuri libere

�Blocurile sunt înlănțuite cu ajutorul câmpului lru din descriptorul de pagini

�Paginile libere folosite de buddy au flagul PG_buddy setat

�Descriptorul de pagina menține dimensiunea blocului în câmpul private pentru a putea face uşor verificările necesare pentru coagularea a două blocuri libere ce sunt adiacente

SO2 – Sisteme de Operare 2

27

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 272727

Alocarea de blocuri cu dimensiune mică

�Sistemul buddy este folosit în kernel pentru a aloca pagini

�Multe componente din kernel au nevoie de blocuri de dimensiune mult mai mică decât dimensiunea unei pagini

�Soluție: folosirea de blocuri mai mici cu dimensiune variabile

•Probleme: fragmentare externă

�Soluție: folosirea unor blocuri de dimensiune fixă, dar mai mici

•Probleme: cât de mica/mare sa fie dimensiunea ?

•Soluție: crearea mai multor zone cu blocuri de mai multe dimensiuni, distribuite geometric: 32, 64, ..., 131 056

SO2 – Sisteme de Operare 2

28

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 282828

Alocatorul slab

�Zonele de memorie alocate/dealocate sunt văzute ca "obiecte"

�Fiecare tip de "obiect" are un constructor și un destructor

�Obiectele dealocate sunt păstrate într-un cache, astfel că la urmatoarea folosire a lor nu mai trebuie reinițializate și nu mai trebuie apelat algoritmul buddy

�În Linux nu (prea) se folosesc constructori/desctructori din motive de eficiență

SO2 – Sisteme de Operare 2

29

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 292929

De ce slab?

�Kernelul tinde să aloce/dealoce succesiv acelaşi tip de structuri de date (de exemplu PCB-uri); folosirea cache-ului din slab reduce frecvența operatiilor (mai costisitoare) de alocare/dealocare

�Multe cereri de alocare frecvente folosesc aceeaşi dimensiune pentru fiecare alocare: pentru aceste tipuri se pot crea zone speciale, care să conțină blocuri de dimensiunea dorită => se reduce astfel fragmentarea interna

�Pentru cereri ce nu folosesc aceaşi dimensiune la alocare (mult mai puțin frecvente) se poate folosi în continuare abordarea geometrică (şi cache)

�Reduce foot-print-ul pentru alocare/dealocare pentru că nu se mai caută pagini libere ci sunt luate direct din cache-uri (cache-urile de obiecte sunt concentrate într-o zonă de memorie şi sunt mult mai mici decât structurile folosite de buddy)

�Distribuie obiectele în memorie astfel încât să acopere uniform liniile de cache

SO2 – Sisteme de Operare 2

30

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 303030

Arhitectura alocatorului slab

�Alocatorul slab este format din

•Mai multe cache-uri

•Fiecare cache are mai multe slab-uri

•Fiecare slab menține mai multe obiecte alocate / libere

SO2 – Sisteme de Operare 2

31

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 313131

Descriptorii de cache

�Un nume folosit pentru informații către user-space

�Funcții pentru inițializarea / deinițializarea obiectelor cache-ului

�Dimensiunea obiectelor

�Diverse flaguri statice / dinamice

�Dimensiunea slab-urilor (structurile care conțin efectiv obiectele) în pagini (puteri ale lui 2)

�Măsti GFP pentru alocarea dintr-o zonă specifică

�Mai multe slab-uri: pline, libere sau parțial pline

SO2 – Sisteme de Operare 2

32

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 323232

Descriptorii de slab

�Numărul de obiecte alocate

�Zona de memorie în care se țin obiectele

�Zona de memorie către primul obiect liber

�Descriptorii de slab sunt ținuti fie

•În cadrul slab-ului ce îl descriu (dacă dimensiunea obiectelor e mai mică de 512, sau dacă fragmentarea internă lasa loc pentru descriptorul de slab)

•În cadrul unor cache-uri generale folosite de către alocatorul slab

SO2 – Sisteme de Operare 2

33

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 333333

Arhitectura detaliată slab

SO2 – Sisteme de Operare 2

34

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 343434

Cache-urile generale / specifice

�Cache-urile generale sunt folosite de alocatorul slab pentru

•A ține descriptorii de cache pentru celelalte cache-uri

•A ține 26 de cache-uri generale cu dimensiunea obiectelor de 32, 64, 128, ..., 131 072 (unul pentru zona normală şi unul pentru zona DMA); kmalloc() alocă memorie din aceste cache-uri

�Cache-urile specifice sunt create de către restul kernelului la cerere

SO2 – Sisteme de Operare 2

35

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 353535

Descriptorii de obiecte

SO2 – Sisteme de Operare 2

36

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 363636

Descriptorii de obiecte

�Descriptorul de obiect este folosit doar atunci când obiectul este liber

�Este de fapt un întreg care indică următorul obiect liber

�Ultimul obiect liber are valoarea BUFCTL_END

�Descriptori de obiecte

•Interni - ținuți în slab

•Externi - ținuți în cache-urile generale

SO2 – Sisteme de Operare 2

37

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 373737

“Colorarea” slab-ului

SO2 – Sisteme de Operare 2

38

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 383838

“Colorarea” slab-ului (2)

�Colorarea este folosită pentru a alinia obiectele din diversele slab-uri din cache la offset-uri diferite (dar constrângerile de aliniere ale obiectelor din cache sunt păstrate)

•Aln - constrângerea de aliniere; adresa obiectului trebuie să fie un multiplu de acest număr

•Num - numărul de obiecte care pot fi stocate în slab

•Objsize - dimensiunea obiectelor, inclusiv octeții nefolosiți dar necesari pentru aliniere

•Dsize - dimensiunea descriptorului slab-ului + dimensiunea descriptorilor de obiecte

•Free - numărul de octeți neutilizați în slab

SO2 – Sisteme de Operare 2

39

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SO – Sisteme de operare. Roluri si descriere generala 393939

“Colorarea” slab-ului (3)

�slab_length = num x objsize + dsize + free

�Numărul de culori = free / aln + 1

�Numărul maxim de posibilități de plasa primul obiect în slab prin mutarea unei bucăți din zona free de la sfârşitul slab-ului la începtul acestuia

�Cum toate definițiile date sunt comune unui cache, înseamnă că alocatorul slab poate aloca “culori” diferite fiecărui slab

SO2 – Sisteme de Operare 2