I have two questions about virtual address layout of kernel on x86 and x64 system.
As far as I know, x86 uses the splited memory layout that is highmem and lowmem.
If my understanding is correct, the only difference between highmem and lowmem is whether it has 1:1 virtual to physical address mapping or not.
Also, it seems that lowmem contains code and data frequently accessed by the kernel program and highmem contains the page tables or userlevel program data which is not frequently accessed.
However, I cannot understand the reason the x86 kernel splits the virtual address spaces and locates the frequently accessed data and code to lowmem. What is the advantage of it? It seems that regardless of the location of the kernel memory, page table walking should be invoked to get virtual to physical mappings. If it is correct, it seems that there is no advantage of the highmem and lowmem.
Here, my first question is, if lowmem uses the 1:1 mappings (i.e., physical address + constant(0x80000000) => kernel virtual address) why the MMU spends its clock to walk the page table to know the virtual to physical mappings. If possible, we can modify the MMU logic to make it only minus magic constant from the virtual address to get a physical address if it is located in lowmem region. or is there any other reasons to locate frequently accessed data and code into the lowmem? And why only the lowmem uses the 1:1 mappings...?
My second question is "does lowmem and highmem memory split mechanism deployed in the x64 linux system also?"
Thanks in advance