Subversion Repositories HelenOS-doc

Rev

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

Rev 38 Rev 39
Line 22... Line 22...
22
 
22
 
23
          <listitem>
23
          <listitem>
24
             Allowing, in general, to load and execute two programs that are linked on the same address without complicated relocations.
24
             Allowing, in general, to load and execute two programs that are linked on the same address without complicated relocations.
25
          </listitem>
25
          </listitem>
26
        </itemizedlist></para>
26
        </itemizedlist></para>
27
   
-
 
28
   
27
 
29
<para><!--
28
      <para><!--
30
 
29
 
31
                TLB shootdown ASID/ASID:PAGE/ALL.
30
                TLB shootdown ASID/ASID:PAGE/ALL.
32
                TLB shootdown requests can come in asynchroniously
31
                TLB shootdown requests can come in asynchroniously
33
                so there is a cache of TLB shootdown requests. Upon cache overflow TLB shootdown ALL is executed
32
                so there is a cache of TLB shootdown requests. Upon cache overflow TLB shootdown ALL is executed
34
 
33
 
Line 41... Line 40...
41
 
40
 
42
--></para>
41
--></para>
43
    </section>
42
    </section>
44
 
43
 
45
    <section>
44
    <section>
46
       
-
 
47
 
-
 
48
      <title>Paging</title>
45
      <title>Paging</title>
49
 
46
 
50
      <para>Virtual memory is usually using paged memory model, where virtual
47
      <para>Virtual memory is usually using paged memory model, where virtual
51
      memory address space is divided into the <emphasis>pages</emphasis>
48
      memory address space is divided into the <emphasis>pages</emphasis>
52
      (usually having size 4096 bytes) and physical memory is divided into the
49
      (usually having size 4096 bytes) and physical memory is divided into the
53
      frames (same sized as a page, of course). Each page may be mapped to some
50
      frames (same sized as a page, of course). Each page may be mapped to
54
      frame and then, upon memory access to the virtual address, CPU performs
51
      some frame and then, upon memory access to the virtual address, CPU
55
      <emphasis>address translation</emphasis> during the instruction
52
      performs <emphasis>address translation</emphasis> during the instruction
56
      execution. Non-existing mapping generates page fault exception, calling
53
      execution. Non-existing mapping generates page fault exception, calling
57
      kernel exception handler, thus allowing kernel to manipulate rules of
54
      kernel exception handler, thus allowing kernel to manipulate rules of
58
      memory access. Information for pages mapping is stored by kernel in the
55
      memory access. Information for pages mapping is stored by kernel in the
59
      <link linkend="page_tables">page tables</link></para>
56
      <link linkend="page_tables">page tables</link></para>
60
 
57
 
61
       
-
 
62
 
-
 
63
      <para>The majority of the architectures use multi-level page tables,
58
      <para>The majority of the architectures use multi-level page tables,
64
      which means need to access physical memory several times before getting
59
      which means need to access physical memory several times before getting
65
      physical address. This fact would make serios performance overhead in
60
      physical address. This fact would make serios performance overhead in
66
      virtual memory management. To avoid this <link linkend="tlb">Traslation
61
      virtual memory management. To avoid this <link linkend="tlb">Traslation
67
      Lookaside Buffer (TLB)</link> is used.</para>
62
      Lookaside Buffer (TLB)</link> is used.</para>
68
 
63
 
69
       
-
 
70
 
-
 
71
      <para>At the moment HelenOS does not support swapping.</para>
64
      <para>At the moment HelenOS does not support swapping.</para>
72
 
65
 
-
 
66
      <para>- pouzivame vypadky stranky k alokaci ramcu on-demand v ramci
73
      <para>- pouzivame vypadky stranky k alokaci ramcu on-demand v ramci as_area - na architekturach, ktere to podporuji, podporujeme non-exec stranky </para>
67
      as_area - na architekturach, ktere to podporuji, podporujeme non-exec
-
 
68
      stranky</para>
74
    </section>
69
    </section>
75
 
70
 
76
    <section>
71
    <section>
77
      <title>Address spaces</title>
72
      <title>Address spaces</title>
78
 
73
 
79
      <section>
74
      <section>
80
        <title>Address spaces and areas</title>
75
        <title>Address spaces and areas</title>
81
 
76
 
82
        <para>
-
 
83
 
-
 
84
    - adresovy prostor se sklada z tzv. address space areas
77
        <para>- adresovy prostor se sklada z tzv. address space areas
85
        usporadanych v B+stromu; tyto areas popisuji vyuzivane casti
78
        usporadanych v B+stromu; tyto areas popisuji vyuzivane casti
86
        adresoveho prostoru patrici do user address space. Kazda cast je dana
79
        adresoveho prostoru patrici do user address space. Kazda cast je dana
87
        svoji bazovou adresou, velikosti a flagy (rwx/dd).
80
        svoji bazovou adresou, velikosti a flagy (rwx/dd).</para>
88
 
-
 
89
    </para>
-
 
90
 
81
 
91
        <para>- uzivatelske thready maji moznost manipulovat se svym adresovym
82
        <para>- uzivatelske thready maji moznost manipulovat se svym adresovym
92
        prostorem (vytvaret/resizovat/sdilet) as_areas pomoci syscallu</para>
83
        prostorem (vytvaret/resizovat/sdilet) as_areas pomoci syscallu</para>
93
      </section>
84
      </section>
94
 
85
 
Line 114... Line 105...
114
        <para>- vztah task ~ adresovy prostor: teoreticky existuje moznost, ze
105
        <para>- vztah task ~ adresovy prostor: teoreticky existuje moznost, ze
115
        je adresovy prostor sdilen vice tasky, avsak tuto moznost nepouzivame
106
        je adresovy prostor sdilen vice tasky, avsak tuto moznost nepouzivame
116
        a neni ani nijak osetrena. Tim padem plati, ze kazdy task ma vlastni
107
        a neni ani nijak osetrena. Tim padem plati, ze kazdy task ma vlastni
117
        adresovy prostor</para>
108
        adresovy prostor</para>
118
      </section>
109
      </section>
119
     
-
 
120
     
-
 
121
     
-
 
122
    </section>
110
    </section>
123
 
111
 
124
    <section>
112
    <section>
125
      <title>Virtual address translation</title>
113
      <title>Virtual address translation</title>
126
 
114
 
Line 219... Line 207...
219
    </section>
207
    </section>
220
 
208
 
221
    <section id="frame_allocator">
209
    <section id="frame_allocator">
222
      <title>Frame allocator</title>
210
      <title>Frame allocator</title>
223
 
211
 
-
 
212
      <para><mediaobject id="frame_alloc">
-
 
213
          <imageobject role="html">
-
 
214
            <imagedata fileref="images/frame_alloc.png" format="PNG" />
-
 
215
          </imageobject>
-
 
216
 
-
 
217
          <imageobject role="fop">
-
 
218
            <imagedata fileref="images.vector/frame_alloc.svg" format="SVG" />
-
 
219
          </imageobject>
-
 
220
        </mediaobject></para>
-
 
221
 
224
      <formalpara>
222
      <formalpara>
225
        <title>Overview</title>
223
        <title>Overview</title>
226
 
224
 
227
        <para>Frame allocator provides physical memory allocation for the
225
        <para>Frame allocator provides physical memory allocation for the
228
        kernel. Because of zonal organization of physical memory, frame
226
        kernel. Because of zonal organization of physical memory, frame
Line 260... Line 258...
260
      <title>Buddy allocator</title>
258
      <title>Buddy allocator</title>
261
 
259
 
262
      <section>
260
      <section>
263
        <title>Overview</title>
261
        <title>Overview</title>
264
 
262
 
-
 
263
        <para><mediaobject id="buddy_alloc">
-
 
264
            <imageobject role="html">
-
 
265
              <imagedata fileref="images/buddy_alloc.png" format="PNG" />
-
 
266
            </imageobject>
-
 
267
 
-
 
268
            <imageobject role="fop">
-
 
269
              <imagedata fileref="images.vector/buddy_alloc.svg" format="SVG" />
-
 
270
            </imageobject>
-
 
271
          </mediaobject></para>
-
 
272
 
265
        <para>In buddy allocator, memory is broken down into power-of-two
273
        <para>In buddy allocator, memory is broken down into power-of-two
266
        sized naturally aligned blocks. These blocks are organized in an array
274
        sized naturally aligned blocks. These blocks are organized in an array
267
        of lists in which list with index i contains all unallocated blocks of
275
        of lists in which list with index i contains all unallocated blocks of
268
        the size <mathphrase>2<superscript>i</superscript></mathphrase>. The
276
        the size <mathphrase>2<superscript>i</superscript></mathphrase>. The
269
        index i is called the order of block. Should there be two adjacent
277
        index i is called the order of block. Should there be two adjacent
Line 299... Line 307...
299
        lack of this knowledge, the buddy allocator exports an interface that
307
        lack of this knowledge, the buddy allocator exports an interface that
300
        each of its clients is required to implement. When supplied an
308
        each of its clients is required to implement. When supplied an
301
        implementation of this interface, the buddy allocator can use
309
        implementation of this interface, the buddy allocator can use
302
        specialized external functions to find buddy for a block, split and
310
        specialized external functions to find buddy for a block, split and
303
        coalesce blocks, manipulate block order and mark blocks busy or
311
        coalesce blocks, manipulate block order and mark blocks busy or
304
        available. For precize documentation of this interface, refer to <link
312
        available. For precize documentation of this interface, refer to
305
        linkend="???">HelenOS Generic Kernel Reference Manual</link>.</para>
313
        <emphasis>"HelenOS Generic Kernel Reference Manual"</emphasis>.</para>
306
 
314
 
307
        <formalpara>
315
        <formalpara>
308
          <title>Data organization</title>
316
          <title>Data organization</title>
309
 
317
 
310
          <para>Each entity allocable by the buddy allocator is required to
318
          <para>Each entity allocable by the buddy allocator is required to
Line 392... Line 400...
392
      </section>
400
      </section>
393
 
401
 
394
      <section>
402
      <section>
395
        <title>Implementation</title>
403
        <title>Implementation</title>
396
 
404
 
-
 
405
        <para><mediaobject id="slab_alloc">
-
 
406
            <imageobject role="html">
-
 
407
              <imagedata fileref="images/slab_alloc.png" format="PNG" />
-
 
408
            </imageobject>
-
 
409
 
-
 
410
            <imageobject role="fop">
-
 
411
              <imagedata fileref="images.vector/slab_alloc.svg" format="SVG" />
-
 
412
            </imageobject>
-
 
413
          </mediaobject></para>
-
 
414
 
397
        <para>The SLAB allocator is closely modelled after <ulink
415
        <para>The SLAB allocator is closely modelled after <ulink
398
        url="http://www.usenix.org/events/usenix01/full_papers/bonwick/bonwick_html/">
416
        url="http://www.usenix.org/events/usenix01/full_papers/bonwick/bonwick_html/">
399
        OpenSolaris SLAB allocator by Jeff Bonwick and Jonathan Adams </ulink>
417
        OpenSolaris SLAB allocator by Jeff Bonwick and Jonathan Adams </ulink>
400
        with the following exceptions: <itemizedlist>
418
        with the following exceptions: <itemizedlist>
401
            <listitem>
419
            <listitem>