Rev 71 | Rev 73 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 71 | Rev 72 | ||
|---|---|---|---|
| Line 187... | Line 187... | ||
| 187 | internal fragmentation.</para> |
187 | internal fragmentation.</para> |
| 188 | 188 | ||
| 189 | <indexterm> |
189 | <indexterm> |
| 190 | <primary>slab allocator</primary> |
190 | <primary>slab allocator</primary> |
| 191 | 191 | ||
| 192 | <secondary>slab cache</secondary> |
192 | <secondary>- slab cache</secondary> |
| 193 | </indexterm> |
193 | </indexterm> |
| 194 | 194 | ||
| 195 | <para>Slabs of one object type are organized in a structure called slab |
195 | <para>Slabs of one object type are organized in a structure called slab |
| 196 | cache. There are ususally more slabs in the slab cache, depending on |
196 | cache. There are ususally more slabs in the slab cache, depending on |
| 197 | previous allocations. If the the slab cache runs out of available slabs, |
197 | previous allocations. If the the slab cache runs out of available slabs, |
| Line 203... | Line 203... | ||
| 203 | magazines.</para> |
203 | magazines.</para> |
| 204 | 204 | ||
| 205 | <indexterm> |
205 | <indexterm> |
| 206 | <primary>slab allocator</primary> |
206 | <primary>slab allocator</primary> |
| 207 | 207 | ||
| 208 | <secondary>magazine</secondary> |
208 | <secondary>- magazine</secondary> |
| 209 | </indexterm> |
209 | </indexterm> |
| 210 | 210 | ||
| 211 | <para>Each object begins its life in a slab. When it is allocated from |
211 | <para>Each object begins its life in a slab. When it is allocated from |
| 212 | there, the slab allocator calls a constructor that is registered in the |
212 | there, the slab allocator calls a constructor that is registered in the |
| 213 | respective slab cache. The constructor initializes and brings the object |
213 | respective slab cache. The constructor initializes and brings the object |
| 214 | into a known state. The object is then used by the user. When the user |
214 | into a known state. The object is then used by the user. When the user |
| 215 | later frees the object, the slab allocator puts it into a processor |
215 | later frees the object, the slab allocator puts it into a processor |
| 216 | private <indexterm> |
216 | private <indexterm> |
| 217 | <primary>slab allocator</primary> |
217 | <primary>slab allocator</primary> |
| 218 | 218 | ||
| 219 | <secondary>magazine</secondary> |
219 | <secondary>- magazine</secondary> |
| 220 | </indexterm>magazine cache, from where it can be precedently allocated |
220 | </indexterm>magazine cache, from where it can be precedently allocated |
| 221 | again. Note that allocations satisfied from a magazine are already |
221 | again. Note that allocations satisfied from a magazine are already |
| 222 | initialized by the constructor. When both of the processor cached |
222 | initialized by the constructor. When both of the processor cached |
| 223 | magazines get full, the allocator will move one of the magazines to the |
223 | magazines get full, the allocator will move one of the magazines to the |
| 224 | list of full magazines. Similarily, when allocating from an empty |
224 | list of full magazines. Similarily, when allocating from an empty |
| Line 362... | Line 362... | ||
| 362 | 362 | ||
| 363 | <section> |
363 | <section> |
| 364 | <indexterm> |
364 | <indexterm> |
| 365 | <primary>address space</primary> |
365 | <primary>address space</primary> |
| 366 | 366 | ||
| 367 | <secondary>area</secondary> |
367 | <secondary>- area</secondary> |
| 368 | </indexterm> |
368 | </indexterm> |
| 369 | 369 | ||
| 370 | <title>Address space areas</title> |
370 | <title>Address space areas</title> |
| 371 | 371 | ||
| 372 | <para>Each address space consists of mutually disjunctive continuous |
372 | <para>Each address space consists of mutually disjunctive continuous |
| Line 396... | Line 396... | ||
| 396 | 396 | ||
| 397 | <section> |
397 | <section> |
| 398 | <indexterm> |
398 | <indexterm> |
| 399 | <primary>address space</primary> |
399 | <primary>address space</primary> |
| 400 | 400 | ||
| 401 | <secondary>ASID</secondary> |
401 | <secondary>- ASID</secondary> |
| 402 | </indexterm> |
402 | </indexterm> |
| 403 | 403 | ||
| 404 | <title>Address Space ID (ASID)</title> |
404 | <title>Address Space ID (ASID)</title> |
| 405 | 405 | ||
| 406 | <para>When switching to the different task, kernel also require to |
406 | <para>When switching to the different task, kernel also require to |
| Line 428... | Line 428... | ||
| 428 | to the active task.</para> |
428 | to the active task.</para> |
| 429 | 429 | ||
| 430 | <indexterm> |
430 | <indexterm> |
| 431 | <primary>address space</primary> |
431 | <primary>address space</primary> |
| 432 | 432 | ||
| 433 | <secondary>ASID stealing</secondary> |
433 | <secondary>- ASID stealing</secondary> |
| 434 | </indexterm> |
434 | </indexterm> |
| 435 | 435 | ||
| 436 | <para> |
436 | <para> |
| 437 | <classname>ASID stealing algoritm here.</classname> |
437 | <classname>ASID stealing algoritm here.</classname> |
| 438 | </para> |
438 | </para> |
| Line 487... | Line 487... | ||
| 487 | 487 | ||
| 488 | <section id="page_tables"> |
488 | <section id="page_tables"> |
| 489 | <indexterm> |
489 | <indexterm> |
| 490 | <primary>page tables</primary> |
490 | <primary>page tables</primary> |
| 491 | 491 | ||
| 492 | <secondary>hierarchical</secondary> |
492 | <secondary>- hierarchical</secondary> |
| 493 | </indexterm> |
493 | </indexterm> |
| 494 | 494 | ||
| 495 | <title>Hierarchical 4-level page tables</title> |
495 | <title>Hierarchical 4-level page tables</title> |
| 496 | 496 | ||
| 497 | <para>Hierarchical 4-level page tables are the generalization of the |
497 | <para>Hierarchical 4-level page tables are the generalization of the |
| Line 510... | Line 510... | ||
| 510 | 510 | ||
| 511 | <section> |
511 | <section> |
| 512 | <indexterm> |
512 | <indexterm> |
| 513 | <primary>page tables</primary> |
513 | <primary>page tables</primary> |
| 514 | 514 | ||
| 515 | <secondary>hashing</secondary> |
515 | <secondary>- hashing</secondary> |
| 516 | </indexterm> |
516 | </indexterm> |
| 517 | 517 | ||
| 518 | <title>Global hash table</title> |
518 | <title>Global hash table</title> |
| 519 | 519 | ||
| 520 | <para>Implementation of the global hash table was encouraged by the |
520 | <para>Implementation of the global hash table was encouraged by the |
| Line 554... | Line 554... | ||
| 554 | 554 | ||
| 555 | <section id="tlb_shootdown"> |
555 | <section id="tlb_shootdown"> |
| 556 | <indexterm> |
556 | <indexterm> |
| 557 | <primary>TLB</primary> |
557 | <primary>TLB</primary> |
| 558 | 558 | ||
| 559 | <secondary>TLB shootdown</secondary> |
559 | <secondary>- TLB shootdown</secondary> |
| 560 | </indexterm> |
560 | </indexterm> |
| 561 | 561 | ||
| 562 | <title>TLB consistency. TLB shootdown algorithm.</title> |
562 | <title>TLB consistency. TLB shootdown algorithm.</title> |
| 563 | 563 | ||
| 564 | <para>Operating system is responsible for keeping TLB consistent by |
564 | <para>Operating system is responsible for keeping TLB consistent by |