tareas

Páginas: 7 (1519 palabras) Publicado: 7 de octubre de 2013
Curso de “Sistemas Operativos”
Agosto – Diciembre 2012
Semáforos en Linux II

1.- Código del Programa en C para Linux






El programa anterior está desarrollado en C, para Linux, este programa con la función fork () crea una copia del código para ejecutar dos procesos uno padre y otro hijo, el objetivo de este programa es sincronizar la ejecución de los procesos, con la ayuda desemáforos, para que el inicio forzosamente sea con el proceso hijo lo que hace este proceso es realizar la escritura de un archivo, y el proceso padre imprime en pantalla el resultado.
Al inicio del programa se crean los semáforos para el proceso padre y el proceso hijo, cuando el fork (), crea los procesos el semáforo del proceso hijo se pone en “verde” y deja que se escriba el mensaje en elarchivo, despues de terminar su proceso se entiende que libera y cambia el semaforo a rojo lo cual permite al semaforo del padre ponerse en verde y poder ejecutarse, al terminar el padre tambien libera y su semaforo se pone en rojo y el proceso hijo realiza el mismo procedimiento hasta completar el ciclo.

2.- Semáforos
Un Semáforo es un mecanismo que previene las coaliciones que se producencuando dos o más procesos solicitan al mismo tiempo el uso de un recurso que deben de compartir.
El funcionamiento del semáforo es como el de un variable contador. Imaginemos que el semáforo controla un fichero y que inicialmente tiene el valor de 1 (está en “verde”). Cuando un proceso quiere acceder al fichero, primero debe decrementar el semáforo. El contador queda en cero y como no es negativo,deja que el proceso siga su ejecución y, por tanto, accede al fichero.
Ahora un segundo proceso lo intenta y para ello también debe decrementar el contador. Esta vez el contador se pone a -1 y como es negativo, el semáforo se encarga de que el proceso quede “bloqueado” y “dormido” en una cola de espera. Este segundo proceso no continuará por tanto su ejecución y no accederá al fichero.
Supongamosque el primer proceso termina de escribir el fichero. Al acabar con el fichero debe de incrementar el contador del semáforo. Al hacerlo, el contador se pone en 0. Como no es negativo, el semáforo se encarga de mirar a la cola de procesos pendientes y “desbloquear” el primer proceso de dicha cola. Con ello, el segundo proceso que quería acceder al fichero continúa su ejecución a y accede al fichero.Cuando este proceso también termine con el fichero, incrementa el contador y el semáforo vuelve a ponerse en 1, a estar en “verde”.
Es posible que el valor inicial del semáforo no sea uno, sea n, en este caso se dejaran pasar a la primera n procesos que lo intenten.
También pueden quedar a su vez muchos procesos encolados simultáneamente, en este caso el contador quedará con un númeronegativo muy grande.
3.- Pasos para Implementar un Semáforo
Obtener un array de semáforos. La función int semget (key_t, int, int) nos permite hacerlo. Se le pasa como primer parámetro la clave obtenida en el paso anterior, el segundo parámetro es el número de semáforos que se desean y el tercer parámetro son banderas.
Estas banderas permiten poner los permisos de acceso a los semáforos. Por ejemplosi ponemos 0600|IPC_CREATE indicamos un permiso de lectura y escritura para el propietario y que los semáforos se creen si no lo están, al llamar a semget () nos devuelve un identificador del array de semáforos.
Uno de los procesos debe inicializar el semáforo. La función a utilizar es int semctl (int, int, int, int). El primer parámetro es el identificador del array de semáforos obtenidoanteriormente, el segundo parámetro es el índice del semáforo que queremos inicializar dentro del array de semáforos obtenido. Si se pide un semáforo esta parámetro será 0, el tercer parámetro indica qué queremos hacer con el semáforo, el cuarto parámetro se le asigna 1 si queremos que este en “verde” y 0 si lo que se necesita es que esté en “rojo”.
4.- Uso de Semáforos
El proceso que quiera acceder a...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Tareas tareas y mas tareas
  • tareas tareas
  • Taran Taran
  • tareas tareas
  • Tareas Y Tareas
  • Mis tareas...Tus tareas
  • Tareas de Tareas
  • Tareas

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS