Some advantages / reasons for this design:
- Applications do not need to care about the size and location of the kernel, and they can pretend that they are the only ones in memory, starting from 0 and spanning upwards, with minimal or no redistributions of code and data. Thus, applications are easier to develop and implement, and they are less likely to have errors associated with managing the mememory.
- Applications can use smaller / shorter addresses / pointers and therefore save some memory.
- On an x86 processor, 16-bit and 32-bit address spaces start at virtual address 0 and end at about 1 MB (for real and virtual 8086 modes), 16 MB (16-bit protected mode on i80286 +) and 4 GB (32 -bit mode, unreal mode). Placing the kernel at lower addresses will reduce the range of addresses available for applications (for example, a 16-bit application in 32-bit mode or a 32-bit application in 64-bit mode) and / or complicate their memory management. Moving the kernel to the top of the virtual address space usually makes sense on x86.
There may be other reasons usually associated with the platform. On some platforms, there may be little difference between the two options. However, on others, the preferred kernel location may be at lower virtual addresses. Details matter.
source share