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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
1
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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
2
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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
3
Introduccion al Kernel (cont)
 El manejador de memoria utilizado por el kernel sera provisto




Dr. Pedro Mejia Alvarez
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
4
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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
5
Arquitectura del Kernel
Procesos
C
B
A
Manejo de
• Procesos
Planificacion y • Timers
Cambio de • Semaforos
Contexto
• Buzones
Manejo de
Manejo de
• E/S
Colas y PCB • Hardware
Inicializacion
MS-DOS
Dr. Pedro Mejia Alvarez
Caracteristicas
•Expulsividad.
•Prioridades Fijas.
•Planificacion Round Robin
•con Prioridades.
•Quantum = 50 mseg.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
6
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;}
}
Procesos
proceso_3()
{
while (1){
a = a+1;
if (a == 1) return 0;
else a = 0;}
}
Interface
Primitivas
Procesos
Semaforos
crea
elimina
retrasa
crea_sem
Senal
espera
CPU
Colas
Buzones
crea_buzon
envia
recibe
Tiempo &
Errores
Interrupciones
E/S &
Hardware
Manejadores
MS-DOS
Dr. Pedro Mejia Alvarez
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
7
Proyecto del Curso (Primera Parte)
1. Cambio de Contexto.
2. Inicializacion del Sistema.
3. Manejo de Interrupciones.
Dr. Pedro Mejia Alvarez
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
8
Cambio de Contexto
Proceso 1
Timer
controlador de
interrupciones
programable
Fuente de
Interrupcion
8259 PIC
kernel
• 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
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;
}
}
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
9
Generacion y Atencion de la Interrupcion
Timer
Vectores
de
Interrupcion
PIC
Procedimiento:
1.
2.
3.
4.
Rutina
de
Servicio
kernel
5.
El timer genera la interrupcion.
El PIC la atiende, y verifica el vector
de interrupcion.
El vector de interrupcion contiene la
direccion de la rutina de servicio.
Se tranfiere el control a la rutina de
servicio
La rutina de servicio (cambio de
contexto) contiene un procedimiento
que permite ejecutar varios procesos
en forma concurrente
Proceso
de
usuario
Dr. Pedro Mejia Alvarez
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
10
Cambio de Contexto
kernel
context_switch int 8( )
{
disable_int();
salva_registros();
run = sig_proceso();
ejecuta_proc(run);
enable_int();
}
Cambio de contexto
Dr. Pedro Mejia Alvarez
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;
}
}
main( )
{
save_vect();
set_vect(08,context_switch);
init_procesos();
}
Proceso Principal.
Inicializacion
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
11
Cambio de Contexto
Procedimiento:
context_switch int 8( )
{
disable_int();
salva_registros();
run = sig_proceso();
ejecuta_proc(run);
enable_int();
}
• 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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
12
Vector de Interrupciones
Interrupt
Assignment
Interrupcion
para cambio
de contexto
Dr. Pedro Mejia Alvarez
0
1
Timer
Keyboard
2
Slave 8259
3
4
COM 2
COM 1
5
Network card/other card
6
7
8
9
Floppy
Parallel port
Realtime clock
Remapped interrupt 2
10
11
12
13
Math Co-processor
14
Primary hard disk controller
15
Secondary hard disk controller
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
13
Proceso Principal (Inicializacion)
Procedimiento:
main( )
{
ptr8 = save_vect(8);
set_vect(08,context_switch);
init_procesos();
set_vect(08,ptr);
}
• 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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
14
Activacion de Procesos
Procedimiento:
activa(numero:2, &dir_proceso);
1
• (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
Dr. Pedro Mejia Alvarez
direccion
fisica
proceso_2( )
{
while (1){
a = a+1;
if (a == 1)
return 0;
else
a = 0;
}
}
Cola de Procesos
Activos
proceso 2
head
tail
2
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
15
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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
16
Interupciones
 Se detiene la secuencia normal de ejecucion para atender




Dr. Pedro Mejia Alvarez
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
17
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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
18
Funciones de una Interrupcion
 La interrupcion transfiere el control (la ejecucion) a una




Dr. Pedro Mejia Alvarez
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
19
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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
20
Manejador de Interruciones
 Progrma que determina la naturaleza de la interrupcion y





Dr. Pedro Mejia Alvarez
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
21
Ciclo de Interrupciones
Dr. Pedro Mejia Alvarez
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
22
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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
23
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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
24
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();
}
Cambio de contexto
Dr. Pedro Mejia Alvarez
proceso_1( )
{
..............
...............
}
proceso_1( )
{
..............
...............
}
proceso_1( )
{
..............
...............
}
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
25
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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
26
Cambio de Contexto
kernel
context_switch int 8( )
{
disable_int();
salva_registros();
run = sig_proceso();
ejecuta_proc(run);
enable_int();
}
Cambio de contexto
Dr. Pedro Mejia Alvarez
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;
}
}
main( )
{
save_vect();
set_vect(08,context_switch;
init_procesos();
}
Proceso Principal.
Inicializacion
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
27
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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
28
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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
29
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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
30
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
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
31
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];
Dr. Pedro Mejia Alvarez
// para 20 procesos
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
32
Inicializacion de Tareas
inicializa_tarea(TareaPtr Tarea, unsigned id){
Regs_Int *r;
stack
0
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);
}
Dr. Pedro Mejia Alvarez
SS
SP
registros
del CPU
en stack
(interrupcion)
.........
..........
IP
CS
FLAGS
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo
1024
33
Descargar

No Slide Title