As we know, the address of 3G~4G of a process is mapped as the kernel address. and in order to improve efficiency, use a constant 0xc000000 to get the phisical address, for example, address 0xc1000000's phisical address is 0xc1000000 - 0xc0000000, and in the book of <<Understanding the Linux Kernel, 3rd Edition>>, this address is called as "Fix-Mapped Linear Addresses", but I have a problem, why the this could improve efficency? because the MMU will transform every address to phisical address by the page table which created by the kernel. and as the MMU will look up the page table, should the kernel fill the corressponding entries in page table which is used to map the 3G~4G address to phisical address ? if don't, the MMU will not work correctly. but if do, why use the expresstion 0xc1000000 - PAGE_OFFSET(0xc0000000) to calculate the phisical address ? and what is "Fix-Mapped Linear Addresses"? Why "Fix-Mapped Linear Addresses"?
thank you very much!
and I'm sorry for my poor English