proyecto del curso. 1era. parte: manejo de interrupciones y cambio de contexo 1 dr. pedro mejia...
Post on 23-Jan-2016
221 Views
Preview:
TRANSCRIPT
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 1Dr. Pedro Mejia Alvarez
Proyecto del Curso
Diseño de un Kernel de Procesos Concurrentes.
1era Parte: Diseño del Mecanismo de Cambio de Contexto. 2da. Parte. Diseño del Manejador de Procesos. 3era Parte. Diseño del Manejador de Semaforos. 4a. Parte. Diseño del Manejador de Buzones. 5a. Parte: Integracion del Kernel.
Dr. Pedro Mejia Alvarez.
http://delta.cs.cinvestav.mx/~pmejia~/
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 2Dr. Pedro Mejia Alvarez
Contenido
Diseno de un Kernel de Procesos Concurrentes.
Introduccion al Kernel. Diseno de los Componentes. 1era Parte: Diseno del Mecanismo de Cambio de Contexto. Manejador de Interrupciones.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 3Dr. Pedro Mejia Alvarez
Introduccion al Kernel
Diseno de un Kernel de Procesos Concurrentes.
El kernel de procesos concurrentes es un programa que se ejecuta sobre MS-DOS y que permite ejecutar varios procesos de forma concurrente.
La concurrencia permite a varios procesos compartir el CPU a fin de que la ejecucion sea vista por el usuario como si cada proceso se estuviera ejecutando en distintos procesadores.
El kernel consta de manejador de procesos, manejador de semaforos y manejador de buzones. Las primitivas de estos manejadores son visibles al usuario.
Internamente el kernel contiene distintos manejadores que permiten accesar directamente a los recursos del sistema operativo y del hardware. Estos manejadores son: el manajador del CPU, el manajador del las colas y el PCB, el manejador del timer y de las interrupciones, el manajador de errores y el manejador de E/S y hardware.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 4Dr. Pedro Mejia Alvarez
Introduccion al Kernel (cont)
El manejador de memoria utilizado por el kernel sera provisto por MS-DOS de forma transparente.
El manejador de procesos permite crear procesos, suspender la ejecucion de los procesos, cambiar de contexto, suspender temporalmente a los procesos y eliminar procesos.
El manejador de semaforos permite crear semaforos, y las operaciones senal y espera.
Con las operaciones que proporciona el manejador de semanforos sera posible implementar regiones de acceso exclusivo (secciones criticas), monitores de lectores y escritores o mecanismos de sincronizacion entre procesos.
Con las operaciones que proporciona el manejador de buzones sera posible implementar las operaciones: crear buzon, enviar y recibir mensajes. Con estas operaciones sera posibel comunicar a varios procesos de forma asincrona.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 5Dr. Pedro Mejia Alvarez
Diseno de los Componentes
Kernel de Procesos Concurrentes.
1a. Parte: Diseno del Mecanismo de Cambio de Contexto. 2a. Parte. Diseno del Manejador de Procesos. 3a. Parte. Diseno del Manejador de Semaforos. 4a. Parte. Diseno del Manejador de Buzones. 5a. Parte: Integracion (arquitectura) del Kernel.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 6Dr. Pedro Mejia Alvarez
Manejo de• Procesos• Timers• Semaforos• Buzones
•Expulsividad.•Prioridades Fijas.•Planificacion Round Robin •con Prioridades.•Quantum = 50 mseg.
B
A
C
Planificacion yCambio deContexto
Manejo deColas y PCB
Inicializacion
Manejo de• E/S• Hardware
Caracteristicas
Procesos
Arquitectura del Kernel
MS-DOS
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 7Dr. Pedro Mejia Alvarez
Arquitectura del Kernelproceso_1( ){ while (1){ a = a+1; if (a == 1) return 0; else a = 0;}}
proceso_2( ){ while (1){ a = a+1; if (a == 1) return 0; else a = 0;}}
proceso_3(){ while (1){ a = a+1; if (a == 1) return 0; else a = 0;}}
Primitivas
Manejadores
Procesoscrea
eliminaretrasa
Semaforoscrea_sem
Senalespera
Buzonescrea_buzon
enviarecibe
CPU Colas Tiempo &Interrupciones
Errores E/S &Hardware
Procesos
Interface
MS-DOS
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 8Dr. Pedro Mejia Alvarez
Proyecto del Curso (Primera Parte)
1. Cambio de Contexto.
2. Inicializacion del Sistema.
3. Manejo de Interrupciones.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 9Dr. Pedro Mejia Alvarez
kernel
Fuente deInterrupcion
8259 PIC
controlador deinterrupcionesprogramable
proceso_1( ){ while (1){ a = a+1; if (a == 1) return 0; else a = 0; }}
Proceso 1
proceso_2( ){ while (1){ a = a+1; if (a == 1) return 0; else a = 0; }}
Proceso 2
• el kernel contiene a la rutina de cambio de contexto. • la rutina de cambio de contexto puede escoger entre varios procesos a ejecutar.• cada proceso es interrumpible en cualquier instruccion
Timer
Cambio de Contexto
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 10Dr. Pedro Mejia Alvarez
Generacion y Atencion de la Interrupcion
Vectores
de Interrupcion
Rutina de
Servicio
Procesode
usuario
Timer
PIC
kernel
Procedimiento:1. El timer genera la interrupcion.2. El PIC la atiende, y verifica el vector de interrupcion.3. El vector de interrupcion contiene la direccion de la rutina de servicio.4. Se tranfiere el control a la rutina de servicio5. La rutina de servicio (cambio de contexto) contiene un procedimiento que permite ejecutar varios procesos en forma concurrente
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 11Dr. Pedro Mejia Alvarez
main( ){ save_vect(); set_vect(08,context_switch); init_procesos();}
kernel
context_switch int 8( ){ disable_int(); salva_registros(); run = sig_proceso(); ejecuta_proc(run); enable_int(); }
proceso_1( ){ while (1){ a = a+1; if (a == 1) return 0; else a = 0; }}
proceso_2( ){ while (1){ a = a+1; if (a == 1) return 0; else a = 0; }}
Cambio de Contexto
Cambio de contexto
Proceso Principal.Inicializacion
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 12Dr. Pedro Mejia Alvarez
Cambio de Contexto
context_switch int 8( ){ disable_int(); salva_registros(); run = sig_proceso(); ejecuta_proc(run); enable_int(); }
Procedimiento:
• Al entrar se recupera la direccion del proceso en ejecucion y se salva en su PCB.• Se verifica cual es el siguiente proceso a ejecutar. Se consulta la cola de listos.• Si proceso siguiente es distinto al proceso actual, se envia a ejecucion al proceso siguiente. Se carga del PCB del proceso siguiente los registros (CS:IP, DS, SS, SP, BP, Flags, etc)• proceso en ejecucion = proceso siguiente;• Push de registros del proceso siguiente en Stack.• IRET.
• Se ejecuta cada 50 msegs • Existe un timer programado para interrumpir cada 50 msegs.• Dentro de la rutina se desabilitan interrupciones.• Debe ser rapida.• No debe haber llamadas a otras interrupciones.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 13Dr. Pedro Mejia Alvarez
Vector de Interrupciones
Interrupt Assignment
0 Timer1 Keyboard
2 Slave 8259
3 COM 24 COM 1
5 Network card/other card
6 Floppy7 Parallel port8 Realtime clock9 Remapped interrupt 2
10111213 Math Co-processor
14 Primary hard disk controller
15 Secondary hard disk controller
Interrupcionpara cambio de contexto
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 14Dr. Pedro Mejia Alvarez
Proceso Principal (Inicializacion)
Procedimiento:
• Inicializar colas.• Inicializar PCB.• Activar Procesos.• Habilitar <ctrl-c>. Procedimiento de exit.• Salva el vector de Interrupciones (8) • Desabilitar interrupciones. • Cambiar el vector 8 por la direccion de la rutina de cambio de contexto.• Habilitar interrupciones.
• Los procesos los activa el Kernel.• El main() no es un proceso, es la rutina de inicializacion.• Las colas se inicializan en 0's.• Al activar los procesos se llena parte del PCB, con las direcciones de inicio de los procesos.
main( ){ ptr8 = save_vect(8); set_vect(08,context_switch); init_procesos(); set_vect(08,ptr);}
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 15Dr. Pedro Mejia Alvarez
Activacion de Procesos
Procedimiento:
• (verifica parametros) • Inicializar el PCB.• Incluir al proceso en la cola de listos.• Inicializar PCB.• Activar Procesos.
PCB:
-numero-estado: activo-registros•CS•IP•FLAGS•DS•ES•AX,...DX
proceso_2( ){ while (1){ a = a+1; if (a == 1) return 0; else a = 0; }}
direccionfisica
activa(numero:2, &dir_proceso);
Cola de ProcesosActivos
1
2
proceso 2 head
tail
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 16Dr. Pedro Mejia Alvarez
Por Entregar
Programa del Kernel que contiene: Modulo (Programa) manejador de Interrupciones que
efectue cambio de contexto. 4 Procesos que manejen c/u 1/4 de la pantalla y que
efectuen algun programa grafico: Despliegue del reloj. Manejo de una pelota que recorra la ventana. Manejo de una serpiente que recorra la ventana. Manejo de una tabla que cambie sus valores con el tiempo. Un editor de caracteres sencillo, que acepte caracteres del
teclado. Procedimiento de Inicializacion del Sistema:
Interrupciones, y PCB. Ligar los 4 procesos con el Manejador en un solo
programa.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 17Dr. Pedro Mejia Alvarez
Interupciones
Se detiene la secuencia normal de ejecucion para atender algun evento (actividad de computo).
Mejora la eficiencia del procesamiento. Permite al procesador ejecutar otras instrucciones mientras se
espera por la ocurrencia de E/S. Se atiende a un evento solo hasta que ocurre la interrupcion. Al terminar de atender la interrupcion se regresa al
procesamiento anterior.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 18Dr. Pedro Mejia Alvarez
Clocks, Timers, e Interrupciones (PIC)
Proveen la hora, sirven de cronometro o de alarma. Se puede programa para que interrumpa cada 10 mseg
(periodicamante). Al interrumpir se llama a una rutina de servicio
(manejador de interrupcion). Se puede prograna para atender eventos asincronos,
que ocurren en cualquier momento y hay que darles atencion. P.ej. el teclado o el puerto serie.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 19Dr. Pedro Mejia Alvarez
Funciones de una Interrupcion
La interrupcion transfiere el control (la ejecucion) a una rutina de servicio de la interrupcion.
En el vector de interrupciones se encuentra la direccion de la rutina de servicio.
En la rutina de servicio se debe de salvar la direccion de
de donde ocurrio la interrupcion. Mientras se atiende a una interrupcion, otras
interupciones se desabilitan (temporalmente), para evitar que se pierdan.
El cambio de contexto se realiza mediante interrupciones.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 20Dr. Pedro Mejia Alvarez
Clases de Interrupciones
Por Programa overflow aritmetico division por cero ejecucion de instrucciones ilegales. proteccion de memoria.
Timers: se programa un timer para que interrumpa despues de un tiempo.
E/S: se programa un driver para que se atienda a un dispositivo de E/S.
Fallo de Hardware (o de software): Si algun dispositivo falla, o si se detecta algun error de software, se ejecuta una excepcion.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 21Dr. Pedro Mejia Alvarez
Manejador de Interruciones
Progrma que determina la naturaleza de la interrupcion y atiende el evento que la origino.
Se tranfiere el control a este programa: se deja de ejecutar el proceso actual.
Se salvan los registros del CPU (direccion del proceso actual), para poder regresar.
Para cada tipo de interrupcion, debe haber un manejador distinto.
Puede ser parte del sistema operativo (aunque tambien, puede ser inicializado por el usuario).
Es necesario verificar cual vector de interrupciones se utiliza. Algunas interupciones son del sistema, y pueden afectar al sistema de computo si son remplazadas.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 22Dr. Pedro Mejia Alvarez
Ciclo de Interrupciones
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 23Dr. Pedro Mejia Alvarez
Ciclo de Interrupciones
Si las interrupciones estan habilitadas: el procesador checa interrupciones
Si las interupciones estan desabilitadas, al hacer el fetch el CPU ejecuta la proxima instruccion.
Si una interrupcion esta pendiente, se suspende la ejecucion del programa actual, y se llama al manejador de interrupciones.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 24Dr. Pedro Mejia Alvarez
Multiples Interrupciones
Las interrupciones se desabilitan cuando se procesa una interrpcion. El procesador "ignora" una
senal de peticion de nueva interrupcion.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 25Dr. Pedro Mejia Alvarez
Una Interrupcion, varios manejadores de interrupcion.
En este caso, solo existe un manejador de interupciones. El manejador elige una de entre varias rutinas de
servicio. El manejador interrumpe la ejecucion de las rutinas, y
salva su estado, para darle el CPU a otra rutina.
Manejador de interrupcion( ){ disable_int(); salva_registros(); run = sig_proceso(); ejecuta_proc(run); enable_int(); }
proceso_1( ){ .............. ...............}
Cambio de contexto
proceso_1( ){ .............. ...............}
proceso_1( ){ .............. ...............}
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 26Dr. Pedro Mejia Alvarez
Multiples Prioridades de Interrupcion
Existen distintos niveles de interrupcion. Las interrupciones de alta prioridad producen que las
interrupciones de baja priorida esperen. Las interrpciones de alta prioridad interrumpen a las de
baja prioridad.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 27Dr. Pedro Mejia Alvarez
main( ){ save_vect(); set_vect(08,context_switch; init_procesos();}
kernel
context_switch int 8( ){ disable_int(); salva_registros(); run = sig_proceso(); ejecuta_proc(run); enable_int(); }
proceso_1( ){ while (1){ a = a+1; if (a == 1) return 0; else a = 0; }}
proceso_2( ){ while (1){ a = a+1; if (a == 1) return 0; else a = 0; }}
Cambio de Contexto
Cambio de contexto
Proceso Principal.Inicializacion
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 28Dr. Pedro Mejia Alvarez
void interrupt (*old_rutina) (void);
main( ){ old_rutina = getvect(8); setvect(08,context_switch); inicializa_tarea(1); inicializa_tarea(2); inicializa_tarea(3); inicializa_tarea(4); while(1);}
main()
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 29Dr. Pedro Mejia Alvarez
context_switch()
void interrupt (*old_rutina) (void);int i;
void interrupt rutina(void){ disable(); i++; if ( (i%20) ==0) printf("\n %d",i++); old_rutina(); enable();}
main(){
i = 0;old_rutina = getvect(8);setvect(8, rutina);while(1);
}
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 30Dr. Pedro Mejia Alvarez
void interrupt context_switch(void){disable();
DD[PtrRun->Este].ss=_SS; DD[PtrRun->Este].sp=_SP; InsertaListos(PtrRun,&Error); PtrRun=PrimeraTarea(&Error); _SS=DD[PtrRun->Este].ss; _SP=DD[PtrRun->Este].sp; old_rutina(); enable(); }
context_switch()
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 31Dr. Pedro Mejia Alvarez
/* Estructura de los regitros internosen el orden que C++ los guarda enuna llamada a funcion tipo interrupcion*/struct RI{
unsigned bp;unsigned di;unsigned si;unsigned ds;unsigned es;unsigned dx;unsigned cx;unsigned bx;unsigned ax;unsigned ip;unsigned cs;unsigned flags;
};typedef RI Regs_Int;
Inicializacion (estructuras de datos)
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 32Dr. Pedro Mejia Alvarez
Inicializacion (estructuras de datos)
/* Estructura del PCB para cada tarea */struct procb{ unsigned id; //Identificador unsigned DirSeg; //Semento de inicio de la tarea unsigned DirOff; //Desplazamiento de inicio de la tarea unsigned status; //Tiempo de espera en colo de retraso unsigned sp; //Apuntador de Pila local unsigned ss; //Apuntador de Pila Local int estado; //Estado de la tarea unsigned prioridad; //Prioridad de la tarea char *nombre; //Nombre de la tarea char far stck[4096]; //Espacio de Pila Local};
typedef procb PCB[20]; // para 20 procesos
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 33Dr. Pedro Mejia Alvarez
Inicializacion de Tareas
inicializa_tarea(TareaPtr Tarea, unsigned id){Regs_Int *r; r = (Regs_Int *) DD[id].stck + 1024 - sizeof( Regs_Int); DD[id].sp = FP_OFF((Regs_Int far *) r); DD[id].ss = FP_SEG((Regs_Int far *) r); r->cs = FP_SEG(Tarea); r->ip = FP_OFF(Tarea); r->ds = _DS; r->es = _DS; r->flags = 0x20; DD[id].estado = READY; DD[id].DirSeg = FP_SEG(Tarea); DD[id].DirOff = FP_OFF(Tarea);
inicializa_cola(id);}
stack
SSSP
1024
0
...................
IPCS
FLAGS
registros del CPUen stack
(interrupcion)
top related