Hola:
El problema es que la memoria de un proceso usualmente está organizada en segmentos. Si recuerdan del teórico: está el segmento de código, datos y heap que crecen desde la dirección el comienzo de la memoria (000...000) hacia el final de la memoria (111...111), y el segmento de pila que crece desde el final de la memoria hacia el comienzo (en sentido contrario al anterior).
Eso quiere decir que si vemos una dirección virtual de un datos de memoria de código, datos o heap seguramente comiencen 0s (000..(algo)) y las direcciones virtuales de datos en la pila seguramente comiencen con 1's (111...(algo)). Ahora, los primeros bits de la dirección virtual determinan en que entrada de la tabla de página termina mapeada esa memoria. Eso quiere decir que el código, datos y heap no van a poder compartir tablas de página con la pila porque los primeros van a estar mapeados en las primeras entradas de la tabla de página y el segundo en las últimas. Por eso se precisan entradas diferentes, aunque con una sola entrada nos alcanza para direccionar la memoria el sistema termina utilizando dos entradas, una al pricipio de la tabla y otra al final.
Saludos,
Santiago.