Buenas tardes
Repasando el teórico de paginación y leyendo el libro me surgió la siguiente duda: ¿Cómo obtiene un proceso nuevo su espacio de direcciones virtuales? ¿La dirección virtual de la primera instrucción de un programa es siempre 0 (o algún otro número que dependa exclusivamente del programa y no de lo que le sea asignado por el sistema operativo)?
Indagando en internet no logré encontrar una explicación satisfactoria. Intenté observar el assembly generado por gcc al compilar un programa sencillo en C, y llegué a la conclusión de que el espacio de direcciones virtuales en el que se va a manejar el proceso, depende de los valores con los que vengan cargados los registros instruction pointer y stack pointer cuando el mismo es creado. A su vez, parecería que el espacio de direcciones virtuales no es siempre el mismo para un mismo programa. Imprimiendo la direccion de una variable en la terminal, obtengo resultados distintos con cada ejecución, y las direcciones obtenidas son bastante altas, lo cual supongo que tiene que ver con que el stack crece hacia abajo. Esto me lleva a otra pregunta; ¿Es necesario restar un offset (posiblemente dado por el sistema operativo cuando se crea el proceso ¿?) a una direccion virtual, previo a intentar buscar el frame correspondiente a su página en la page table?
Espero su respuesta, muchas gracias.