1 / 33

Proyecto del Curso

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.

elise
Télécharger la présentation

Proyecto del Curso

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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~/ Dr. Pedro Mejia Alvarez

  2. 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. Dr. Pedro Mejia Alvarez

  3. 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. Dr. Pedro Mejia Alvarez

  4. 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. Dr. Pedro Mejia Alvarez

  5. 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. Dr. Pedro Mejia Alvarez

  6. Arquitectura del Kernel Procesos C B • Manejo de • Procesos • Timers • Semaforos • Buzones Planificacion y Cambio de Contexto A • Manejo de • E/S • Hardware Manejo de Colas y PCB Caracteristicas • Expulsividad. • Prioridades Fijas. • Planificacion Round Robin • con Prioridades. • Quantum = 50 mseg. Inicializacion MS-DOS Dr. Pedro Mejia Alvarez

  7. Arquitectura del Kernel proceso_2( ) { while (1){ a = a+1; if (a == 1) return 0; else a = 0;} } proceso_1( ) { 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;} } Procesos Interface Semaforos crea_sem Senal espera Procesos crea elimina retrasa Buzones crea_buzon envia recibe Primitivas Tiempo & Interrupciones E/S & Hardware Colas Errores CPU Manejadores MS-DOS Dr. Pedro Mejia Alvarez

  8. Proyecto del Curso (Primera Parte) • Cambio de Contexto. • Inicializacion del Sistema. • Manejo de Interrupciones. Dr. Pedro Mejia Alvarez

  9. Fuente de Interrupcion controlador de interrupciones programable 8259 PIC kernel Cambio de Contexto Proceso 1 Timer proceso_1( ) { while (1){ a = a+1; if (a == 1) return 0; else a = 0; } } Proceso 2 proceso_2( ) { while (1){ a = a+1; if (a == 1) return 0; else a = 0; } } • 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 Dr. Pedro Mejia Alvarez

  10. Generacion y Atencion de la Interrupcion Timer Vectores de Interrupcion Rutina de Servicio Proceso de usuario • Procedimiento: • El timer genera la interrupcion. • 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 PIC kernel Dr. Pedro Mejia Alvarez

  11. main( ) { save_vect(); set_vect(08,context_switch); init_procesos(); } context_switch int 8( ) { disable_int(); salva_registros(); run = sig_proceso(); ejecuta_proc(run); enable_int(); } Cambio de Contexto proceso_1( ) { while (1){ a = a+1; if (a == 1) return 0; else a = 0; } } kernel proceso_2( ) { while (1){ a = a+1; if (a == 1) return 0; else a = 0; } } Proceso Principal. Inicializacion Cambio de contexto Dr. Pedro Mejia Alvarez

  12. context_switch int 8( ) { disable_int(); salva_registros(); run = sig_proceso(); ejecuta_proc(run); enable_int(); } Cambio de Contexto • 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. Dr. Pedro Mejia Alvarez

  13. Vector de Interrupciones Interrupt Assignment 0 Timer 3 COM 2 4 COM 1 5 Network card/other card 6 Floppy 7 Parallel port 14 Primary hard disk controller 15 Secondary hard disk controller 1 Keyboard 2 Slave 8259 Interrupcion para cambio de contexto 8 Realtime clock 9 Remapped interrupt 2 10 11 12 13 Math Co-processor Dr. Pedro Mejia Alvarez

  14. main( ) { ptr8 = save_vect(8); set_vect(08,context_switch); init_procesos(); set_vect(08,ptr); } 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. Dr. Pedro Mejia Alvarez

  15. Activacion de Procesos • Procedimiento: • (verifica parametros) • Inicializar el PCB. • Incluir al proceso en la cola de listos. • Inicializar PCB. • Activar Procesos. activa(numero:2, &dir_proceso); 1 • PCB: • -numero • -estado: activo • -registros • CS • IP • FLAGS • DS • ES • AX,...DX Cola de Procesos Activos proceso_2( ) { while (1){ a = a+1; if (a == 1) return 0; else a = 0; } } head tail proceso 2 direccion fisica 2 Dr. Pedro Mejia Alvarez

  16. 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. Dr. Pedro Mejia Alvarez

  17. 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. Dr. Pedro Mejia Alvarez

  18. 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. Dr. Pedro Mejia Alvarez

  19. 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. Dr. Pedro Mejia Alvarez

  20. 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. Dr. Pedro Mejia Alvarez

  21. 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. Dr. Pedro Mejia Alvarez

  22. Ciclo de Interrupciones Dr. Pedro Mejia Alvarez

  23. 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. Dr. Pedro Mejia Alvarez

  24. Multiples Interrupciones • Las interrupciones se desabilitan cuando se procesa una interrpcion. • El procesador "ignora" una senal de peticion de nueva interrupcion. Dr. Pedro Mejia Alvarez

  25. Manejador de interrupcion( ) { disable_int(); salva_registros(); run = sig_proceso(); ejecuta_proc(run); enable_int(); } 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. proceso_1( ) { .............. ............... } proceso_1( ) { .............. ............... } proceso_1( ) { .............. ............... } Cambio de contexto Dr. Pedro Mejia Alvarez

  26. 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. Dr. Pedro Mejia Alvarez

  27. main( ) { save_vect(); set_vect(08,context_switch; init_procesos(); } context_switch int 8( ) { disable_int(); salva_registros(); run = sig_proceso(); ejecuta_proc(run); enable_int(); } Cambio de Contexto proceso_1( ) { while (1){ a = a+1; if (a == 1) return 0; else a = 0; } } kernel proceso_2( ) { while (1){ a = a+1; if (a == 1) return 0; else a = 0; } } Proceso Principal. Inicializacion Cambio de contexto Dr. Pedro Mejia Alvarez

  28. main() 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); } Dr. Pedro Mejia Alvarez

  29. 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); } Dr. Pedro Mejia Alvarez

  30. context_switch() 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(); } Dr. Pedro Mejia Alvarez

  31. Inicializacion (estructuras de datos) /* Estructura de los regitros 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; Dr. Pedro Mejia Alvarez

  32. 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 Dr. Pedro Mejia Alvarez

  33. 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 0 SS SP ......... .......... IP CS FLAGS registros del CPU en stack (interrupcion) 1024 Dr. Pedro Mejia Alvarez

More Related