The array of pointers should removed from paging structures (like IA32_PageDirectory_4KB, PAE_PageDirectory_4KB etc) because occupies more memory and it's possible to implement paging without that array of pointers, having a standard memory area where to build dynamically the paging structure.
For example in ia32 paging:
from 0x003FF000 (3MB and 1020KB) to 0x00400000 (4MB) could be stored IA32_PageDirectory_4KB (for now this structure has 8KB, but if will be removed the array of pointers then that structure will have 4KB).
from 0x00400000 (4MB) to 0x00800000 (8MB) could be stored all IA32_PageTable_4KB (this structure has 4KB and page directory may have maximum 1024 entries which means that occupies 4MB).
Another option would be to begin from 4KB and to be used the next 4MB and 4KB. So:
from 4kb to 8kb to be stored page directory
from 8kb to 4mb and 8kb to be stored the page tables.
This area of virtual memory will be reserved and will be allocated by the kernel when needed more page tables.
The array of pointers should removed from paging structures (like IA32_PageDirectory_4KB, PAE_PageDirectory_4KB etc) because occupies more memory and it's possible to implement paging without that array of pointers, having a standard memory area where to build dynamically the paging structure. For example in ia32 paging:
Another option would be to begin from 4KB and to be used the next 4MB and 4KB. So:
This area of virtual memory will be reserved and will be allocated by the kernel when needed more page tables.