Sistemas operativos modernos

Otra parte, un subproceso de kemel con errores podría causar más daños que uno de usuario que también tuviera errores. Por ejemplo, si se ejecuta durante demasiado tiempo y no hay for­ ma de quitarlo, podrían perderse datos entrantes. 2.2.8 Cómo convertir en código con múltiples subprocesos el de un solo subproceso Muchos programas existentes se escribieron para procesos de un solo subproceso. Agregarles la característica de múltiples subprocesos es más difícil de lo que podría parecer. A continua­ ción examinaremos algunas de las dificultades. Por principio de cuentas, el código de un subproceso generalmente consta de varios proce­ dimientos, al igual que un proceso. Los procedimientos podrían tener variables locales, variables globales y parámetros. Las variables locales y los parámetros no causan problemas, pero sí las variables que son globales respecto a un subproceso, aunque no respecto a todo el programa. Es­ tas variables son globales en el sentido de que muchos procedimientos dentro del subproceso las usan (como podrían usar cualquier variable global), pero otros subprocesos no deben tocarlas. Por ejemplo, consideremos la variable ermo que mantiene UNIX. Cuando un proceso (o subproceso) emite una llamada al sistema y ésta falla, el código de error se coloca en ermo. En la figura 2-16, el subproceso 1 ejecuta la llamada access para averiguar si tiene permiso de acceso a un archivo dado. El sistema operativo devuelve la respuesta en la variable global errno. Cuando el subproceso 1 recupera el control, pero antes de que pueda leer a ermo, el ca- lendarizador decide que ya tuvo suficiente fiempo la CPU, y se la asigna al subproceso 2. Es­ te ejecuta una llamada open que falla, lo cual causa que se escriba otro valor en ermo y que el código de acceso del subproceso 1 se pierda sin remedio. Más adelante, cuando el subpro­ ceso 1 reinicie, leerá un valor incorrecto y su comportamiento no será el debido. Este problema puede resolverse de varias maneras. Una sería prohibir la existencia de va­ riables globales. Por más bueno que sea este método, chocaría con una buena cantidad del soft- Subprocesos 1 Subprocesos 2 ,® Access (se establece errno) Open (se sobrescribe errno) Se examina errno Figura 2-16. Conflictos entre subprocesos por el uso de una variable global.

RkJQdWJsaXNoZXIy MjI4NDcx