Sistemas operativos modernos
En cambio, si los segmentos de datos de los procesos pueden crecer, por ejemplo, median te asignación dinámica de memoria de un heap, como en muchos lenguajes de programación, se presentará un problema cada vez que un proceso trate de crecer. Si hay un hueco adyacente al proceso, se le podrá asignar y el proceso podrá crecer en dicho hueco. Por otra parte, si el proceso está adyacente a otro, el proceso que crece tendrá que pasarse a un hueco de la memo ria lo bastante grande como para contenerio, o bien habrá que intercambiar a disco uno o más procesos para crear un hueco del tamaño necesario. Si un proceso no puede crecer en la me moria y el área de intercambio en el disco está llena, tendrá que esperar o ser eliminado. Si es probable que la mayoría de los procesos vaya a crecer durante su ejecución, lo más conveniente sería asignar un poco de memoria adicional cada vez que se intercambie un pro ceso a la memoria o se cambie de lugar, a fin de reducir el gasto extra asociado con el cambio de lugar o el intercambio de procesos que ya no caben en la memoria que se les asignó. Sin embargo, al intercambiar procesos a disco sólo deberá transferirse la memoria que en realidad se esté usando; sería un desperdicio intercambiar también la memoria sobrante. En la figura 4-6a se ilustra una configuración de memoria en la que se ha asignado espacio para que dos procesos puedan crecer. Sistema operativo Espacio para crecer Realmente en uso Espacio para crecer Realmente en uso (a) Pila de B - y — - _______L _ _ _ Datos de B Programa de B 7, Pila de A r Datos de A Programa de A Sistema operativo (b) Espacio para crecer Espacio para crecer Figura 4-6. a) Asignación de espacio para un segmento de datos que crece, b) Asig nación de espacio para una pila que crece y un segmento de datos que crece. Si los procesos pueden tener dos segmentos capaces de crecer —por ejemplo, el segmento de datos que se usa como heap para variables que se asignan y liberan en forma dinámica, y un segmento de pila para las variables locales normales y las direcciones de retomo—, podría pensarse en una organización alterna, como la de la figura 4-6b. En esta figura vemos que ca da proceso ilustrado tiene en la parte más alta de la memoria que se le asignó una pila que cre ce hacia abajo, e inmediatamente arriba del texto del programa fiene un segmento de datos que
RkJQdWJsaXNoZXIy MjI4NDcx