5

no pude encontrar una respuesta adecuada a las siguientes preguntas, incluso en algunos libros bien escritos kernel:¿Qué sucede con el manejador de interrupción adelantado?

  1. Están diciendo que un ISR no puede dormir porque no es posible volver a programar un ISR ya que no es conectado con cualquier proceso, entonces, ¿qué sucede cuando una interrupción de prioridad más alta se adelanta a la ejecución? el ISR interrumpido no se reprogramará (ejecutará) nuevamente? Si es así, ¿cómo va a hacer eso el &?

  2. muchas veces vamos a deshabilitar la interrupción (por ejemplo: 1.En la región crítica 2. Cuando se ejecuta una interrupción rápida se deshabilitará toda la interrupción en el procesador actual), entonces ¿qué pasará con las interrupciones que se producen cuando las interrupciones están deshabilitadas? simplemente se descartan? o se almacenará en algún lugar para su posterior ejecución? Si es así, ¿dónde & cómo?

  3. cuando se está ejecutando un ISR, deshabilitará la interrupción en la línea IRQ actual para evitar el reentrada (evitando que se ejecute otro ISR en la misma línea), pero ¿por qué? ¿Qué pasa si un ISR es reentrante?

* = ISR de interrupción de servicio de rutina

* Ellos = autor del libro

+1

La información sobre las 'interrupciones rápidas' está desactualizada. Esto fue eliminado de Linux hace bastante tiempo. Todas las interrupciones deben ser rápidas. * las interrupciones con hilos * reemplazaron esta característica. Ver: http://lwn.net/Articles/302043/ –

Respuesta

1

Por lo que yo sé un ISR puede ser vaciado anteriormente por otra interrupción, y continuar funcionando después de eso. No veo ninguna razón por la cual un proceso pueda ser puesto en la pila y un ISR no.

Los procesos son un nivel de sistema operativo, mientras que los ISR son un nivel de CPU. Si llama a sleep() en un proceso, le dice al sistema operativo que no tiene ningún trabajo y que puede ejecutar otro proceso. Esto no es aplicable a los ISR.

Además, what is meant by disabling interrupts?

0

Voy a tratar de responder a 1 de sus preguntas. respuesta a 1) ISR no puede dormir porque se ejecutan en el contexto del proceso en ejecución. Si duermen, el proceso que se está ejecutando se moverá al estado de suspensión. Eso es indeseable

1

Una interrupción atrapa la ejecución del espacio de usuario al kernel guardando primero los estados actuales de la CPU y forzando al contador de programa (PC) a saltar a la ubicación de la tabla de vectores de interrupción. Luego, la tabla proporciona un puntero a la (secuencia de) función (es) del kernel que guarda los estados del proceso actual y asigna la ID de interrupción al inicio del ISR. Cuando ocurre una interrupción de mayor prioridad durante un ISR, ocurre la misma secuencia de eventos, excepto que tanto el ISR en ejecución como la interrupción entrante son manejados por el mismo proceso (kernel), por lo tanto, ningún proceso se pone en suspensión.

Por supuesto, las nuevas interrupciones se ignoran si están deshabilitadas. Sin embargo, una interrupción puede estar pendiente si está habilitada mientras el procesador está atendiendo una interrupción de mayor prioridad.

ISR es una llamada de función dentro del espacio del núcleo y requiere asignar su propia pila. Las interrupciones de reentrada pueden causar un desbordamiento de la pila si hay demasiadas prevenciones. La mayoría de los kernels (incluidos Linux y Windows) tienen un tamaño de pila fijo.

2
  1. Sí, en el sistema operativo, solo las tareas se scedhuled en RR moda. El objetivo de la programación es compartir recursos de la CPU, compartir de forma justa el poder de ejecución de la CPU para cada tarea en ejecución.La interrupción en sí misma es para manejar un evento específico y cada interrupción tiene su propia prioridad. Una interrupción de prioridad más alta puede adelantarse al ISR de baja prioridad en ejecución.

    Cómo funciona se basa en un registro de máscara de interrupción en interrupt controller, cuando ISR inicia establece el registro de máscara para deshabilitar interrupciones con prioridades más bajas, y antes de ISR return, restaura el registro de máscara para permitir interrupciones de prioridad más baja.

  2. El dispositivo de hardware propone las solicitudes de asas de interrupción, tira de un pin de interrupción al controlador de interrupción cuando llegan los datos. Si la función intterupt está desactivada (la máscara está configurada), la solicitud del hardware está pendiente y el pin de interrupción se mantiene bajo. La interrupción volverá a ocurrir una vez que la interrupción esté habilitada (la máscara está libre).

  3. ¡La CPU activará interrupciones continuamente y aliviará el stackoverflow!

Cuestiones relacionadas