Sistemas operativos modernos
Subproceso 2 se. En algunos sistemas de subprocesos, un subproceso puede esperar a que otro (específico) termine; para ello, invocaría a un procedimiento como thread_wait. Este bloquea al subproce so invocador hasta que uno (específico) termine. En este sentido, la creación y terminación de subprocesos es muy parecida a la de procesos, y las opciones son más o menos las mismas. Otra llamada común en materia de subprocesos es thread_yield, que permite a un subpro ceso conceder en forma voluntaria la CPU a otro para que se ejecute. Es importante contar con una llamada así porque no existe una interrupción de reloj que obligue a compartir el tiempo, como en el caso de los procesos. Por ello, es vital que los subprocesos sean corteses y cedan de manera voluntaria la CPU cada cierto tiempo, para que otros tengan oportunidad de ejecu tarse. Otras llamadas permiten a un subproceso esperar que otro termine cierto trabajo, o que un subproceso anuncie que ha terminado cierto trabajo, etcétera. Aunque los subprocesos a menudo son útiles, introducen varias complicaciones en el mo delo de programación. Por principio de cuentas, consideremos los efectos de la llamada al sis tema fork de UNIX. Si el proceso padre fiene múltiples subprocesos, ¿el hijo también deberá tenerlos? De lo contrario, es posible que el proceso no funcione en forma correcta, pues quizá todos ellos sean indispensables. Por otra parte, si el proceso hijo obtiene tantos subprocesos como el padre, ¿qué sucede rá si un subproceso del padre estaba bloqueado por una llamada read, digamos, del teclado? ¿Ahora hay dos subprocesos bloqueados esperando el teclado, uno del padre y otro del hijo? Al teclearse una línea, ¿ambos subprocesos reciben una copia de lo tecleado? ¿Sólo el padre la recibe, o sólo el hijo? Este mismo problema se presenta en las conexiones de red abiertas. Otra clase de problemas tiene que ver con el hecho de que los subprocesos comparten mu chas estructuras de datos. ¿Qué sucede si un subproceso cierra un archivo mientras otro toda vía lo está leyendo? Supongamos que un subproceso se da cuenta de que no hay suficiente memoria y comienza a asignar más. Antes de que termine de hacerlo, ocurre una conmutación de subproceso, y el nuevo se da cuenta de lo mismo y también comienza a asignar más memo-
RkJQdWJsaXNoZXIy MjI4NDcx