Prácticas de Sistemas operativos



Documentos relacionados
Prácticas de Sistemas operativos

Memoria compartida y semáforos r/w. La página del manual que podría servir para describir estas funciones es la siguiente:

Prácticas de Sistemas Operativos

Los semáforos en Unix

Parte Práctica Adicional del Coloquio o Examen Final de Sistemas Operativos 2014.

Prácticas de Sistemas Operativos

Prácticas de Sistemas operativos

Sistemas Operativos Ingeniería de telecomunicaciones Sesión 3: Concurrencia

Sistemas Operativos I. Enxeñería Informática. Curso 2007/08. Práctica 2: Concurrencia de procesos: Productores/Consumidores.

Sistemas Operativos Práctica 4

SISTEMAS OPERATIVOS I. CURSO 2010/11. PRÁCTICA 2: Problema de los Productores/Consumidores (concurrencia de procesos)

Mecanismos IPC System V

Memoria Compartida. Llave de acceso. Segmento Compartido. estructura definida en A. estructura definida en B. Proceso B. Proceso A

Sistemas Operativos. Eloy Anguiano Rey Rosa M. Carro Ana González

Se guardan en archivos con extencion c y los cabezales con extension h

Mensajes. (versión preliminar)

LENGUAJE. Tema 1 - Introducción

Práctica 2. Teoría. Memoria Compartida y Semáforos

Examen de Fundamentos de sistemas distribuidos

Monitores Ing. Iván Medrano Valencia

PRÁCTICAS DE APLICACIONES DISTRIBUIDAS EN EQUIPO. Introducción: Cada práctica con lleva una previa investigación, la cual debe realizar cada equipo.

PROGRAMACIÓN CON LLAMADAS AL SISTEMA POSIX (INTRODUCCIÓN A LA PROGRAMACIÓN CON UNIX/LINUX)

Programación Concurrente en Java

PROGRAMACIÓN EN JAVA

Comunicación entre Procesos

Computación de Alta Performance Curso 2009 PROGRAMACIÓN PARALELA EN LENGUAJE C

Sistemas Operativos Ingeniería de telecomunicaciones Sesión 2: Procesos e hilos (modificado 29/10)

Gestión de procesos en UNIX

Universidad de Pamplona Materia: Programación 1 Docente: Ing. Lusbin Raúl Vargas LENGUAJE C ESTRUCTURA DE UN PROGRAMA EN C

SISTEMAS OPERATIVOS AVANZADOS

Se ha desarrollado el siguiente programa principal. Se pide: arquitectura que permita una fácil extensión

Prácticas de Sistemas operativos

Sistemas Operativos Práctica 3

Semáforos. Eloy García Martínez Lorena Ascensión Olivero

Sistemas Operativos I Manual de prácticas

Concurrencia. Primitivas IPC con bloqueo

1 (2 5 puntos) Responda con brevedad y precisión a las siguientes preguntas:

Prácticas de Sistemas operativos

Benemérita Universidad Autónoma del Estado de Puebla

SOLUCION EXAMEN junio 2006

UNIVERSIDAD AUTONOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERIA MANUAL DE PRACTICAS DE APLICACIONES DISTRIBUIDAS

Benemérita Universidad Autónoma del Estado de Puebla

Examen de Fundamentos de sistemas operativos

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar

Tema 3. Monitores Programación Concurrente

Boletín 5- Señales. Departamento de Lenguajes y Sistemas Informáticos

Tema 5 Sentencias de control de flujo. Fundamentos de Informática

Mensajes. Interbloqueo

El lenguaje de Programación C. Fernando J. Pereda

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos

SOLUCIONES A ALGUNOS DE LOS EJERCICIOS DE SINCRONIZACION Y COMUNICACION ENTRE PROCESOS

SALIDAS ANALÓGICAS. Adquisición de datos y acondicionamiento de la señal Tema 6

Práctica 1 Programación de Aplicaciones Distribuidas: Sockets UDP. Laboratorio de Comunicación de Datos ITT Telemática Septiembre 2011

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

INSTITUTO POLITECNICO NACIONAL. ESCUELA SUPEIRIOR DE INGENIERIA MECANICA Y ELECTRICA. UNIDAD CULHUACAN. INTEGRANTES: FLORES ACOLTZI ONESIMO

Examen escrito de Programación 1

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8.

MC Hilda Castillo Zacatelco PROCESOS

Curso LINUX. AREA 1: Intercomunicación

LECCIÓN 23: SEMÁFOROS

Sistemas Operativos (prácticas) E.U. Informática en Segovia Universidad de Valladolid

3.- Procesos. Concepto de Proceso. Despacho (calendarización) de Procesos. Operaciones en Procesos. Procesos en cooperación

Ejercicio 1 (2 puntos. Tiempo: 25 minutos)

Unidad III El lenguaje de programación C

1 HILOS (THREADS) EN JAVA

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

EXAMEN PARCIAL 23 de Octubre de 2015 Programación I. Grado en Matemáticas e Informática ETSIINF UPM

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

Programando con memoria unificada. Contenidos [15 diapositivas] Aportaciones de la memoria unificada. I. Descripción

Punto muerto-interbloqueo

Tema 2: La clase string

Sistemas operativos. Hasta ahora hemos visto. Relación programa-sistema operativo Gestión de memoria

Tema 3: Concurrencia de procesos

TIPOS DE DATOS DEFINIDOS POR EL PROGRAMADOR: Estructuras CONTENIDOS

Alicia Serrano Sánchez, Francisco Sánchez Molina, David Villa Alises, Felix Jesús Villanueva Molina y Juan Carlos López López

Introducción a la programación orientada a objetos

Instituto Politécnico Nacional

PRÁCTICAS DE SS.OO. Universidad de Murcia. I.I./I.T.I. Sistemas/I.T.I. Gestión

! " # " # & ' '()*+ 0" #*

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

Ingeniería Informática. Curso 3º. Sistemas Operativos Examen Final. TEORIA. 4 de Septiembre de 2009

BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN

Transcripción:

Prácticas de Sistemas operativos David Arroyo Guardeño Escuela Politécnica Superior de la Universidad Autónoma de Madrid Octava semana: semáforos

1 Cronograma semanal 2 Introducción 3 Ejemplo 1 4 Ejemplo 2 5 Ejemplo 3 6 Referencias

Tercera práctica 1 Memoria compartida: ejercicio 2 2 Semáforos: ejercicios 4 y 5 3 Ejercicio final: ejercicios 6 y 7 (opcional) Jueves 3 abril

Semáforos Mecanismo para implementar sincronización Número entero: si se intenta hacer menor que cero, el proceso queda en espera Biblioteca sem.h man semget semop semctl

main ( ) { i n t sem id, i ; struct sembuf sem oper ; union semun{ i n t val ; struct semid ds semstat ; unsigned short array ; arg ; sem id = semget (SEMKEY,N SEMAFOROS, IPC CREAT IPC EXCL SHM R SHM W) ; i f ( sem id== 1){ p e r r o r ( semget. ) ; e x i t ( errno ) ; i f (N SEMAFOROS<2){ f p r i n t f ( s t d e r r, El numero de semaforos ha ser mayor que dos\n ) ; e x i t ( 0 ) ; arg. array = ( unsigned short ) malloc ( sizeof ( short ) N SEMAFOROS) ; for ( i =0; i<n SEMAFOROS; i ++) arg. array [ i ] = 1; semctl ( sem id,n SEMAFOROS,SETALL, arg ) ; sem oper. sem num = 0; sem oper. sem op = 1; sem oper. sem flg = SEM UNDO; semop ( sem id,& sem oper, 1 ) ; sem oper. sem num = 1; sem oper. sem op = 1; semop ( sem id,& sem oper, 1 ) ; semctl ( sem id,n SEMAFOROS,GETALL, arg ) ; p r i n t f ( Los valores de l o s semaforos son [%d, arg. array [ 0 ] ) ; for ( i =1; i<n SEMAFOROS; i ++) p r i n t f (,%d, arg. array [ i ] ) ; p r i n t f ( ]\n ) ; semctl ( sem id,n SEMAFOROS, IPC RMID, 0 ) ; f r e e ( arg. array ) ;

Ejemplo 2: productor #define SEMKEY 76102 union semun { i n t val ; struct semid ds buf ; ushort array ; struct seminfo buf ; ; main ( ) { k e y t key = SEMKEY; i n t sem id ; union semun arg ; enum {NS,EO; s t a t i c struct sembuf sig = {0,1,SEM UNDO, wait={0, 1,SEM UNDO; s t a t i c ushort s t a r t v a l u e [ 2 ] = {0,0; i n t clock =3; i f ( ( sem id = semget ( key, 2, IPC CREAT 0666) ) == 1){ p e r r o r ( c o n t r o l : semget. ) ; e x i t ( 1 ) ; arg. array = start value ; i f ( semctl ( sem id, 0,SETALL, arg ) == 1){ p e r r o r ( c o n t r o l : semctl i n i c i a l i z a c i o n. ) ; e x i t ( 2 ) ; p r i n t f ( c o n t r o l : Estoy l i s t o.\n ) ; while ( clock ){ s i g. sem num = NS; i f ( semop ( sem id,& sig, 1 ) == 1){ p e r r o r ( c o n t r o l : semop s i g n a l. ) ;

main ( ) {... Ejemplo 2: productor arg. array = start value ; i f ( semctl ( sem id, 0,SETALL, arg ) == 1){ p e r r o r ( c o n t r o l : semctl i n i c i a l i z a c i o n. ) ; e x i t ( 2 ) ; p r i n t f ( c o n t r o l : Estoy l i s t o.\n ) ; while ( clock ){ s i g. sem num = NS; i f ( semop ( sem id,& sig, 1 ) == 1){ p e r r o r ( c o n t r o l : semop s i g n a l. ) ; e x i t ( 3 ) ; wait. sem num = EO; i f ( semop ( sem id,& wait, 1 ) == 1){ p e r r o r ( c o n t r o l : semop wait. ) ; e x i t ( 4 ) ; p r i n t f ( c o n t r o l : La c a r r e t e r a este oeste esta a b i e r t a.\n ) ; sleep ( 1 ) ; clock ; i f ( semctl ( sem id, 0, IPC RMID, 0 ) == 1){ perror ( control : semctl remove. ) ; e x i t ( 5 ) ;

... main ( ) { k e y t key = SEMKEY; i n t semid ; i n t car num =1; Ejemplo 2: consumidor s t a t i c struct sembuf sig ={0,1,SEM UNDO, wait={0, 1,SEM UNDO; enum {NS,EO; i f ( ( semid = semget ( key, 2, IPC CREAT 0666) ) == 1){ p e r r o r ( coche : semget. ) ; e x i t ( 1 ) ; while ( 1 ){ wait. sem num = NS; i f ( semop ( semid,& wait, 1 ) == 1){ p e r r o r ( coche : semop wait. ) ; e x i t ( 2 ) ; p r i n t f ( coche : La c a r r e t e r a norte sur esta a b i e r t a.\n ) ; sleep ( 1 ) ; p r i n t f ( coche : Coche %d paso.\n, car num ++) ; s i g. sem num = EO; i f ( semop ( semid,& sig, 1 ) == 1){ p e r r o r ( coche : semop s i g n a l. ) ; e x i t ( 3 ) ;

Ejemplo 3: productor #define SHMKEY 6723 #define SEMKEY 7543 #define NUMPEDIDOS 10 union semun { i n t val ; struct semid ds buf ; ushort array ; struct seminfo buf ; ; main ( ) { k e y t key= SHMKEY; k e y t key2 = SEMKEY; i n t shmid ; i n t sopa = 0; i n t orden = NUMPEDIDOS; i n t sem id ; union semun arg ; enum {COOK, PICK; s t a t i c struct sembuf cook = {0,1,SEM UNDO, pick = {0, 1,SEM UNDO; s t a t i c ushort s t a r t v a l u e [ 2 ] = {0,0; i f ( ( sem id = semget ( key2, 2, IPC CREAT 0666) ) == 1){ p e r r o r ( cocina : semget. ) ; e x i t ( 1 ) ; arg. array = start value ; i f ( semctl ( sem id, 0,SETALL, arg ) == 1){ p e r r o r ( cocina : semctl i n i c i a l i z a c i o n. ) ; e x i t ( 2 ) ;

Ejemplo 3: productor main ( ) {... i f ( ( shmid = shmget ( key,50,0600 IPC CREAT ) ) == 1) { p e r r o r ( cocina : shmget ) ; e x i t ( 1 ) ; sopa = ( i n t )shmat ( shmid, ( char ) 0,0) ; i f ( sopa == ( i n t ) 1) { p e r r o r ( cocina : shmat ) ; e x i t ( 2 ) ; p r i n t f ( Cocinero : He empezado a hacer l a sopa.\n ) ; while ( orden ) { sleep ( 1 ) ; ( sopa ) ++; cook. sem num = COOK; i f ( semop ( sem id,& cook, 1 ) == 1){ p e r r o r ( cocina : semop cook. ) ; e x i t ( 3 ) ; pick. sem num = PICK ; i f ( semop ( sem id,& pick, 1 ) == 1){ p e r r o r ( c o n t r o l : semop wait. ) ; e x i t ( 4 ) ; p r i n t f ( Oido cocina... \ n ) ; orden ; p r i n t f ( Cocinero : Se acabo el tiempo. He preparado %d platos de sopa. Quedan %d sin recoger.\n,numpedidos, sopa ) ; shmctl ( shmid, IPC RMID, ( struct shmid ds ) 0) ; i f ( semctl ( sem id, 0, IPC RMID, 0 ) == 1){ p e r r o r ( cocina : semctl remove. ) ; e x i t ( 5 ) ; e x i t ( 0 ) ;

void manejador ( ) { e x i t ( 0 ) ; main ( ) { void signal catcher ( ) ; k e y t key = SHMKEY; key t key sem = SEMKEY; i n t shmid ; i n t sopa ; Ejemplo 3: consumidor i n t sem id ; s t a t i c struct sembuf cook ={0,1,SEM UNDO, pick={0, 1,SEM UNDO; enum {COOK, PICK; i f ( ( sem id = semget ( key sem, 2, IPC CREAT 0666) ) == 1){ p e r r o r ( camarero : semget. ) ; e x i t ( 1 ) ; sigset (SIGALRM, manejador ) ; alarm ( 30) ; i f ( ( shmid = shmget ( key,50,ipc CREAT 0600) ) == 1) { p e r r o r ( shmget ) ; e x i t ( 1 ) ; i f ( ( sopa = ( i n t )shmat ( shmid, 0, 0 ) ) ==( i n t ) 1) { p e r r o r ( shmat ) ; e x i t ( 2 ) ; while ( 1 ){ pick. sem num = COOK; i f ( semop ( sem id,& pick, 1 ) == 1){ p e r r o r ( camarero : semop pick. ) ; e x i t ( 2 ) ; ( sopa ) ; p r i n t f ( Camarero : p l a t o recogido\n ) ; sleep ( rand ( ) %2+1) ; p r i n t f ( Camarero : un nuevo p l a t o de sopa, cocina!!! \ n ) ; cook. sem num = PICK ; i f ( semop ( sem id,& cook, 1 ) == 1){ p e r r o r ( camarero : semop cook. ) ; e x i t ( 3 ) ;

Referencias Francisco M. Márquez. Unix, Programación Avanzada. Editorial: Ra-Ma. 3 a Edición. ISBN: 84-7897-603-5