Cambio de contexto en c

Solo disponible en BuenasTareas
  • Páginas : 6 (1484 palabras )
  • Descarga(s) : 0
  • Publicado : 15 de febrero de 2011
Leer documento completo
Vista previa del texto
Programa de cambio de contexto
Asignatura Sistemas en tiempo real
Departamento de computación
CINVESTAV, IPN

Resumen
Este trabajo presenta la elaboración de un programa que permite realizar el cambio de contexto entre tres tareas muestra hora, pelota circulando en la pantalla y editor de texto simple.

Se utiliza la interrupción del reloj (0x08) para la ejecución de la rutina de cambiode contexto que se ejecuta dentro de la computadora cada 0.52 ms. Con ello se pretende realizar las tres tareas de manera concurrente, es decir que trabajen de forma simultánea dentro de la pantalla que será dividido en 4 áreas, para tener una mejor visualización de los procesos.

Introducción
Un cambio de contexto consiste en la ejecución de una rutina perteneciente al núcleo del sistemaoperativo multitarea de una computadora, cuyo propósito es parar la ejecución de un proceso para dar pasa a la ejecución de un proceso distinto. Siempre se ejecuta ante una interrupción ya sea de software o de hardware, cuando el procesador realiza el cambio de un proceso a otro, se requiere salvar el estado del proceso anterior y cargar el estado del proceso nuevo, el sistema operativo genera cambiode contexto en cualquier momento dando con ello el control a cada uno de los procesos que se corren dentro del computador.

El procesador de una computadora sólo puede ejecutar un proceso (programa) al mismo tiempo, no es posible ejecutar otro programa si no ha finalizado el proceso anterior, no obstante es posible simular la ejecución simultanea de dos o más programa si se alterna laejecución de los mismo, mediante el paro del proceso actual para dar acceso a la ejecución del proceso nuevo y reanudar posteriormente el proceso en el mismo lugar que se detuvo sin tener perdida de información. Si el periodo de alternancia es muy cortó, da la apariencia que se están ejecutando todos a la vez, esto se denomina concurrencia.

La rutina de cambio de contexto debe realizar las siguientesoperaciones:
1. Salvar el estado del programa que se está ejecutando.
2. Seleccionar otro programa para ejecutar.
3. Restaurar el estado del programa seleccionado.
4. Ejecutar el programa seleccionado.

Estas instrucciones se repiten cada vez que ocurre un evento externo, para el caso de la práctica se utilizo la interrupción del reloj 0x08 (que se ejecuta 0.52ms) para laejecución de la rutina del cambio de contexto entre tres tareas: muestra hora, pelota circulando en la pantalla y editor de texto simple.

Desarrollo

Es necesario tener un proceso principal que nos permita activar el kernel, mediante la rutina de inicialización se inician las colas en -1, se activan los procesos con el llenado del PCB con las direcciones del mismo, se incluyen los procesos a lacola de listos y se realiza el manejo de interrupciones del reloj y del teclado para poder realizar el proceso de cambio de contexto y la detección del teclado para el editor de texto.

void main (void)
{
KGL_Marco();

antes = getvect (8);
setvect(8,XclkISR);
keyboardOld=getvect(9);
setvect(9,keyboardISR);

KGL_iniProc0();

KGL_IniTarea(&teclado,1);KGL_IniTarea(&tiempo,2);
KGL_IniTarea(&pelota,3);


while(ejecucion);
//Restaurar vectores de interrupción
setvect(8, antes);
setvect(9, keyboardOld);
clrscr();
}

La inicialización de los procesos y la cola de procesos de listos se realiza en las siguientes funciones.

void KGL_iniProc0( void )
{
DD[0].estado = READY;
DD[0].DirSeg = _CS;
DD[0].DirOff = 0;
}

voidKGL_IniTarea(TareaPtr Tarea, unsigned id)
{
Regs_Int *r;

r = (Regs_Int *) (DD[id].stck + STACKSIZE - 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 = _ES;
r->flags = 0x200;

DD[id].estado = READY;
DD[id].DirSeg = FP_SEG(Tarea);
DD[id].DirOff =...
tracking img