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 |