Diferencia entre revisiones de «Introducción»
m |
m |
||
Línea 4: | Línea 4: | ||
* '''Código''': Se trata de la sección de memoria que contiene el código de nuestro proceso, entendido como la sección de instrucciones que componen nuestro programa. | * '''Código''': Se trata de la sección de memoria que contiene el código de nuestro proceso, entendido como la sección de instrucciones que componen nuestro programa. | ||
− | * '''Variables globales y constantes''': Esta sección incluye las constantes definidas en el código del programa. Además, incluyen también las | + | * '''Variables globales y constantes''': Esta sección incluye las constantes definidas en el código del programa. Además, incluyen también las variables globales, que se trata de aquellas que son accesibles desde cualquier función. |
* '''Pila (''Stack'')''': Se trata de la sección de memoria que se emplea para reservar espacio a las variables locales, y en la invocación de funciones (en las que se carga la dirección de retorno con respecto al código, la dirección de memoria en la que se encuentra definida la función y los parámetros de dicha función). | * '''Pila (''Stack'')''': Se trata de la sección de memoria que se emplea para reservar espacio a las variables locales, y en la invocación de funciones (en las que se carga la dirección de retorno con respecto al código, la dirección de memoria en la que se encuentra definida la función y los parámetros de dicha función). | ||
* '''Montón (''Heap'')''': Es la sección de memoria que se reserva de manera dinámica mediante las llamadas malloc() y free(). | * '''Montón (''Heap'')''': Es la sección de memoria que se reserva de manera dinámica mediante las llamadas malloc() y free(). |
Revisión del 18:03 14 dic 2017
El administrador de memoria es la parte del sistema operativo que se encarga de gestionar la memoria principal existente en el sistema. Para ello, asigna zonas de memoria principal a cada uno de los procesos existentes en base a sus necesidades.
Todo proceso, desde el punto de vista de la memoria, está compuesto de cuatro secciones:
- Código: Se trata de la sección de memoria que contiene el código de nuestro proceso, entendido como la sección de instrucciones que componen nuestro programa.
- Variables globales y constantes: Esta sección incluye las constantes definidas en el código del programa. Además, incluyen también las variables globales, que se trata de aquellas que son accesibles desde cualquier función.
- Pila (Stack): Se trata de la sección de memoria que se emplea para reservar espacio a las variables locales, y en la invocación de funciones (en las que se carga la dirección de retorno con respecto al código, la dirección de memoria en la que se encuentra definida la función y los parámetros de dicha función).
- Montón (Heap): Es la sección de memoria que se reserva de manera dinámica mediante las llamadas malloc() y free().
Cuando se lanza un programa desde el lanzador de aplicaciones se hace uso de las llamadas al sistema fork y exec. La llamada fork crea un proceso clon del lanzador de aplicaciones, mientras que la llamada al sistema exec reemplaza el código del proceso clon recién creado por el de un programa que se encuentra almacenado en un fichero. El administrador de memoria actúa ante estas llamadas al sistema reservando memoria para el nuevo proceso que se acaba de lanzar.
En este tema, por razones de simplicidad, vamos a considerar que la administración de memoria se realiza de manera que todo el espacio de memoria ocupa una zona de memoria contigua. Es decir, no vamos a poder dividir las diferentes secciones de manera que se repartan en diferentes zonas de memoria que cuyo espacio de direccionamiento no sea consecutivo. No obstante, los sistemas operativos modernos no emplean las estrategias de asignación que vamos a ver a continuación: