================================================================
BSD
================================================================

FFFFFFFF    -------------------
            kernel
80000000    -------------------

00000000    -------------------

================================================================
Linux
================================================================
- zone memory allocator
  - slow kmap() memory
  - 'normal' memory
  - DMA-able memory
-Buddy allocator built atop the zone memory allocator
  - Each block of size 2^N bytes is the 'buddy' of the
    other half of the encompassing 2^(N+1)-byte block
  - Allows for rapid allocation of single pages and of
    contiguous RAM (e.g. for DMA)

CONFIG_HIGHMEM must be set to use >1G RAM
kmap() is used to (temporarily) map such pages
into the kernel memory space.


FFFFFFFF    -------------------
            fixmap & kmap page tables
F8000000    -------------------
            free extended memory
            -------------------
            kernel
C0100000    ------------------- PAGE_OFFSET + 1M
            conventional memory
C0000000    =================== PAGE_OFFSET == 3G
            user-privilege stack
BFFF0000    -------------------
                ...
            user task
08048000    -------------------
            unmapped ?
00000000    -------------------

User apps (in ELF format) start at 08048000h (just over 128 meg)

================================================================
Win95/98/ME
================================================================

FFFFFFFF    -------------------
            kernel             
C0000000    ===================
            DLLs, memory-mapped files
80000000    -------------------
            Win32 user task
00400000    -------------------
            DOS, Win16
00000000    -------------------

User apps (in PE format) start at 00400000h (4 meg)

================================================================
Windows NT
================================================================

User apps (in PE format) start at 10000h (64K...I think...)


Message-ID: <jm74avgpc0q8rn925iq5qv5kt14mh7tbs4@4ax.com>
        ...
I have forgotten the exact address, but I believe the page tables are at
either linear FFCFF000 or FFDFF000.


normal                                  /3GB boot switch
-----------------------------------     -----------------------------------
C0400000    -------------------         ?0400000    -------------------
            page table self-mapping                 page table self-mapping
C0000000    -------------------         ?0000000    -------------------


A0000000    -------------------         E0000000    -------------------
            free extended memory                    free extended memory
            -------------------                     -------------------
            kernel                                  kernel
80100000    -------------------         C0100000    -------------------
            conventional memory                     conventional memory
80000000    ===================         C0000000    ===================
            task variables?                         task variables?
7FFF0000    -------------------      ?->BFFF0000    -------------------
            user task, DLLs                         user task, DLLs
00001000    -------------------         00001000    -------------------
            guard page                              guard page
00000000    -------------------         00000000    -------------------

"The kernel stack in NT is 12KB (3 pages) for a GUIless thread,
and is grown to 64KB (16 pages) when the thread calls win32k
(USER+GDI) functions first."
-- news:<9qb8mg$1j03$4@gavrilo.mtu.ru>

================================================================
Windows CE
================================================================

User apps (in PE format) start at 00001000h (64K)
