Sistemas operativos modernos

Proceso Subproceso Proceso Subproceso de ejecución subprocesos de procesos Figura 2-13. a) Sistema de subprocesos en el nivel de usuario, b) Sistema de sub­ procesos administrado por el kernel. do que un salto al kernel, y es un argumento de peso en favor de manejar los subprocesos en el nivel de usuario. No obstante, hay una diferencia clave respecto a los procesos. Cuando un subproceso ter­ mina de ejecutarse, por ejemplo, cuando invoca a íhread_yield, el código de thread_yield pue­ de guardar la información del subproceso en la tabla de subprocesos. Además, puede invocar al calendarizador para que escoja a otro subproceso para que se ejecute. Tanto el procedimien­ to que guarda el estado del subproceso como el calendarizador son procedimientos locales, así que invocarlos es mucho más eficiente que llamar al kernel. Además, no se necesita una inte­ rrupción de sistema, no es preciso conmutar el contexto, no hay que guardar en disco el caché de memoria, etc. Esto agiliza mucho la calendarización de subprocesos. Los subprocesos en el nivel de usuario tienen otras ventajas, como permitir que cada pro­ ceso tenga su propio algoritmo de calendarización personalizado. En algunas aplicaciones, co­ mo las que tienen un subproceso recolector de basura, es una ventaja no tener que preocuparse porque un subproceso vaya a detenerse en un momento poco conveniente. Además, es más fá­ cil aumentar su escala, pues los subprocesos de kernel siempre requieren espacio de tabla y de pila en el kernel, y esto puede ser problemático si hay un gran número de ellos. A pesar de su buen desempeño, los sistemas de subprocesos en el nivel de usuario tienen pro­ blemas importantes. El principal es la forma en la que se implementan las llamadas bloqueadoras al sistema. Supongamos que un subproceso lee del teclado antes de que se oprima alguna tecla. No es posible permitir al subproceso que emita en realidad la llamada al sistema, pues eso deten­ dría a todos los subprocesos. Uno de los principales objetivos de tener subprocesos es precisamen­ te que todos puedan usar llamadas bloqueadoras, pero sin que un subproceso bloqueado afecte a los demás. Con llamadas bloqueadoras al sistema es difícil ver cómo se puede alcanzar esa meta. Podrían modificarse las llamadas al sistema de modo que no sean bloqueadoras (por ejem­ plo, un read para el teclado tan sólo devolvería Obytes si no hay caracteres en el búfer del te-

RkJQdWJsaXNoZXIy MjI4NDcx