bloque i: principios de sistemas operativos bsicos de los sistemas operativos tema 2. concurrencia

Download Bloque I: Principios de sistemas operativos bsicos de los sistemas operativos Tema 2. Concurrencia

Post on 29-Oct-2018

212 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 1FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Bloque I: Principios de sistemas operativosTema 1. Principios bsicos de los sistemas operativosTema 2. ConcurrenciaTema 3. FicherosTema 4. Sincronizacin y programacin dirigida por eventosTema 5. Planificacin y despachoTema 6. Sistemas de tiempo real y sistemas empotradosTema 7. Gestin de memoriaTema 8. Gestin de dispositivos de entrada-salida

    2

    GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 2FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Notas:

    Tema 2. Concurrencia Introduccin a la programacin concurrente Creacin e identificacin de procesos. Ejecucin de programas. Terminacin de procesos y espera a la terminacin. Threads: conceptos bsicos Creacin de threads y manipulacin de sus atributos. Terminacin de threads. Identificacin de threads.

  • GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 3FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    1. Introduccin a la programacin concurrenteMuchos problemas se expresan de forma natural mediante varias actividades concurrentes: sistemas de control atendiendo a mltiples subsistemas y

    eventos sistemas multicomputadores o distribuidos para el uso concurrente de mltiples recursos

    La concurrencia implica prever la sincronizacin: para la utilizacin de recursos y datos compartidos y para el intercambio de eventos e informacin

    GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 4FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    DefinicionesUn flujo de control o thread es una secuencia de instrucciones de programa.

    Un programa concurrente es aquel con mltiples flujos de control, que generalmente cooperan entre s.

    Los flujos de control se llaman procesos, tareas, o threads, dependiendo del contexto.

    A veces, dos o ms flujos de control requieren un orden particular para sus operaciones: sincronizacin.

    Para ejecutar un programa concurrente se necesita un planificador que gestione cundo se ejecuta cada flujo de control y qu recursos del sistema pueden usar.

  • GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 5FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Ejemplo: Control de un AutomvilActividades a controlar:

    Medida deVelocidad

    Control deInyeccin

    Control deFrenos ABS

    C=4 ms.T=20 ms.

    C=10 ms.T=40 ms.

    C=40 ms.T=80 ms.

    D=5 ms. D=40 ms.

    D=80 ms.

    C = Tiempo de ejecucinT = PeriodoD = Plazo mximo de finalizacin

    GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 6FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Ejemplo: solucin cclicaUna solucin cclica implica partir la actividad ms larga en varias partes:

    40

    14

    20

    24

    4044

    54

    60

    64

    76

    VELO

    C

    ABS

    VELOC

    VELO

    C

    VELOC

    FUEL-1

    FUEL-2ABS

    FUEL-3

    FUEL-4

    6

    16

    6

    12otras tareas sin requisitos temporales

  • GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 7FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Ejemplo: solucin concurrenteLa solucin concurrente es ms fcil de disear y modificar:

    Medida de la velocidad

    loop Medida_Velocidad; next:=next+0.02; Sleep_until next;end loop;

    Control de frenos ABS

    loop Frenos_ABS; next:=next+0.04; Sleep_until next;end loop;

    Control de inyeccin

    loop Inyeccion_Fuel; next:=next+0.08; Sleep_until next;end loop;

    Actividades sin requisitos temporales

    loop hacer clculos; ...end loop;

    GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 8FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Ejemplo: mantenimientoSuponer que necesitamos ejecutar una actividad aperidica que tiene 1ms de tiempo de ejecucin. El tiempo mnimo entre llegadas es de 80 ms, pero el plazo es de 20 ms:1. Solucin cclica:

    - Muestrear al menos cada 19 ms para ver si hay que ejecutar- Esto implica partir ABS y FUEL en varios trozos cada uno

    2. Solucin concurrente:- Aadir un nuevo proceso con alta prioridad y repetir el anlisis de

    planificabilidad- No se necesitan modificaciones al cdigo existente.

  • GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 9FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Declaracin de procesos: soporte en el lenguajeAlgunos lenguajes tienen instrucciones especiales para crear procesos concurrentes: instruccin estructurada: cobegin, coend (Pascal Concurrente) instruccin de bifurcacin: fork declaracin de un objeto de la clase proceso en la parte

    declarativa del programa (Ada) creacin dinmica de un objeto de la clase proceso (Java)

    GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 10FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Declaracin de procesos: soporte en el sistema operativoCuando la concurrencia no est soportada en el lenguaje se pueden usar servicios de un sistema operativo: operacin de bifurcacin: fork crea una copia del proceso

    padre; posteriormente la copia puede ejecutar otro programa (exec)

    operacin spawn: se crea un nuevo proceso concurrente que ejecuta el programa o funcin indicados

  • GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 11FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Estados de un proceso

    Creado No existente

    Terminado

    Bloqueado

    Activo

    Ejecutando

    Opcional

    GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 12FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    2. Creacin e identificacin de procesosIdentificador de proceso (pid): es un entero positivo que identifica a un proceso

    Parentesco de procesos: el padre de un proceso es el proceso que lo creo los procesos creados por el padre son hijos de ste

  • GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 13FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Estructura de un proceso en C

    Kernel

    Proceso de usuario

    Rutina C deInicializacin

    funcin maindel usuario

    funciones delusuario

    Rutina C exit

    Rutina C _exit

    Llamadaal sistema

    exec

    GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 14FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Ejemplo de un programa C// El programa muestra en pantalla todos sus argumentos#include

    int main (int argc, char *argv[]){

    int i;

    // Print all the argumentsfor (i=0;i

  • GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 15FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    La llamada forkLa llamada fork crea un nuevo proceso (hijo) que es una copia exacta del padre, excepto por lo siguiente: el pid del hijo es diferente el hijo tiene su propia copia de los descriptores de fichero, que

    apuntan a las mismas descripciones de fichero que en el padre el hijo no hereda:

    - alarmas- temporizadores- operaciones de I/O asncronas

    El hijo hereda el estado del padre (incluyendo el PC), sus semforos, objetos de memoria, poltica de planificacin, etc.

    GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 16FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    La llamada fork (cont.)Interfaz:

    #include #include pid_t fork (void);

    Retornos: fork devuelve al proceso hijo un cero fork devuelve al proceso padre el pid del hijo en caso de error, devuelve -1, no crea el hijo, y la variable errno

    se actualiza al valor asociado al error

    Llamadas para identificacin del proceso:pid_t getpid(void); pid_t getppid(void);

  • GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 17FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Ejemplo de uso de fork// El proceso crea un hijo; padre e hijo muestran pids#include #include #include

    int main(){

    pid_t childpid;

    if ((childpid=fork()) == -1) {perror("cant fork"); exit(1);

    } else if (childpid == 0) {// child processprintf("child: own pid = %d, parent pid = %d\n",

    getpid(), getppid()); //the parent may be deadexit(0);

    } else {

    GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 18FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Ejemplo de uso de fork (cont.)// parent processprintf("parent: own pid = %d, child pid = %d\n",

    getpid(), childpid);exit(0);

    }}

  • GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 19FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    3. Ejecucin de un programa: execLa familia de llamadas exec sustituyen la imagen de proceso actual por una nueva imagen de proceso, que se halla en un fichero

    Cuando la nueva imagen de proceso es un programa C, debe tener la siguiente funcin:

    int main (int argc, char *argv[]);

    Los parmetros corresponden a los argumentos en la llamada

    Asimismo, la siguiente variable contiene un puntero a un array de punteros que apuntan a los strings de entorno:

    extern char **environ;

    La llamada a exec slo retorna en caso de error

    GRUPO DE COMPUTADORES Y TIEMPO REAL Michael Gonzlez, J. Javier Gutirrez 20FACULTAD DE CIENCIAS 21/feb/11

    UNIVERSIDADDE CANTABRIA

    Ejecucin de un fichero: exec (cont.)Los descriptores de ficheros abiertos en el proceso original con

Recommended

View more >