Ejemplo: Creación y mutación de procesos

Slides:



Advertisements
Presentaciones similares
Integrando Obras y Oficina
Advertisements

HERRAMIENTAS DE LAS TIC QUE CONTRIBUYEN A FORMAR PARA LA CIUDADANÍA.
Configuración de Control
Archivos de Texto. Introducción Los archivos son una secuencia de bits que se guarda en el disco duro. La ventaja de utilizar archivos es que los datos.
Programación en C para electrónica
BASE DE DATOS Primeros pasos
Introducción a Simulink
I.T.E.S.R.C. Romina Tamez Andrea Martínez Ma. De Lourdes Solís
PROGRAMACIÓN PARALELA Tema 5: Análisis de algoritmos paralelos
Estructuras en C++ Roger Morera Fallas.
CICLOS EN C – PARTE 2.
Programación II Ing. Diego J. Arcusin 3 – Uso del Shell.
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Bucle for.
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
POO Santiago, Mayo 2004 TRABAJO DE INVESTIGACIÓN POO Programación Orientada a Objetos CENAFOM Carolina Bravo V. Jaime Jofré B.
Alineación de textos.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Los condicionales IF en PHP Programación en Internet II.
Programas Son una serie o secuencia de instrucciones entendibles por los ordenadores que permiten la realización de las acciones o tareas para las que.
Estructuras de Repetición
Funciones en lenguaje C
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
El lenguaje de programación C - Funciones -
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
La locura es hacer una y otra vez lo mismo pensando que se obtendrán resultados distintos TOM RUSSELL Seminario Internacional Formación Inicial de Profesores.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
CORPOCIDES Ing. Emilio Medina Baquero
TÉCNICO EN PROGRAMACIÓN DE SOFTWARE Instructor: Ingeniero Adrián Guerrero Taborda
Grado en Ingeniería electrónica y comunicaciones Facultad de Físicas Universidad Complutense P1 Fundamentos de Programación.
Ingeniero Anyelo Quintero
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Programación en Matlab
Unidad III Administración de procesos
Control de flujo: Bucles
Capítulo 1 “Elementos de Programación”
Programación de Memoria Compartida
Un programa no es nada mas que una serie de instrucciones dadas al ordenador en un lenguaje entendido por el, para decirle exactamente lo que queremos.
Como comunicar 2 procesos emparentados
Particionado de discos duros
!¡Animaciones¡! Escobar cañaveral dennys Estefanía Luisa fda Miranda Henao 11*
Escribimos google.com DIRECCIÓN Elegimos Nombre Contraseña.
Estructuras de Control.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
PROBLEMA DE MATEMÁTICAS (Polinomios, 3º ESO, Tema 5)
CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO
1 Temas a tratar Metiendo datos. (2) Como reservar un documento que no queremos que aparezca en informes. (3) Metiendo datos de forma eficaz.(4-5) Búsquedas:
Metodología de la programación
Unidad 2 – Gestión de Procesos
Vamos a tratar algunos temas que es necesario conocer a la hora de administrar un sistema informático y que nos van a ser útiles sin importar el sistema.
PHP con Bases de Datos Tema 5 Funciones Introducción Valor de una Función Función para obtener fecha actual. Documentación de Funciones Funciones de Usuario.
Microsoft Office Project INTRODUCCIÓN A LA GESTIÓN DE PROYECTOS Microsoft Office Project 2010.
Práctica Profesional PHP.
Introducción al lenguaje PROCESSING para ARDUINO
Pixelación de imágenes avanzada usando el algoritmo slic
Ejemplos de malas diapositivas
Estructuras de Decisión
Manual PHP Básico Camilo Cartagena.
Programas Son una serie o secuencia de instrucciones entendibles por los ordenadores que permiten la realización de las acciones o tareas para las que.
Estructura de una nota de análisis.. Propuesta es el título y el primer párrafo. Se presenta lo que se va a tratar de la forma más clara para el lector/oyente.
TUTORIAL: CREACIÓN DE UN LIBRO DIGITAL CON CALAMEO
(totalmente inventado)
Desarrollador Profesional de Juegos Programación III Unidad II Introdución a threading en windows.
¿Qué es una plataforma educativa virtual? Se entiende por plataforma educativa como un sitio en la Web, que permite a un profesor contar con un espacio.
Desarrollador Profesional de Juegos Programación III Unidad II introducción a Mutex Secciones críticas.
Universidad Autónoma del Estado de México Programación Estructurada
2015-BM5A. Introducción Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos.
Cuando terminemos nuestra presentación, en finalizar película, pinchamos en guardar en el equipo.
Helpers en ASP.NET MVC3. Introducción Los helpers son una herramienta muy potente para generar nuestro propio código HTML dentro de las vistas. Los helpers.
Helpers en ASP.NET MVC3. Introducción Los helpers son una herramienta muy potente para generar nuestro propio código HTML dentro de las vistas. Los helpers.
Transcripción de la presentación:

Ejemplo: Creación y mutación de procesos PASO1: Mirar la presentación y entenderla PASO2: Mirar el programa PASO 3: PROBADLO!!! PASO 4: Intentad hacerlo vosotros

¿Qué queremos hacer? Tenemos un simulador de cache que recibe un fichero con una traza de entrada y unos parámetros Queremos hacer 1000 simulaciones, para una misma entrada, modificando un parámetro Guardamos la salida en un fichero para procesarlo luego

Opción 1 echo “simulacion 1 “ > simulador.out simula f 1 >> simulador.out echo “simulacion 2 “ > simulador.out simula f 2 >> simulador.out echo “simulacion 3 “ > simulador.out simula f 3 …. simula f 1000

Opción 2 Aplicamos lo que aprenderemos aquí Cada línea de las que hemos puesto en el ejemplo es un proceso nuevo que ejecuta un binario concreto con unos parámetros concretos Podemos automatizarlo muy fácilmente !!! # simula.aut fichero valor_inicial valor_final > simula.out

Paso 1: Análisis del problema Nuestro problema tiene 2 parámetros: El fichero de entrada  fijo para todas las simulaciones Un rango de valores a simular: el incremento entre un valor y otro asumiremos que será fijo, pero podría ser un tercer parámetro El nombre del binario no es un parámetro, asumimos que lo conocemos

Paso 1: Análisis del problema Para cada valor del parámetro (1..1000) hemos de hacer: Escribir un mensaje indicando que simulación vamos a hacer Ejecutar el simulador con los parámetros que toquen Lógicamente, esto es un bucle “echo” para escribir el mensaje “simulador” para ejecutar el simulador Hemos de modificar el parámetro en cada iteración

Paso 2: Estructura problema Inicialización Hemos de pensar si hay que hacer algo antes del bucle Cuerpo del problema (bucle) Hemos de pensar si hay que hacer algo después del bucle De x=valor_inicial…X=valor_final echo “simulación x “ >> simulador.out simula f X >> simulador.out

Paso 3: ¿Cómo se traduce esto? Si nuestro programa se ejecuta como: Formato: sim.aut trace_file x_incial x_final EJ: sim.aut f.traza 1 1000 ¿Qué hay que hacer antes del bucle? ( a veces nada ) Preparar los parámetros del bucle. Los parámetros se reciben como “string”, y para usarlo en el bucle ha de ser “int”

Paso 3: ¿Cómo se traduce esto? ¿Qué hemos de plantearnos en el bucle? ¿Cuántos procesos hay que crear en cada iteración? ¿Qué tiene que hacer cada proceso nuevo? ¿Debe mutar o no? ¿Quien debe iterar? Dependiendo de quien itere (padre/hijos) se crean jerarquías distintas ¿Los procesos que creamos se ejecutan de forma secuencia o concurrente ? ¿Hay que añadir algún otro tipo de sincronización? En este caso 2, uno para hacer el echo y otro para hacer la simulación NO, pero hay que tener en cuenta que han de ser secuenciales dentro De cada iteración y ENTRE ITERACIONES (por el mismo motivo) En este caso si, ya que hemos de usar dos binarios que ya existen, Es lo más sencillo al menos En este caso el padre (proceso inicial), es más sencillo y no Aportaría nada que fuera alguno de los hijos Secuencial significa que hay que esperar que uno termine para empezar el otro. Concurrente significa que se ejecutan “a la vez” . En este caso han de ser secuenciales, ya que la salida va al mismo fichero y se Mezclarían los resultados

Paso 3: ¿Cómo se traduce esto? ¿Hay que hacer algo después del bucle? En este caso no.

Antes de empezar… En este punto no hemos trabajado el tema de entrada/salida, así que la forma de gestionar el enviar los datos a un fichero lo haremos aprovechando lo que nos ofrece la shell, ejecutando el fichero de la siguiente forma: sim.aut f.traza 1 1000 >> simula.out

Podéis verlo completo y probarlo en: Como sería el código Podéis verlo completo y probarlo en: http://docencia.ac.upc.edu/FIB/grau/SO/enunciados/ejemplos/ejemplo_simulador.tar.gz

Antes del bucle Hemos de “coger” los parámetros, están en argv y convertir formatos cuando sea necesario argv[0] simula.aut (no lo necesitamos) argv[1] nombre del fichero con la traza argv[2]x_inicial (string  int) x_inicial=atoi(argv[2]) argv[3]x_final (string  int) x_final=atoi(argv[3])

El bucle IDEA (primero pensamos y luego pasamos a llamadas a sistema) for (sim=x_inicial;sim<=x_final;sim++){ // ECHO: Creamos proceso // ECHO: El nuevo proceso muta // ECHO: El padre espera que acabe // SIMULADOR: Creamos nuevo proceso // SIMULADOR: El nuevo proceso muta // SIMULADOR: Esperamos que acabe }

ECHO: Creación y Mutación Al crear un proceso (fork) ejecuta el mismo código que su padre, si queremos que haga otra cosa hay que ponerlo explícitamente  Añadir un condicional Si queremos que un proceso cambie su binario, hay que ponerlo explícitamente (execlp) CUIDADO: Los parámetros del execlp son todos STINGS !!!!!! Si queremos controlar el final del nuevo proceso  hay que ponerlo explícitamente (waitpid)

Código char buff[64]; ret=fork(); // creación // condicional, sólo el hijo tiene ret==0 if (ret==0){ //Mutamos sprintf(buff,”%d”,sim); execlp(“echo”,”echo”, “simulacion”, buff,(char *)NULL); }else (if (ret<0){ // caso error control_error(“fallo fork”); }else{ // esperamos fin hijo waitpid(-1,NULL,0); }

¿Que pasa al ejecutar? ret=fork(); if (ret==0){ }else (if (ret<0){ waitpid(-1,NULL,0); // bloqueado } ret=fork()  el Hijo “aparece” aqui if (ret==0){ sprintf(buff,”%d”,sim); execlp(“echo”,”echo”, “simulacion”, buff,(char *)NULL); /// ejecucion echo /// ejecucion echo…. FIN T iempo PADRE HIJO

Bucle (simplificado) for (sim=x_inicial;sim<x_final;sim++){ ret=fork(); if (ret==0){ execlp (“hecho”….); } waitpid(…) execlp (“simulador”….);

Jerarquía de procesos Todos los procesos son hijos del proceso inicial, cada iteración son 2 procesos nuevos P.Inicial Echo 0(sim=x_inicial) Simulador 0 (sim=x_inicial) Echo 1 (sim=x_iinicial+1) Simulador 1 (sim=x_inicial+1) … Hino N (sim=(x_final-1))