Sistemas operativos modernos

totalidad del caché y el TLB. Volverlos a cargar, sea en forma estática o dinámica, aumentará el tiempo que toma procesar una interrupción y, por tanto, desperdicia tiempo de CPU. Otro problema se debe al hecho de que casi todas las CPUs modernas hacen uso intensi­ vo de tuberías y muchas veces son superescalares (internamente paralelas). En los sistemas an­ tiguos, una vez que terminaba de ejecutarse una instrucción, el microprograma o el hardware verificaban si había una interrupción pendiente. En tal caso, el contador de programa y la PSW se metían en la pila y se iniciaba la secuencia de interrupción. Después de ejecutar el maneja­ dor de interrupciones, se efectuaba el proceso inverso, sacando de la pila las anteriores PSWs y el contador de programa y continuando con ese proceso. Este modelo supone en forma implícita que si se presenta una interrupción inmediatamen­ te después de alguna instrucción, todas las instrucciones que anteceden a ésta, incluyéndola, se han ejecutado por completo, y que las que le siguen no lo han hecho. En las máquinas antiguas este supuesto siempre era válido. En las modernas podría no serlo. Por principio de cuentas, consideremos el modelo de tubería de la figura l-6a. ¿Qué suce­ de si se presenta una interrupción cuando la tubería está llena (que es lo normal)? Muchas ins­ trucciones están en diversas etapas de su ejecución. Cuando se presenta la interrupción, el valor del contador de programa quizá no refleje la frontera correcta entre las instrucciones eje­ cutadas y las no ejecutadas. Lo más probable es que refleje la dirección de la siguiente instruc­ ción que se traerá de la memoria para meterla en la tubería, no la dirección de la instrucción que la unidad de ejecución acaba de procesar. Por consiguiente, podría haber una frontera bien definida entre las instrucciones que se han ejecutado y las que no lo han hecho, pero el hardware quizá no sepa dónde está. Por ello, cuando el sistema operativo debe regresar de una interrupción, no puede simplemente ponerse a llenar la tubería a partir de la dirección contenida en el contador de programa; antes debe determinar cuál fue la última instrucción que se ejecutó, tarea a menudo compleja que podría requerir el análisis del estado de la máquina. Aunque esta situación es mala, las interrupciones en una máquina superescalar, como la de la figura l-6b, son peores. Dado que las instrucciones podrían ejecutarse en desorden, ca­ be la posibilidad de que no exista una frontera bien definida entre las instrucciones ejecutadas y las no ejecutadas. Bien podría ser que las instrucciones 1, 2, 3, 5 y 8 ya se hayan ejecutado, pero no las 4, 6, 7, 9, 10 y subsiguientes. Además, puede ser que el contador de programa aho­ ra esté apuntando a la instrucción 9, 10 u 11. Una interrupción que deja a la máquina en un estado bien definido se denomina in terrup ­ ción precisa (Walker y Cragon, 1995). Una interrupción de este Upo fiene cuatro propiedades; 1. El contador de programa (CP) se guarda en un lugar conocido. 2. Todas las instrucciones previas a aquella a la que apunta el CP ya se ejecutaron por completo. 3. No se ha ejecutado ninguna instrucción posterior a aquella a la que apunta el CP. 4. Se conoce el estado de ejecución de la instrucción a la que apunta el CP.

RkJQdWJsaXNoZXIy MjI4NDcx