Subversion Repositories HelenOS-doc

Rev

Rev 68 | Rev 70 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 68 Rev 69
Line 12... Line 12...
12
 
12
 
13
  <section>
13
  <section>
14
    <title>Physical memory management</title>
14
    <title>Physical memory management</title>
15
 
15
 
16
    <section id="zones_and_frames">
16
    <section id="zones_and_frames">
-
 
17
      <indexterm><primary>memory management</primary><secondary>memory zone</secondary></indexterm>
17
      <title>Zones and frames</title>
18
      <title>Zones and frames</title>
18
 
19
 
19
      <para>HelenOS represents continuous areas of physical memory in
20
      <para>HelenOS represents continuous areas of physical memory in
20
      structures called frame zones (abbreviated as zones). Each zone contains
21
      structures called frame zones (abbreviated as zones). Each zone contains
21
      information about the number of allocated and unallocated physical
22
      information about the number of allocated and unallocated physical
Line 42... Line 43...
42
      structure that contains number of references and data used by buddy
43
      structure that contains number of references and data used by buddy
43
      system.</para>
44
      system.</para>
44
    </section>
45
    </section>
45
 
46
 
46
    <section id="frame_allocator">
47
    <section id="frame_allocator">
-
 
48
      <indexterm><primary>memory management</primary><secondary>frame allocator</secondary></indexterm>
47
      <title>Frame allocator</title>
49
      <title>Frame allocator</title>
48
 
50
 
49
      <para>The frame allocator satisfies kernel requests to allocate
51
      <para>The frame allocator satisfies kernel requests to allocate
50
      power-of-two sized blocks of physical memory. Because of zonal
52
      power-of-two sized blocks of physical memory. Because of zonal
51
      organization of physical memory, the frame allocator is always working
53
      organization of physical memory, the frame allocator is always working
Line 81... Line 83...
81
        to take care of deallocation within the zone's buddy system.</para>
83
        to take care of deallocation within the zone's buddy system.</para>
82
      </formalpara>
84
      </formalpara>
83
    </section>
85
    </section>
84
 
86
 
85
    <section id="buddy_allocator">
87
    <section id="buddy_allocator">
-
 
88
      <indexterm><primary>memory management</primary><secondary>buddy system</secondary></indexterm>
86
      <title>Buddy allocator</title>
89
      <title>Buddy allocator</title>
87
 
90
 
88
      <para>In the buddy system, the memory is broken down into power-of-two
91
      <para>In the buddy system, the memory is broken down into power-of-two
89
      sized naturally aligned blocks. These blocks are organized in an array
92
      sized naturally aligned blocks. These blocks are organized in an array
90
      of lists, in which the list with index i contains all unallocated blocks
93
      of lists, in which the list with index i contains all unallocated blocks
Line 155... Line 158...
155
        </formalpara>
158
        </formalpara>
156
      </section>
159
      </section>
157
    </section>
160
    </section>
158
 
161
 
159
    <section id="slab">
162
    <section id="slab">
-
 
163
    <indexterm><primary>memory management</primary><secondary>slab</secondary></indexterm>      
160
      <title>Slab allocator</title>
164
    <title>Slab allocator</title>
161
 
165
 
162
      <para>The majority of memory allocation requests in the kernel is for
166
      <para>The majority of memory allocation requests in the kernel is for
163
      small, frequently used data structures. The basic idea behind the slab
167
      small, frequently used data structures. The basic idea behind the slab
164
      allocator is that commonly used objects are preallocated in continuous
168
      allocator is that commonly used objects are preallocated in continuous
165
      areas of physical memory called slabs<footnote>
169
      areas of physical memory called slabs<footnote>
Line 238... Line 242...
238
               dynamic magazine grow (different magazine sizes are already supported, but the allocation strategy would need to be adjusted)
242
               dynamic magazine grow (different magazine sizes are already supported, but the allocation strategy would need to be adjusted)
239
            </listitem>
243
            </listitem>
240
          </itemizedlist></para>
244
          </itemizedlist></para>
241
 
245
 
242
        <section>
246
        <section>
-
 
247
        <indexterm><primary>memory management</primary><secondary>slab magazine</secondary></indexterm>
243
          <title>Magazine layer</title>
248
        <title>Magazine layer</title>
244
 
249
 
245
          <para>Due to the extensive bottleneck on SMP architures, caused by
250
          <para>Due to the extensive bottleneck on SMP architures, caused by
246
          global slab locking mechanism, making processing of all slab
251
          global slab locking mechanism, making processing of all slab
247
          allocation requests serialized, a new layer was introduced to the
252
          allocation requests serialized, a new layer was introduced to the
248
          classic slab allocator design. Slab allocator was extended to
253
          classic slab allocator design. Slab allocator was extended to
Line 376... Line 381...
376
 
381
 
377
    <section>
382
    <section>
378
      <title>Address spaces</title>
383
      <title>Address spaces</title>
379
 
384
 
380
      <section>
385
      <section>
-
 
386
    <indexterm><primary>memory management</primary><secondary>address space area</secondary></indexterm>
381
        <title>Address space areas</title>
387
    <title>Address space areas</title>
382
 
388
 
383
        <para>Each address space consists of mutually disjunctive continuous
389
        <para>Each address space consists of mutually disjunctive continuous
384
        address space areas. Address space area is precisely defined by its
390
        address space areas. Address space area is precisely defined by its
385
        base address and the number of frames/pages is contains.</para>
391
        base address and the number of frames/pages is contains.</para>
386
 
392
 
Line 422... Line 428...
422
        <para>Kernel provides possibility tasks create/expand/shrink/share its
428
        <para>Kernel provides possibility tasks create/expand/shrink/share its
423
        address space via the set of syscalls.</para>
429
        address space via the set of syscalls.</para>
424
      </section>
430
      </section>
425
 
431
 
426
      <section>
432
      <section>
-
 
433
    <indexterm><primary>memory management</primary><secondary>asid</secondary></indexterm>
427
        <title>Address Space ID (ASID)</title>
434
        <title>Address Space ID (ASID)</title>
428
 
435
 
429
        <para>When switching to the different task, kernel also require to
436
        <para>When switching to the different task, kernel also require to
430
        switch mappings to the different address space. In case TLB cannot
437
        switch mappings to the different address space. In case TLB cannot
431
        distinguish address space mappings, all mapping information in TLB
438
        distinguish address space mappings, all mapping information in TLB
Line 471... Line 478...
471
          access to the virtual address, CPU performs <emphasis>address
478
          access to the virtual address, CPU performs <emphasis>address
472
          translation</emphasis> during the instruction execution.
479
          translation</emphasis> during the instruction execution.
473
          Non-existing mapping generates page fault exception, calling kernel
480
          Non-existing mapping generates page fault exception, calling kernel
474
          exception handler, thus allowing kernel to manipulate rules of
481
          exception handler, thus allowing kernel to manipulate rules of
475
          memory access. Information for pages mapping is stored by kernel in
482
          memory access. Information for pages mapping is stored by kernel in
476
          the <link linkend="page_tables">page tables</link></para>
483
          the page tables</para>
477
 
484
 
478
          <para>The majority of the architectures use multi-level page tables,
485
          <para>The majority of the architectures use multi-level page tables,
479
          which means need to access physical memory several times before
486
          which means need to access physical memory several times before
480
          getting physical address. This fact would make serios performance
487
          getting physical address. This fact would make serios performance
481
          overhead in virtual memory management. To avoid this <link
488
          overhead in virtual memory management. To avoid this <link
Line 519... Line 526...
519
              </listitem>
526
              </listitem>
520
            </itemizedlist></para>
527
            </itemizedlist></para>
521
        </section>
528
        </section>
522
 
529
 
523
        <section>
530
        <section>
-
 
531
      <indexterm><primary>memory management</primary><secondary>hash table</secondary></indexterm>          
524
          <title>Global hash table</title>
532
      <title>Global hash table</title>
525
 
533
 
526
          <para>Implementation of the global hash table was encouraged by the
534
          <para>Implementation of the global hash table was encouraged by the
527
          ia64 architecture support. One of the major differences between
535
          ia64 architecture support. One of the major differences between
528
          global hash table and hierarchical tables is that global hash table
536
          global hash table and hierarchical tables is that global hash table
529
          exists only once in the system and the hierarchical tables are
537
          exists only once in the system and the hierarchical tables are
Line 542... Line 550...
542
          <para>Collision chains ...</para>
550
          <para>Collision chains ...</para>
543
        </section>
551
        </section>
544
      </section>
552
      </section>
545
 
553
 
546
      <section id="tlb">
554
      <section id="tlb">
-
 
555
        <indexterm><primary>memory management</primary><secondary>tlb</secondary></indexterm>
547
        <title>Translation Lookaside buffer</title>
556
        <title>Translation Lookaside buffer</title>
548
 
557
 
549
        <para>Due to the extensive overhead during the page mapping lookup in
558
        <para>Due to the extensive overhead during the page mapping lookup in
550
        the page tables, all architectures has fast assotiative cache memory
559
        the page tables, all architectures has fast assotiative cache memory
551
        built-in CPU. This memory called TLB stores recently used page table
560
        built-in CPU. This memory called TLB stores recently used page table