Sistemas operativos modernos
Si es posible, lo mejor es eliminar un proceso que pueda volver a ejecutarse desde el prin cipio sin efectos perjudiciales. Por ejemplo, una compilación siempre puede volver a ejecutar se porque lo único que hace es leer un archivo fuente y producir un archivo objeto. Si se le elimina cuando va a la mitad, la primera ejecución no afectará a la segunda. En cambio, un proceso que actualiza una base de datos no siempre puede ejecutarse una segunda vez sin peligro. Si el proceso suma 1 a algún registro de la base de datos durante su primera ejecución, la cual no terminó porque fue eliminado, y se le ejecuta una segunda vez, se habrá sumado 2 al registro, lo cual es incorrecto. 3.5 COMO EVITAR LOS BLOQUEOS IRREVERSIBLES Cuando hablamos de detección de bloqueos irreversibles, dimos por hecho en forma tácita que cuan do un proceso pide recursos, los pide todos a la vez (la matriz R de la figura 3-6). Sin embar go, en la mayoría de los sistemas, los recursos se solicitan uno por uno. El sistema debe tener la capacidad de distinguir si puede otorgar sin peligro un recurso o no, y sólo efectuar la asig nación si no hay peligro. Entonces surge la pregunta: ¿Hay algún algoritmo que siempre pue da evitar los bloqueos irreversibles tomando la decisión correcta todo el tiempo? La respuesta es un sí condicionado: podemos evitar los bloqueos irreversibles, pero sólo si contamos con anfi- cipación con cierta información. En esta sección examinaremos formas de evitar bloqueos irre versibles mediante una cuidadosa asignación de los recursos. 3.5.1 Trayectorias de recursos Los principales algoritmos para evitar bloqueos irreversibles se basan en el concepto de esta dos seguros. Antes de describir los algoritmos, haremos una pequeña digresión para examinar el concepto de seguridad (ausencia de peligro) desde una perspectiva gráfica fácil de entender. Aunque este enfoque gráfico no se traduce en forma directa a un algoritmo práctico, nos da una buena idea intuitiva de la naturaleza del problema. En la figura 3-8 vemos un modelo para manejar dos procesos y dos recursos, por ejemplo, una impresora y un graficador. El eje horizontal representa el número de instrucciones que el proceso A ejecuta, y el vertical representa el número de instrucciones que el proceso B ejecu ta. En /,, A solicita una impresora; en I 2 , necesita un graficador. La impresora y el graficador se liberan en e I^, respectivamente. El proceso B necesita el graficador desde hasta Ij, y la impresora desde 4 hasta /g. Cada punto del diagrama representa un estado conjunto de los dos procesos. En un princi pio, el estado está en p, y ninguno de los procesos ha ejecutado todavía instrucciones. Si el ca lendarizador opta por ejecutar primero A, llegaremos al punto q, donde A ha ejecutado cierto número de instrucciones y fi no ha ejecutado ninguna. En el punto q, la trayectoria se vuelve vertical, lo que indica que el calendarizador ha decidido ejecutar B. Si sólo hay un procesador, todos los trayectos deben ser horizontales o verficales, nunca diagonales. Además, el movi miento siempre es hacia el norte o hacia el este, nunca hacia el sur ni hacia el oeste (los proce sos no pueden ejecutarse hacia atrás).
RkJQdWJsaXNoZXIy MjI4NDcx