Improve comments and fix formatting in (sparc64) TLS implementation.
[helenos.git] / kernel / doc / mm
blob41e61c9ee1bbc7df03f765d42fad8a6a2415ae3e
1 Memory management
2 =================
4 1. Virtual Address Translation
6 1.1 Hierarchical 4-level per address space page tables
8 SPARTAN kernel deploys generic interface for 4-level page tables
9 for these architectures: amd64, ia32, mips32 and ppc32. In this
10 setting, page tables are hierarchical and are not shared by
11 address spaces (i.e. one set of page tables per address space).
14  VADDR
15  +-----------------------------------------------------------------------------+
16  |   PTL0_INDEX  |   PTL1_INDEX   |   PTL2_INDEX   |   PTL3_INDEX   |   OFFSET |
17  +-----------------------------------------------------------------------------+
20  PTL0                   PTL1                   PTL2                   PTL3
21  +--------+             +--------+             +--------+             +--------+
22  |        |             |        |             |  PTL3  | -----\      |        |
23  |        |             |        |             +--------+      |      |        |
24  |        |             +--------+             |        |      |      |        |
25  |        |             |  PTL2  | -----\      |        |      |      |        |
26  |        |             +--------+      |      |        |      |      |        |
27  |        |             |        |      |      |        |      |      +--------+
28  +--------+             |        |      |      |        |      |      | FRAME  |
29  |  PTL1  | -----\      |        |      |      |        |      |      +--------+
30  +--------+      |      |        |      |      |        |      |      |        |
31  |        |      |      |        |      |      |        |      |      |        |
32  |        |      |      |        |      |      |        |      |      |        |
33  +--------+      \----> +--------+      \----> +--------+      \----> +--------+
34      ^
35      |
36      |
37  +--------+
38  |  PTL0  |
39  +--------+
42 PTL0            Page Table Level 0 (Page Directory)
43 PTL1            Page Table Level 1
44 PTL2            Page Table Level 2
45 PTL3            Page Table Level 3
47 PTL0_INDEX      Index into PTL0
48 PTL1_INDEX      Index into PTL1
49 PTL2_INDEX      Index into PTL2
50 PTL3_INDEX      Index into PTL3
52 VADDR           Virtual address for which mapping is looked up
53 FRAME           Physical address of memory frame to which VADDR is mapped
56 On architectures whose hardware has fewer levels, PTL2 and, if need be, PTL1 are
57 left out. TLB-only architectures are to define custom format for software page
58 tables.
60 1.2 Single global page hash table
62 Generic page hash table interface is deployed on 64-bit architectures without
63 implied hardware support for hierarchical page tables, i.e. ia64 and sparc64.
64 There is only one global page hash table in the system shared by all address
65 spaces.
68 2. Memory allocators
70 2.1 General allocator
72 'malloc' function accepts flags as a second argument. The flags are directly
73 passed to the underlying frame_alloc function. 
75 1) If the flags parameter contains FRAME_ATOMIC, the allocator will not sleep.
76    The allocator CAN return NULL, when memory is not directly available.
77    The caller MUST check if NULL was not returned
79 2) If the flags parameter does not contain FRAME_ATOMIC, the allocator
80    will never return NULL, but it CAN sleep indefinitely. The caller
81    does not have to check the return value.
83 3) The maximum size that can be allocated using malloc is 256K
85 Rules 1) and 2) apply to slab_alloc as well. Using SLAB allocator
86 to allocate too large values is not recommended.