Sistemas operativos modernos

Los subprocesos ofrecen una solución. El proceso podría estructurarse con un subproceso de entrada, uno de procesamiento y uno de salida. El subproceso de entrada lee y coloca datos en un búfer de entrada. E! subproceso de procesamiento saca datos del búfer de entrada, los procesa y coloca los resultados en un búfer de salida. El subproceso de salida escribe estos re­ sultados en el disco. Así, la entrada, el procesamiento y la salida pueden realizarse al mismo tiempo. Claro que este modelo sólo funciona si una llamada al sistema únicamente bloquea el subproceso que la emitió, no todo el proceso. 2.2.3 Implementación de subprocesos en espacio de usuario Hay dos formas principales de implementar subprocesos: en espacio de usuario y en el kemel. La decisión ha dado pie a cierta controversia, y también existe una implementación híbrida. Ahora describiremos estos métodos, junto con sus ventajas y desventajas. El primer método consiste en colocar por completo el sistema de subprocesos en espacio de usuario. El kemel no sabe nada de ellos. En lo que a él respecta, está administrando proce­ sos ordinarios, de un solo subproceso. La primera ventaja, y la más obvia, es que puede imple- mentarse un sistema de subprocesos en el nivel de usuario en un sistema operativo que no maneje subprocesos. Todos los sistemas operativos solían pertenecer a esta categoría, y toda­ vía subsisten algunos. Todas estas implementaciones tienen la misma estructura general, que se ilustra en la figu­ ra 2-13a. Los subprocesos se ejecutan encima de un sistema de tiempo de ejecución, que es una colección de procedimientos que administran subprocesos. Ya vimos cuatro de ellos: thread_ create, thread_exit, thread_wait y thread_yield, pero por lo general hay más. Cuando los subprocesos se administran en espacio de usuario, cada proceso necesita su propia tabla de subprocesos privada para dar seguimiento a sus subprocesos. Esta tabla es análoga a la de procesos del kemel, salvo que sólo guarda las propiedades de subprocesos in­ dividuales, como el contador de programa, apuntador de pila, registros, estado, etcétera, de cada uno. La tabla de subprocesos es administrada por el sistema de tiempo de ejecución. Cuando un subproceso pasa al estado listo o al bloqueado, en la tabla de subprocesos se guar­ da la información necesaria para reiniciarlo, exactamente de la misma forma en la que el ker­ nel guarda información acerca de los procesos en la tabla de procesos. Cuando un subproceso hace algo que podría hacer que se bloquee localmente, como espe­ rar que otro subproceso del proceso termine cierto trabajo, invoca un procedimiento del siste­ ma de tiempo de ejecución. Este procedimiento verifica si el subproceso debe colocarse en estado bloqueado. Si es así, en la tabla de subprocesos se guardan los registros del subproce­ so, se busca un subproceso que esté listo para ejecutarse y se cargan en los registros de la má­ quina los valores guardados de ese nuevo subproceso. Tan pronto como se ha conmutado el apuntador de pila y el contador de programa, el nuevo subproceso se activa en forma automá­ tica. Si la máquina cuenta con una instrucción para almacenar todos los registros y otra para recuperarlos, toda la conmutación de subprocesos puede efectuarse con unas cuantas instruc­ ciones. Este tipo de conmutación de subprocesos es al menos un orden de magnitud más rápi-

RkJQdWJsaXNoZXIy MjI4NDcx