Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porSergio Alvarado Valdéz Modificado hace 10 años
1
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 1 Dr. 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/~pmalvarez
2
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 2 Dr. 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.
3
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 3 Dr. Pedro Mejia Alvarez Introduccion al Kernel Diseno de un Kernel de Procesos Concurrentes. n El kernel de procesos concurrentes es un programa que se ejecuta sobre MS-DOS y que permite ejecutar varios procesos de forma concurrente. n 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. n El kernel consta de manejador de procesos, manejador de semaforos y manejador de buzones. Las primitivas de estos manejadores son visibles al usuario. n 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.
4
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 4 Dr. 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. n 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.
5
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 5 Dr. Pedro Mejia Alvarez Diseno de los Componentes Kernel de Procesos Concurrentes. 1a.Parte Manejador de Interrupciones. 2a. Parte: Diseno del Mecanismo de Cambio de Contexto. 3a. Parte. Diseno del Manejador de Procesos. 4a. Parte. Diseno del Manejador de Semaforos. 5a. Parte. Diseno del Manejador de Buzones. 6a. Parte: Integracion (arquitectura) del Kernel.
6
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 6 Dr. Pedro Mejia Alvarez Manejo de Procesos Timers Semaforos Buzones Expulsividad. Prioridades Fijas. Planificacion Round Robin con Prioridades. Quantum = 50 mseg. B A C Planificacion y Cambio de Contexto Manejo de Colas y PCB Inicializacion Manejo de E/S Hardware Caracteristicas Procesos Arquitectura del Kernel MS-DOS
7
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 7 Dr. Pedro Mejia Alvarez Arquitectura del Kernel 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;} } proceso_3() { while (1){ a = a+1; if (a == 1) return 0; else a = 0;} } Primitivas Manejadores Procesos crea elimina retrasa Semaforos crea_sem Senal espera Buzones crea_buzon envia recibe CPU Colas Tiempo & Interrupciones Errores E/S & Hardware Procesos Interface MS-DOS
8
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 8 Dr. Pedro Mejia Alvarez Proyecto del Curso (Primera Parte) 1. Manejo de Interrupciones 2. Cambio de Contexto. 3. Inicializacion del Sistema.
9
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 9 Dr. Pedro Mejia Alvarez kernel Fuente de Interrupcion 8259 PIC controlador de interrupciones programable 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
10
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 10 Dr. 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.
11
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 11 Dr. Pedro Mejia Alvarez Generacion y Atencion de la Interrupcion Vectores de Interrupcion Rutina de Servicio Proceso de 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 servicio 5. La rutina de servicio (cambio de contexto) contiene un procedimiento que permite ejecutar varios procesos en forma concurrente
12
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 12 Dr. Pedro Mejia Alvarez Vector de Interrupciones Interrupt Assignment 0 Timer 1 Keyboard 2 Slave 8259 3 COM 2 4 COM 1 5 Network card/other card 6 Floppy 7 Parallel port 8 Realtime clock 9 Remapped interrupt 2 10 11 12 13 Math Co-processor 14 Primary hard disk controller 15 Secondary hard disk controller Interrupcion para cambio de contexto
13
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 13 Dr. 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.
14
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 14 Dr. 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.
15
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 15 Dr. 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.
16
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 16 Dr. 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.
17
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 17 Dr. Pedro Mejia Alvarez Ciclo de Interrupciones
18
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 18 Dr. 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.
19
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 19 Dr. Pedro Mejia Alvarez Multiples Interrupciones Las interrupciones se desabilitan cuando se procesa una interrpcion. El procesador "ignora" una senal de peticion de nueva interrupcion.
20
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 20 Dr. 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( ) {............................. }
21
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 21 Dr. 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.
22
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 22 Dr. 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
23
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 23 Dr. 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.
24
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 24 Dr. Pedro Mejia Alvarez Proceso Principal (Inicializacion) Procedimiento: Inicializar colas. Inicializar PCB. Activar Procesos. Habilitar. 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); }
25
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 25 Dr. 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; } direccion fisica activa(numero:2, &dir_proceso); Cola de Procesos Activos 1 2 proceso 2 head tail
26
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 26 Dr. 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.
27
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 27 Dr. 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
28
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 28 Dr. 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()
29
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 29 Dr. 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); }
30
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 30 Dr. 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()
31
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 31 Dr. Pedro Mejia Alvarez /* Estructura de los registros internos en el orden que C++ los guarda en una 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)
32
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 32 Dr. 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
33
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 33 Dr. 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 SS SP 1024 0................... IP CS FLAGS registros del CPU en stack (interrupcion)
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.