Saltar al contenido

¿Cómo se ejecuta un programa en la memoria y la forma en que el sistema operativo maneja la memoria?

Solución:

1) ¿A qué pila se refiere esta imagen?

La pila es para asignar variables locales y marcos de llamada de función (que incluyen cosas como parámetros de función, dónde regresar después de que la función haya llamado, etc.).

2) ¿Qué es el segmento de mapeo de memoria que se refiere a mapeos de archivos?

El segmento de mapeo de memoria contiene bibliotecas vinculadas. También es donde mmap se asignan las llamadas. En general, un archivo mapeado en memoria es simplemente una región de memoria respaldada por un archivo.

3) ¿Qué tiene que ver el montón con un proceso? ¿El montón solo se maneja en un proceso o es el montón algo mantenido por el kernel del sistema operativo y luego malloc (usando el montón) asigna el espacio de memoria cada vez que una aplicación de espacio de usuario invoca esto?

El montón es específico del proceso y es administrado por el proceso en sí, sin embargo, debe solicitar memoria del sistema operativo para comenzar (y según sea necesario). Estás en lo correcto, esto es típicamente donde malloc se asignan las llamadas. Sin embargo, la mayora malloc las implementaciones hacen uso de mmap para solicitar fragmentos de memoria, por lo que en realidad hay menos distinción entre el montón y el segmento de mapeo de memoria. Realmente, el montón podría ser considerado parte del segmento mapeado en memoria.

4) ¿Significa esto que a la vez solo se ejecuta un programa en la memoria que ocupa 4 GB completos de RAM?

No, eso significa la cantidad de direccionable La memoria disponible para el programa está limitada a 4 GB de RAM, lo que realmente está contenido en la memoria en un momento dado depende de cómo el sistema operativo asignó la memoria física y está más allá del alcance de esta pregunta.

5) ¿Se refiere a aleatorizar la pila dentro de un proceso o se refiere a algo que queda después de contar el espacio de todos los procesos?

Nunca he visto nada que sugiera que 4 GB de espacio “obstaculizan” la eficacia de las estrategias de asignación de memoria utilizadas por el sistema operativo. Además, como señala @Jason, las ubicaciones de la pila, el segmento mapeado en memoria y el montón son aleatorias “para evitar vulnerabilidades de seguridad predecibles, o al menos hacerlas mucho más difíciles que si cada proceso que administraba el sistema operativo tuviera cada parte del ejecutable en exactamente la misma ubicación de memoria virtual “. Para ser específico, el sistema operativo está aleatorizando direcciones virtuales para la pila, la región mapeada en memoria y el montón. En esa nota, todo lo que ve el proceso es una dirección virtual, que luego se asigna a una dirección física en la memoria, dependiendo de dónde se encuentre la página específica. Puede encontrar más información sobre el mapeo entre direcciones virtuales y físicas aquí.

Este artículo de wikipedia sobre paginación es un buen punto de partida para aprender cómo el sistema operativo administra la memoria entre procesos, y es un buen recurso para leer para responder las preguntas 4 y 5. En resumen, la memoria se asigna en páginas a los procesos, y estas páginas existen en la memoria principal o se han “paginado” en el disco. Cuando un proceso solicita una dirección de memoria, moverá la página del disco a la memoria principal, reemplazando otra página si es necesario. Hay varias estrategias de reemplazo de página que se utilizan y lo remito al artículo para obtener más información sobre las ventajas y desventajas de cada una.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *