Introducción al Minikernel

Slides:



Advertisements
Presentaciones similares
Planificación de Monoprocesadores
Advertisements

Funciones y recursividad
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Listas enlazadas c++ Prof. Franklin Cedeño.
Estructura de Datos En C++
Fundamentos de la Programación Estructurada
Programación I Teoría IV
Programación, Algoritmos y Estructuras de Datos
Tipos de Datos Básicos y Estructurados
Sistemas Operativos Unidad II Procesos.
Modelo de procesos de dos estados
Diseño de sistemas operativos Tema 2 Gestión de procesos
Programación en C (Segunda Parte) DATSI, FI, UPM José M. Peña
1.3 Programación modular. Subprogramas.
Comunicación entre procesos en Linux
Control y Descripción de Procesos
Tareas en Linux · TASK_RUNNING (0): Indica que el proceso en cuestión se está ejecutando o listo para ejecutarse. En este segundo caso, el proceso dispone.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Teoría de lenguajes y compiladores
IMPLEMENTACIÓN DEL ALGORITMO DE PRIORIDADES DUALES EN RT-LINUX
Implementación de Listas
Programación II Colas Igor Santos Grueiro.
Funciones en lenguaje C
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Multiprogramación Procesos Cecilia Hernández
Estructuras dinámicas de datos, TAD Lista, parte 2
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
Administración del Procesador
Diseño de algoritmos “Punteros”
Tema 9 Estructuras.
Lenguaje C.
MIPS Intermedio.
Semana 5 Subprogramas..
Sistemas Operativos Procesos.
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
Hilos - Lightweight process - Procesos ligeros
Archivos.
Estructuras.
TABLAS Definición. El tipo tabla permite definir objetos formados por un conjunto de elementos del mismo tipo. Ejemplos. El tipo tabla se utiliza para.
Profesor: Rodrigo Sanhueza Figueroa
Descomposición Modular. Funciones
Unidad VI Registros (estructuras, uniones y enumeraciones)
Informática Ingeniería en Electrónica y Automática Industrial
Contenido Estructura del computador Ejecución de instrucciones
Realizado por: Kepa Bengoetxea
Concepto de proceso Sebastián Sánchez Prieto. Procesos 2  S2P, OGP & IGT Definición de proceso Un proceso es un programa en ejecución Componentes:
Introducción al tiempo real en sistemas empotrados
Unidad II Introducción a la programación en C++
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Informática Ingeniería en Electrónica y Automática Industrial
Programación en C para electrónicos
Punteros.
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
PUNTEROS Y REFERENCIAS
Administrador de procesos
Introducción al Minikernel 2
ICC243 Sistemas Operativos
Programación Procedural y Recursiva en C++
Sistemas Operativos Unidad III Procesos.
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
Por Luis Esteban Monsalve Martínez
LENGUAJE “C” Programación.
LSI. Freddy Veloz Sistemas Operativos
Ayudantia 3: Pilas- Colas
Teoría de Sistemas Operativos Memoria Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
TEMA: PROCESOS y PLANIFICACIÓN
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
TIPOS DE DATOS PARCIAL III FUNCIONES. Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman ciertos valores.
Introducción al Lenguaje C (II) Cadenas de caracteres, archivos de cabecera, lectura y escritura Fundamentos de Programación Departamento de Lenguajes.
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
Transcripción de la presentación:

Introducción al Minikernel Diseño de Sistemas Operativos

Entorno de prácticas LINUX minikernel Libros Cuenta de laboratorio http://arcos.inf.uc3m.es/~dssoo/index.html Libros Jesús Carretero, Félix García y Fernando Pérez. Prácticas de Sistemas Operativos: de la base al diseño

Llamadas al sistema (llamsis.h) Esquema global Procesos de usuario Llamadas al sistema (llamsis.h) Minikernel Llamadas HAL (HAL.h) HAL S.O Linux Hardware

Minikernel boot Kernel init Proc usr Proc usr Proc usr int main(){ /* se llega con las interrupciones prohibidas */ iniciar_tabla_proc(); instal_man_int(EXC_ARITM, exc_arit); instal_man_int(EXC_MEM, exc_mem); instal_man_int(INT_RELOJ, int_reloj); instal_man_int(INT_TERMINAL, int_terminal); instal_man_int(LLAM_SIS, tratar_llamsis); instal_man_int(INT_SW, int_sw); iniciar_cont_int(); /* inicia cont. interr. */ iniciar_cont_reloj(TICK); /* fija frecuencia del reloj */ iniciar_cont_teclado(); /* inici cont. teclado */ /* crea proceso inicial */ if (crear_tarea((void *)"init")<0) panico("no encontrado el proceso inicial"); p_proc_actual=planificador(); /* activa proceso inicial */ cambio_contexto(NULL, &(p_proc_actual->contexto_regs)); return 0; } boot Kernel init Proc usr Proc usr Proc usr

init.c int main(){ printf("init: comienza\n"); boot if (crear_proceso("simplon")<0) printf("Error creando simplon\n"); if (crear_proceso("excep_arit")<0) printf("Error creando excep_arit\n"); if (crear_proceso("excep_mem")<0) printf("Error creando excep_mem\n"); } boot Kernel init Proc usr Proc usr Proc usr

Excep_arit.c boot Kernel init #define ITER_EXCEP 22 /* iteración en la que causa excepción */ int tot=0; int main(){ int i; for (i=0; i<200; i++){ printf("excep_arit: i %d \n", i); /* Forzando una excepción */ if ((i+1)%ITER_EXCEP==0) i/=tot; } /* No debería llegar ya que ha generado una excepción */ printf("excep_arit: termina\n"); return 0; boot Kernel init Proc usr Proc usr Proc usr

Rutina de interrupción exc_arit static void exc_arit(){ if (!viene_de_modo_usuario()) panico("excepcion aritmetica cuando estaba dentro del kernel"); printk("-> EXCEPCION ARITMETICA EN PROC %d\n", p_proc_actual->id); liberar_proceso(); return; /* no debería llegar aqui */ } static void liberar_proceso(){ BCP * p_proc_anterior; liberar_imagen(p_proc_actual->info_mem); /* liberar mapa */ p_proc_actual->estado=TERMINADO; eliminar_primero(&lista_listos); /* proc. fuera de listos */ /* Realizar cambio de contexto */ p_proc_anterior=p_proc_actual; p_proc_actual=planificador(); liberar_pila(p_proc_anterior->pila); cambio_contexto(NULL, &(p_proc_actual->contexto_regs)); boot Kernel init Proc usr Proc usr Proc usr exc_arit

Estructura de datos: procesos typedef struct BCP_t *BCPptr; typedef struct BCP_t { int id; /* ident. del proceso */ int estado; /* TERMINADO|LISTO|EJECUCION|BLOQUEADO*/ contexto_t contexto_regs; /* copia de regs. de UCP */ void * pila; /* dir. inicial de la pila */ BCPptr siguiente; /* puntero a otro BCP */ void *info_mem; /* descriptor del mapa de memoria */ } BCP; finalizar Ejecución Terminado Cambio de contexto dormir despertar Listo Bloqueado

Estructura de datos: procesos /* Definicion del tipo que corresponde con la cabecera de una lista * de BCPs. Este tipo se puede usar para diversas listas (procesos * listos, procesos bloqueados, etc.). */ typedef struct{ BCP *primero; BCP *ultimo; } lista_BCPs; /* Variable global que identifica el proceso actual */ BCP * p_proc_actual=NULL; /* Variable global que representa la tabla de procesos */ BCP tabla_procs[MAX_PROC]; /* Variable global que representa la cola de procesos listos */ lista_BCPs lista_listos= {NULL, NULL};

Llamadas al sistema Minikernel /* Definición del tipo que corresponde con una entrada en la tabla de llamadas al sistema. */ typedef struct{ int (*fservicio)(); } servicio; /* Prototipos de las rutinas que realizan cada llamada al sistema */ int sis_crear_proceso(); int sis_terminar_proceso(); int sis_escribir(); /* Variable global que contiene las rutinas que realizan cada llamada */ servicio tabla_servicios[NSERVICIOS]={ {sis_crear_proceso}, {sis_terminar_proceso}, {sis_escribir}};

Planificador (caso I) Política FIFO Ejecución 4 3 9 2 6 8 1 5 7 Prioridad alta Prioridad media Prioridad baja Ejecución

Planificador (caso II) Política Round Robin 9 6 8 5 7 Prioridad alta Prioridad media Prioridad baja Ejecución

Planificador (caso II) Política Round Robin 9 6 8 5 7 Prioridad alta Prioridad media Prioridad baja Ejecución

Planificador (caso III) Creamos un proceso de prioridad alta 10 9 8 7 Prioridad alta Prioridad media Prioridad baja Ejecución 5

Planificador (caso III) Cambio de contexto 9 8 10 7 Prioridad alta Prioridad media Prioridad baja Ejecución 5

Mutex