Sistemas operativos modernos
ware existente. Otra sería asignar a cada subproceso sus propias variables globales privadas, co mo se muestra en la figura 2-17. Así, cada uno tiene su propia copia de ermo y de otras varia bles globales, con lo que se evitan los conflictos. En la prácdca, esta decisión crea un nuevo nivel de alcance —variables visibles para todos los procedimientos de un subproceso— , ade más de los niveles de alcance de variables visibles sólo para un procedimiento y de las varia bles visibles en todos los puntos del programa. Código del subproceso 1 Código del subproceso 2 Pila del subproceso 1 Pila de! subproceso 2 Variables globales del subproceso 1 Variables globales del subproceso 2 Figura 2-17. Los subprocesos pueden tener variables globales privadas. Sin embargo, tener acceso a variables globales privadas tiene sus bemoles, porque la ma yoría de los lenguajes de programación puede expresar variables locales y globales, pero no formas intermedias. Es posible asignar un trozo de memoria para las variables globales y pa sárselo a cada procedimiento del subproceso, como parámetro adicional. Aunque esta solución no es muy refinada, funciona. Como alternativa, podrían introducirse nuevos procedimientos de biblioteca para crear, modificar y leer estas variables globales al nivel de subproceso. La primera llamada podría ser de este tipo: crear_global("apuntbuf'); Esto asignaría espacio para un apuntador llamado apuntbuf en el heap o en un área especial de almacenamiento reservada para el subproceso invocador. Sin importar en dónde se asigne es pacio, sólo el subproceso invocador tendrá acceso a la variable global. Si otro subproceso crea una variable global con el mismo nombre, obtendrá una posición de almacenamiento disünta que no chocará con la que ya existe. Se requieren dos llamadas para tener acceso a variables globales: una para escribirlas y otra para leerlas. Para escribir, servirá algo como establecer_global("apuntbuf', &buf);
RkJQdWJsaXNoZXIy MjI4NDcx