Descargar

Gestión de Interrupciones en Sistemas Operativos

Enviado por Pablo Turmero


Partes: 1, 2

    edu.red

    1 Introducción Estructura interna de un proceso en Linux int main (int argc, char** argv) { int i, size, status,n_sons = 0; pid_t name_sons[16];   do { rank = fork(); name_sons[n_sons] = rank; n_sons++; } while ((rank != 0) && (n_sons < 16));   if (rank != 0) waitpid (name_sons[15], &status, 0); else Multiplica(); return (0); } (Gp:) código (Gp:) datos (Gp:) pila

    4 Gb (Gp:) Modo usuario

    0 3 Gb

    edu.red

    2 Introducción Estructura interna de un proceso en Linux

    código datos pila int main (int argc, char** argv) { int i, size, status,n_sons = 0; pid_t name_sons[16];   do { rank = fork(); name_sons[n_sons] = rank; n_sons++; } while ((rank != 0) && (n_sons < 16));   if (rank != 0) waitpid (name_sons[15], &status, 0); else Multiplica(); return (0); } (Gp:) código kernel (Gp:) datos kernel (Gp:) pila kernel

    (Gp:) Modo usuario

    Interrupción Llamada sistema (Gp:) asmlinkage void schedule(void) { struct schedule_data * sched_data; struct task_struct * prev, * next; int this_cpu; prev = current; /* move an exhausted RR process to be last.. */ prev->need_resched = 0; if (!prev->counter && prev->policy == SCHED_RR) { prev->counter = prev->priority; move_last_runqueue(prev); } switch (prev->state) { case TASK_INTERRUPTIBLE: ??? (Gp:) Modo kernel

    0 4 Gb 3 Gb

    edu.red

    3 Introducción Estructura interna de un proceso en Linux El kernel se “mapea” en todos los procesos

    Cuando se ejecuta en modo kernel se ejecuta en el modo supervisor del procesador Arquitectura Intel: Anillo 0: Kernel Anillo 3: Procesos usuario (Gp:) código A (Gp:) datos A (Gp:) pila A

    (Gp:) código B (Gp:) datos B (Gp:) pila B

    código kernel datos kernel (Gp:) código kernel (Gp:) datos kernel (Gp:) pila kernel

    (Gp:) código kernel (Gp:) datos kernel (Gp:) pila kernel

    Proceso A Proceso B Kernel

    edu.red

    4 Esquema Interrupciones y excepciones Introducción Soporte hardware para la gestión de interrupciones Gestión de interrupciones y excepciones en Linux Gestión de excepciones Gestión de interrupciones Procedimientos diferidos: Bottom Half Finalización de gestión de interrupciones y excepciones

    edu.red

    5 Introducción Interrupción: Evento que altera la secuencia de instrucciones ejecutadas por el procesador Clasificación de interrupciones: Interrupciones síncronas (excepciones): Producidas por la unidad de control de la CPU mientras se ejecutan instrucciones. Se producen después de la ejecución de una instrucción. Interrupciones asíncronas (interrupciones): Son generadas por otros dispositivos hardware Se producen de forma independiente a las señales de reloj de la CPU a=a/0

    edu.red

    6 Introducción Situación típica: Interrupción de reloj (Gp:) var=3; If(var>2) printf(“mayor”); ??? (Gp:) Código de usuario

    (Gp:) jiffies++; lost_ticks++; mark_bh(TIMER_BH);??? (Gp:) Código de kernel

    edu.red

    7 Introducción Aspectos a considerar: Las interrupciones pueden llegar en cualquier instante El kernel necesita atenderlas lo más rápidamente posible Acciones urgentes: top-half Acciones diferidas: bottom-half Ejemplo:

    Marca la presencia de los datos Continúa con las operaciones previas Realiza el resto del procesado de la interrupción

    edu.red

    8 Introducción Aspectos a considerar Las interrupciones pueden producirse mientras se está atendiendo otras interrupciones/excepciones

    Secciones críticas

    Ejecución anidada de interrupciones Bloqueo de interrupciones

    edu.red

    9 Introducción Secciones críticas Ejecución anidada de interrupciones Bloqueo de interrupciones Gestor de interrupciones 1: Insertar elemento en lista C (Gp:) B (Gp:) A

    Gestor de interrupciones 2: Buscar elemento en lista

    edu.red

    10 Soporte hardware Interrupciones y excepciones en Intel Cada interrupción o excepción se identifica con un número de 0 a 255 ? vector de interrupción Linux usa los siguientes vectores (Gp:) Excepciones (Gp:) 0 31

    (Gp:) Interrupciones (Gp:) 32 47

    (Gp:) Inter. software (Gp:) 48 255

    (Gp:) Llamadas al sistema (Gp:) 128

    edu.red

    11 Soporte hardware Tabla de Descriptores de Interrupción

    descriptor 1 descriptor 2 descriptor n Asocia cada vector de interrupción o excepción con la dirección del gestor correspondiente

    ? ? ? (Gp:) Dirección de la función Permisos

    IDTR

    edu.red

    12 Soporte hardware Gestión hardware de interrupciones y excepciones Antes de ejecutar una instrucción se comprueba si se ha producido una excepción o interrupción. Determina el vector (0 ? i ? 255) asociado Lee la entrada i de la IDT y obtiene la dirección de la función que atiende ese evento Comprueba los permisos asociados. No se puede atender una interrupción en un nivel de protección inferior a donde se produce Si CPL ? DPL ? Se cambia a la pila del nivel específico (pila de kernel)

    edu.red

    13 Soporte hardware Gestión hardware de interrupciones y excepciones Cambio de pila

    (Gp:) valor=suma*3; for(i=0; i<100;i++) valor=valor+ i; ??? (Gp:) Código de usuario

    (Gp:) marco main() (Gp:) marco func1() (Gp:) Pila usuario

    (Gp:) posx = x+desp; posy = y – desp; ??? (Gp:) Código de kernel

    (Gp:) jiffies++; lost_ticks++; mark_bh(TIMER_BH);??? (Gp:) Código de kernel

    (Gp:) marco raton() (Gp:) Pila kernel

    (Gp:) Cambio pila

    marco reloj()

    edu.red

    14 Soporte hardware Gestión hardware de interrupciones y excepciones Antes de ejecutar una instrucción se comprueba si se ha producido una excepción o interrupción. Determina el vector (0 ? i ? 255) asociado Lee la entrada i de la IDT y obtiene la dirección de la función que atiende ese evento Comprueba los permisos asociados. No se puede atender una interrupción en un nivel de protección inferior a donde se produce Si CPL ? DPL ? Se cambia a la pila del nivel específico (pila de kernel) Invoca la función gestora

    edu.red

    15 Gestión de excepciones Gestión de excepciones en Linux Linux aprovecha las excepciones para conseguir dos objetivos: Enviar una señal a un proceso para notificar una condición anómala Implementar la estrategia de paginación bajo demanda

    (Gp:) var=0; temp=suma/var; printf(“%d”, temp); ??? (Gp:) Código de usuario

    Proceso (Gp:) Señal SIGPFE

    edu.red

    16 Gestión de excepciones Gestión de excepciones en Linux Los gestores de excepciones tienen una estructura estándar que consiste en tres fases: Guarda los contenidos de la mayoría de los registros en la pila de kenel (Gp:) Pila kernel

    (Gp:) Cont. Programa (pc) (Gp:) pila usuario (sp) (Gp:) Registros (A,B,…)

    (Gp:) Cont. Programa (pc) (Gp:) pila usuario (sp) (Gp:) Registros (A,B,…) (Gp:) Registros procesador

    (Gp:) Gestión de excepción

    Partes: 1, 2
    Página siguiente