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 |