Sistemas operativos modernos
La especificación POSIX no adoptó una postura en cuanto a si los subprocesos debían im- plementarse en el kemel o en el espacio de usuario. La ventaja de tener subprocesos en el es pacio de usuario es que se les puede implementar sin tener que modificar el kemel, y la conmutación de subprocesos es muy eficiente. La desventaja de los subprocesos en el espacio de usuario es que si un subproceso se bloquea (por ejemplo, por E/S, por un semáforo o por un fallo de página), todos los subprocesos del proceso se bloquearán porque el kemel piensa que sólo hay un subproceso y no calendariza el proceso en tanto no se libere el subproceso blo queado. Por tanto, las llamadas definidas en PIOOS.le se escogieron con cuidado de modo que se pudieran implementar de cualquiera de las dos maneras. Mientras los programas de usuario se ajusten en forma escrupulosa a la semántica de P1003.1, ambas implementaciones deberán fun cionar en forma correcta. Las llamadas de subprocesos más usadas se presentan en la figura 10-8. Cuando se usan subprocesos de kemel, éstas son verdaderas llamadas al sistema; cuan do se usan subprocesos de usuario, las llamadas se implementan por completo en una bibliote ca de tiempo de ejecución en el espacio de usuario. (Probablemente ya notó que ahora tenemos un problema tipográfico. Si el kemel administra los subprocesos, las llamadas como “pthread_create” son llamadas al sistema y según nues tra convención deberían aparecer en Helvética, así: pthread_create. En cambio, si tan sólo son llamadas a una biblioteca en espacio de usuario, nuestra convención para todos los nombres de procedimiento es usar Times cursiva, así: pthread_create. Simplemente optaremos por usar Helvética, y lo mismo en el capítulo siguiente en el que nunca queda claro cuáles llamadas de la API Win32 son en verdad llamadas al sistema. Podría ser peor: en el informe de Algol 68 hubo un punto que cambió un poco la gramática del lenguaje porque se imprimió en la fuente equivocada.) Llamada de subprocesos Descripción pthread_create Crea un subproceso nuevo en el espacio de direcciones del invocador pthread_exit Termina el subproceso invocador pthread_]oin Espera a que un subproceso termine pthread_mutex_init Crea un nuevo mutex pthread_mutex_destroy Destruye un mutex pthread_mutex_ lock Cierra el bloqueo de un mutex pthread_mutex_unlock Abre el bloqueo de un mutex pthread_cond_init Crea una variable de condición pthread_cond_destroy Destruye una variable de condición pthread_cond_wait Espera a una variable de condición pthread_cond_signal Libera un subproceso que espera a una variable de condición Figura 10-8. Las principales llamadas de subprocesos de POSIX.
RkJQdWJsaXNoZXIy MjI4NDcx