Sistemas operativos modernos
ria. Lo más probable es que se asigne memoria dos veces. Estos problemas pueden resolverse con un poco de esfuerzo, pero es preciso meditar con detenimiento el diseño para que los pro gramas múltiples subprocesos funcionen en forma correcta. 2.2.2 Uso de subprocesos Ahora que hemos descrito los subprocesos, es momento de explicar por qué podrían ser útiles pa ra alguien. El motivo principal para tener subprocesos es que en diversas aplicaciones se estén realizando varias actividades al mismo tiempo, por lo que algunas de ellas podn'an bloquearse de vez en cuando. Al descomponer tal aplicación en múltiples subprocesos secuenciales que se eje cuten casi en paralelo, se simplifica el modelo de programación. Ya conocemos este argumento. Es precisamente el que se da en favor de tener procesos. En lugar de pensar en interrupciones, temporizadores y conmutaciones de contexto, podemos pensar en procesos paralelos. Sólo que ahora con los subprocesos añadimos un elemento nue vo: la posibilidad de que las entidades paralelas compartan un espacio de direcciones y todos sus datos. Esta capacidad es indispensable en ciertas aplicaciones, y es por ello que el esque ma de múltiples procesos (con espacios de direcciones distintos) no es la solución. Un segundo argumento en favor de los subprocesos es que, al no estar enlazados con re cursos, son más fáciles de crear y destruir que los procesos. En muchos sistemas, la creación de un subproceso es 100 veces más rápida que la creación de un proceso. Si el número de sub procesos necesarios cambia en forma dinámica y con rapidez, esta propiedad es útil. Un tercer motivo para tener subprocesos también se relaciona con el desempeño. Los sub procesos no mejoran el desempeño cuando todos usan intensivamente la CPU, pero si se rea liza una cantidad considerable tanto de cómputo como de E/S, los subprocesos permiten traslapar estas actividades y así acelerar la aplicación. Por último, son útiles en sistemas con múltiples CPUs, en los que es posible un verdadero paralelismo. Volveremos a este tema en el capítulo 8. Tal vez la forma más fácil de constatar la utilidad de los subprocesos sea dando ejemplos concretos. Como primer ejemplo, consideremos un procesador de texto. La mayoría de éstos muestra en la pantalla el documento que se está creando con el formato exacto con el que apa recerá en la página impresa. En particular, todos los saltos de línea y de página están en su po sición correcta y definitiva para que el usuario pueda inspeccionarlos y modificar el documento si es necesario (por ejemplo, para eliminar viudas y huérfanas: líneas aisladas al principio y al final de la página, que se consideran poco estéticas). Supongamos que el usuario está escribiendo un libro. Desde el punto de vista del autor, es más fácil tener todo el libro en un solo archivo para facilitar la búsqueda de temas, efectuar sus tituciones globales, etc. Como alternativa, cada capítulo podría ser un archivo aparte. Sin em bargo, tener cada sección y subsección en un archivo distinto podría ser una molestia en caso de que fuera necesario efectuar modificaciones globales a todo el libro, pues habría que editar de manera individual cientos de archivos. Por ejemplo, si el estándar propuesto xxxx se aprue ba justo antes de que se imprima el libro, todas las referencias al “Estándar provisional xxxx” tendrían que cambiarse por el “Estándar xxxx” a última hora. Si todo el libro está en un archi-
RkJQdWJsaXNoZXIy MjI4NDcx