The correct answer is C. the large memory overhead in maintaining page tables.
Let's break down the math to see why the memory overhead is the critical problem.
1. Deconstruct the Virtual Address
A virtual address is split into two parts: a page number (which acts as an index into the page table) and an offset (which tells us where the data is within that page).
To find the number of bits needed for the offset, we take the log base 2 of the page size:
The remaining bits are used for the page number:
2. Calculate the Number of Page Table Entries
The number of page table entries is determined by the number of possible virtual pages a process can have. This is $2$ raised to the power of the page number bits.
This means that for every single process, the operating system would need to create a page table with over 4 million entries.
3. Calculate the Total Page Table Size
Each entry in the page table (Page Table Entry or PTE) needs to store the physical frame number and some control bits. A typical PTE size is 4 bytes.
Conclusion
A single-level page table would require the system to allocate 16 MB of contiguous physical memory for every single process. Even if a program is tiny (like a simple "Hello, World!"), it would still need this massive 16 MB table. This is an enormous and impractical memory overhead, which is why multi-level paging was invented to solve this exact problem.