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
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
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
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
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
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
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
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
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
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
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
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)
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()
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
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
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
Página siguiente |