Diferencia entre revisiones de «Introducción»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
m (Añadido: 8.2 SO multiprogramables con particiones variables)
 
(No se muestran 10 ediciones intermedias de 4 usuarios)
Línea 3: Línea 3:
 
Todo proceso, desde el punto de vista de la memoria, está compuesto de cuatro secciones:
 
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.
+
* '''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 variable globales, que se trata de aquellas que son accesibles desde cualquier función.
+
* '''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() de la biblioteca estándar de C, que invocan a las llamadas al sistema brk() y mmap() cuando corresponde.
  
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.
+
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 una copia exacta del padre (salvo por el PID y la memoria que ocupa). Al proceso hijo se le facilita una copia de las variables del proceso padre y de los descriptores de fichero.
 +
 
 +
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:
 
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:
  
* [[SO monoprogramables|Administración de memoria en sistemas operativos monoprogramables]]
 
* [[SO multiprogramables con particiones fijas|Administración de memoria en sistemas operativos multiprogramables con particiones fijas]]
 
 
* [[SO multiprogramables con particiones variables|Administración de memoria en sistemas operativos multiprogramables con particiones variables]]
 
* [[SO multiprogramables con particiones variables|Administración de memoria en sistemas operativos multiprogramables con particiones variables]]
  
8.2 [[SO_multiprogramables_con_particiones_variables | SO multiprogramables con particiones variables]]
+
Para más información, se puede consultar [https://stackoverflow.com/questions/6988487/what-does-the-brk-system-call-do|este enlace a stack overflow].
 +
 
 +
7.2 [[SO_multiprogramables_con_particiones_variables | SO multiprogramables con particiones variables]]

Revisión actual del 17:38 2 abr 2020

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() de la biblioteca estándar de C, que invocan a las llamadas al sistema brk() y mmap() cuando corresponde.

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 una copia exacta del padre (salvo por el PID y la memoria que ocupa). Al proceso hijo se le facilita una copia de las variables del proceso padre y de los descriptores de fichero.

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:

Para más información, se puede consultar enlace a stack overflow.

7.2 SO multiprogramables con particiones variables