+ All Categories
Home > Documents > Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 1 Dr. Pedro Mejia...

Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 1 Dr. Pedro Mejia...

Date post: 23-Jan-2016
Category:
Upload: elvira-frausto
View: 218 times
Download: 0 times
Share this document with a friend
33
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 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/~pmejia~/
Transcript
Page 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.

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~/

Page 2: 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.

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.

Page 3: 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.

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.

Page 4: 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.

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.

Page 5: 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.

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.

Page 6: 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.

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

Page 7: 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.

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

Page 8: 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.

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.

Page 9: 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.

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

Page 10: 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.

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

Page 11: 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.

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

Page 12: 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.

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.

Page 13: 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.

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

Page 14: 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.

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);}

Page 15: 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.

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

Page 16: 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.

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.

Page 17: 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.

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.

Page 18: 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.

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.

Page 19: 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.

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.

Page 20: 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.

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.

Page 21: 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.

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.

Page 22: 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.

Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 22Dr. Pedro Mejia Alvarez

Ciclo de Interrupciones

Page 23: 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.

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.

Page 24: 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.

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.

Page 25: 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.

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( ){ .............. ...............}

Page 26: 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.

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.

Page 27: 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.

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

Page 28: 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.

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()

Page 29: 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.

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);

}

Page 30: 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.

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()

Page 31: 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.

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)

Page 32: 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.

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

Page 33: 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.

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)


Recommended