Professional Documents
Culture Documents
Semforos en Linux II
Gamaliel Santos Del Carpio Instituto Tecnolgico de Tuxtla Gutirrez Ingeniera en Sistemas Computacionales
santosdcarpio@hotmail.com
El programa anterior est desarrollado en C, para Linux, este programa con la funcin fork () crea una copia del cdigo para ejecutar dos procesos uno padre y otro hijo, el
objetivo de este programa es sincronizar la ejecucin de los procesos, con la ayuda de semforos, 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 semforos para el proceso padre y el proceso hijo, cuando el fork (), crea los procesos el semforo del proceso hijo se pone en verde y deja que se escriba el mensaje en el archivo, 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.
Supongamos que el primer proceso termina de escribir el fichero. Al acabar con el fichero debe de incrementar el contador del semforo. Al hacerlo, el contador se pone en 0. Como no es negativo, el semforo se encarga de mirar a la cola de procesos pendientes y desbloquear el primer proceso de dicha cola. Con ello, el segundo proceso que quera acceder al fichero contina su ejecucin a y accede al fichero. Cuando este proceso tambin termine con el fichero, incrementa el contador y el semforo vuelve a ponerse en 1, a estar en verde. Es posible que el valor inicial del semforo no sea uno, sea n, en este caso se dejaran pasar a la primera n procesos que lo intenten. Tambin pueden quedar a su vez muchos procesos encolados simultneamente, en este caso el contador quedar con un nmero negativo muy grande.
2.- Semforos
Un Semforo es un mecanismo que previene las coaliciones que se producen cuando dos o ms procesos solicitan al mismo tiempo el uso de un recurso que deben de compartir. El funcionamiento del semforo es como el de un variable contador. Imaginemos que el semforo 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 semforo. El contador queda en cero y como no es negativo, deja que el proceso siga su ejecucin y, por tanto, accede al fichero. Ahora un segundo proceso lo intenta y para ello tambin debe decrementar el contador. Esta vez el contador se pone a -1 y como es negativo, el semforo se encarga de que el proceso quede bloqueado y dormido en una cola de espera. Este segundo proceso no continuar por tanto su ejecucin y no acceder al fichero.
anteriormente, el segundo parmetro es el ndice del semforo que queremos inicializar dentro del array de semforos obtenido. Si se pide un semforo esta parmetro ser 0, el tercer parmetro indica qu queremos hacer con el semforo, el cuarto parmetro se le asigna 1 si queremos que este en verde y 0 si lo que se necesita es que est en rojo.
6 de primaria. La pgina 50 del primer libro es compartida por el segundo, pero puede que no corresponda con el nmero de pgina 50, sino que est en la pgina 124. Sin embargo la pgina es la misma, a pesar de que no est en el mismo sitio dentro del direccionamiento de cada proceso. Los accesos a segmentos de memoria compartida son controlados, como ocurre con todos los objetos IPC System V, y se hace un chequeo de los permisos y credenciales para poder usar dicho segmento. Sin embargo, una vez que el segmento de memoria est siendo compartido, su acceso y uso debe ser regulado por los propios procesos que la comparten, utilizando semforos u otros mecanismos de sincronizacin.
7.- Conclusin
A veces es necesario que dos o ms procesos accedan a un recurso en comn (escribir en un mismo fichero, leer la misma zona de memoria, escribir en la misma pantalla, etc.). El problema es que si lo hacen simultneamente y de forma incontrolada, puede destruir uno la operacin del otro (y dejar el fichero o la memoria con un contenido inservible o la pantalla ilegible). Para evitar este problema estn los semforos. Un semforo de acceso al recurso a uno de los procesos y se lo niega a los dems mientras el primero no termine. Un semforo es un recurso compartido con el que cuenta UNIX para comunicacin entre procesos. En este ejercicio de programacin en el tiempo que se desarroll, se not la diferencia de cuando el cdigo usaba semforos y cuando no lo haca. Cuando no se usaban semforos no se tena el control de los procesos, no se saba que proceso iniciaba primero y que proceso terminaba al ltimo. Se generaban errores por
que el problema exige que primero se le otorgue el recurso necesario al proceso hijo. Si no se aplicaba una programacin cuidadosa el programa iniciaba por el proceso padre, pero si esto sucede no tomar el valor adecuado para realizar la tarea, porque primero necesita que proceso hijo termine para dejar un valor en el archivo. Cuando se utilizaron los semforos de alguna manera se forz al proceso hijo a ejecutarse primero y no dejar que el proceso padre iniciar hasta que el hijo terminar, entonces no se puede producir un error semejante al del primer caso. Otra ventaja muy notoria es la sincronizacin cuando no usbamos semforos se podan ejecutar dos procesos padre y tres hijos o sea, que no exista alternancia entre procesos, surgiran errores suponiendo que se ejecuta una vez el proceso hijo y luego el padre y despus otra vez el padre, pasara casi lo mismo que en el primer caso citado, el proceso padre al ejecutarse tomara un valor inesperado, porque el proceso hijo nunca escribi el valor correspondiente. Y si fuera lo contrario, el proceso padre se quedara sin imprimir un valor porque el hijo se ejecutara dos veces la primera pondra un valor en el archivo y como se ejecuta nuevamente sin que el padre imprima, sobrescribe el archivo y borra el archivo generado en el proceso anterior. Con los semforos nosotros sincronizamos los procesos y hacemos que se ejecuten los procesos en el orden, proceso hijo proceso padre proceso hijo proceso padre y as hasta terminar el programa.
Referencias
[1] Control de Procesos: <stdlib.h>, <unistd.h>, rescatado Septiembre 21, 2011, de http://www.fismat.umich.mx/mn1/manual/node 21.html
[6] [Oreilly] Daniel P. Bovet, Marco Cesati, Understanding Understanding The Linux Kernel The Linux Kernel. 3rd 3rd Edition Edition. O'Reilly Media, Inc., 2005. ISBN: 0-59600565-2 [[INSIDE INSIDE]] Tigran Aivazian Tigran Aivazian, Dentro Dentro del n del nucleo ucleo Linux 2.4. 3rd Edition. Proyeto Lucas, 2001.