Tarea 3 (Final)
Tarea 3 (Final)
Tarea 3 (Final)
Tarea # 3
SISTEMAS OPERATIVOS
Investigación y exposición
INTEGRANTES
Baque Steven
Medina Julio
Reinoso Aarón
Sarmiento Joselyne
Curso
Sof-No-3-3
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
Necesaria si se desea que varios procesos puedan colaborar para realizar una misma
tarea. El SO ofrece mecanismos básicos de comunicación, que permiten transferir
cadenas de bytes. Deben ser los procesos que se comunican quienes interpreten el
significado de las cadenas transferidas para su labor coordinada. Los mecanismos de
comunicación y sincronización son dinámicos. Es decir, cuando se necesita un
mecanismo de este estilo, se crea, usa y destruye, de forma que no se establezca de
forma definitiva ningún mecanismo de comunicación, ya que ellos podrían producir
efectos indeseados. Es decir, la comunicación es algo puntual.
Los servicios básicos de comunicación son:
✓ Crear: el proceso solicita la creación del mecanismo.
✓ Enviar o escribir: el proceso emisor envía información al proceso receptor.
✓ Recibir o leer: el proceso receptor recibe información.
✓ Destruir: el proceso solicita la destrucción del mecanismo de comunicación
La comunicación puede ser síncrona y asíncrona.
✓ Síncrona: los dos procesos han de ejecutar servicios de forma simultánea. El
emisor ha de ejecutar el servicio enviar mientras el receptor ejecuta recibir.
✓ Asíncrona: el emisor hace el envío y prosigue su ejecución. El SO ofrece un
almacenamiento intermedio para guardar la información enviada, hasta que el
receptor la solicite.
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
Semáforo
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
• Count: integer
• Queue: list of processes
Cuando un proceso debe esperar por un semáforo S, él es bloqueado (block ()) y
colocado en la cola del semáforo.
La operación de signal remueve (wakeup ()) un proceso desde la cola y lo coloca en la
lista de procesos ready.
Semáforo binario
Es un indicador de condición que registra si un recurso está disponible o no. Solo
puede tener dos valore, 0 y 1. Si para un semáforo binario, S = 1 entonces el recurso
esta disponible y la tarea lo puede utilizar; si S = 0 el recurso no está disponibles y el
proceso debe esperar, esta es la forma más común de semáforo.
Semáforo general
Son semáforo que pueden tomar muchos valores positivos.
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
Tuberías
Tubería con nombre o ficheros FIFOS
Se crean invocando a la llamada al sistema mknod y pueden ser utilizadas por
cualquier proceso siempre que disponga de los permisos adecuados. La sintaxis de
esta llamada es:
resultado= mknod (ruta, modo, 0);
El parámetro de entrada ruta permite especificar el nombre del fichero FIFO. Mientras
que modo permite especificar el tipo de fichero (S_IFIFO) y los usuales permisos de
acceso. Si la llamada al sistema se ejecuta con éxito en resultado se almacenará el
valor 0, en caso contrario se almacenará el valor -1.
La comunicación por medio de tuberías se basa en la interacción
productor/consumidor, los procesos productores (aquellos que envían datos) se
comunican con los procesos consumidores (que reciben datos) siguiendo un orden
FIFO. Una vez que el proceso consumidor recibe un dato, este se elimina de la
tubería.
Si se escribe en una tubería llena, se bloquea la ejecución del proceso hasta poder
escribir. Cuando todos los procesos escritos cierran la parte de escritura, entonces se
manda un final de fichero (EOF) a los lectores.
Como mecanismo IPC, las tuberías proporcionan una forma eficiente de transferir
datos de un proceso a otro. Sin embargo, poseen algunas limitaciones importantes:
✓ Una tubería no puede ser utilizada para transmitir datos a múltiples procesos
receptores de forma simultánea, ya que al leer los datos de la tubería estos son
borrados.
Mutex
Cuando no se necesita la habilidad del semáforo de contar, algunas veces se utiliza
una versión simplificada, llamada mutex. Los mutexes son buenos sólo para
administrar la exclusión mutua para cierto recurso compartido o pieza de código. Se
implementan con facilidad y eficiencia, lo cual hace que sean especialmente útiles en
paquetes de hilos que se implementan en su totalidad en espacio de usuario.
Un mutex es una variable que puede estar en uno de dos estados: abierto
(desbloqueado) o cerrado (bloqueado). En consecuencia, se requiere sólo 1 bit para
representarla, pero en la práctica se utiliza con frecuencia un entero, en donde 0 indica
que está abierto y todos los demás valores indican que está cerrado. Se utilizan dos
procedimientos con los mutexes. Cuando un hilo (o proceso) necesita acceso a una
región crítica, llama a mutex_lock. Si el mutex está actualmente abierto (lo que
significa que la región crítica está disponible), la llamada tiene éxito y entonces el hilo
llamador puede entrar a la región crítica.
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
Por otro lado, si el mutex ya se encuentra cerrado, el hilo que hizo la llamada se
bloquea hasta que el hilo que está en la región crítica termine y llame a
mutex_unlock. Si se bloquean varios hilos por el mutex, se selecciona uno de ellos al
azar y se permite que adquiera el mutex. Como los mutexes son tan simples, se
pueden implementar con facilidad en espacio de usuario, siempre y cuando haya una
instrucción TSL o XCHG disponible.
Son elementos del POSIX para el manejo de secciones críticas y evitar que múltiples
hilos ingresen en las mismas. Las funciones más importantes para su uso son:
int pthread_mutex_init(pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock (pthread_mutex_t *mutex);
Las primeras dos funciones servirán para crear y destruir las variables para control de
la sección crítica. Las siguientes te permitirán controlar la entrada y la salida de la
sección respectivamente. Es necesario tener en cuenta si las funciones requieren
punteros o no. El siguiente ejemplo muestra la forma en que se pueden lanzar
múltiples hilos, declarando los descriptores para cada uno como arreglos. Lo anterior
permite que se inicialicen las variables, se lancen los hilos y se sincronicen mediante
ciclos for. En el ejemplo se define una función llamada proceso que recibe un puntero
a una estructura, para mostrar un dato un número de veces p.
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
Problemas de concurrencia
El peluquero dormilon
El problema consiste en una barbería en la que trabaja un barbero que tiene un único
sillón de barbero y varias sillas para esperar. Cuando no hay clientes, el barbero se
sienta en una silla y se duerme. Cuando llega un nuevo cliente, éste o bien despierta
al barbero o —si el barbero está afeitando a otro cliente— se sienta en una silla (o se
va si todas las sillas están ocupadas por clientes esperando). El problema consiste en
realizar la actividad del barbero sin que ocurran condiciones de carrera. La solución
implica el uso de semáforos y objetos de exclusión mutua para proteger la sección
crítica.
Implementacion
Se necesita:
• si un editor está modificando la base de datos, ningún otro usuario (ni editor ni lector)
debería poder acceder a ella.
Commencer_Lire:
P(M_Lect)
SI (red) ALORS
pbloque=true
V(M_Lect)
p(synch)
FIN SI
SINON
lect++;
V(M_Lect)
Este método reduce el número de lectores. Luego, si este es el último lector en salir,
permite que los editores ingresen (si es necesario).
Empiece a escribir
Commencer_Ecrire:
P(M_Red)
P(Red)
SI (red or lect>0) ALORS
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
pbloque=true
V(Red)
SINON
red=true
V(Red)
V(M_Red)
Este método que utiliza el semáforo M_Red permite garantizar que se dé prioridad a
los lectores al final de un escritor (de hecho, el final de un escritor libera el semáforo
rojo, liberando así a un posible lector, antes de liberar el semáforo M_Red).
Terminar una escritura
Finir_Ecrire:
V(Red)
V(M_Red)
Este método permite asegurar que se dé prioridad a los lectores (de hecho, liberar el
semáforo rojo libera a un posible lector antes de liberar un posible editor usando el
semáforo M_Red).
Solución con copia asincrónica de la estructura de datos
Suponga que el objetivo de los lectores es leer datos de forma asincrónica. Todos los
lectores tienen la información en el momento en que se realizó su solicitud
(posiblemente desde una máquina remota).
O un puntero de DATOS a una estructura de datos que contiene toda la información
disponible. Los editores enviarán solicitudes que se almacenarán en una cola
de ARCHIVO .
Un mutex M1 protege la siguiente estructura:
Liste de DATA : PRECEDENT
DATA : ACTUEL
DATA : PROCHAIN
booléen : MISAJOUR
Un mutex M2 protege la siguiente estructura:
File de mises à jour : FILE
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
verrouille M1:
si MISAJOUR est vrai:
enfile ACTUEL dans PRECEDENT
pour chaque élément de PRECEDENT:
effacer l'élément si son compteur de références est nul (1)
fin pour
ACTUEL := PROCHAIN (2)
PROCHAIN := copie de ACTUEL
MISAJOUR := faux
fin si
récupérer un pointeur P sur ACTUEL et incrémenter son compteur de références
déverrouille M1
lire dans P
...
décrémenter le compteur de références de P
verrouille M2:
enfiler les modifications dans FILE
si DERNIER est dépassé de 10 secondes:
verrouiller M1:
effectuer toute modification de FILE dans PROCHAIN
vider FILE
MISAJOUR:= vrai (3)
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
déverrouille M1
fin si
déverrouille M2
Observaciones
procedure producer() {
while (true) {
item = produceItem();
down(emptyCount);
putItemIntoBuffer(item);
up(fillCount);
}
}
procedure consumer() {
while (true) {
down(fillCount);
item = removeItemFromBuffer ();
up(emptyCount);
consumeItem(item);
}
}
Enunciado
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
• Varios turnos
Se establecen varios turnos. Para hacerlo más claro supongamos que cada
filósofo que puede comer (es su turno) tiene una ficha que después pasa a la
derecha. Si por ejemplo hay 7 comensales podemos poner 3 fichas en
posiciones alternas (entre dos de las fichas quedarían dos filósofos).
Se establecen turnos de tiempo fijo. Por ejemplo, cada 5 minutos se pasan las
fichas (y los turnos) a la derecha.
• Colas de tenedores
Cuando un filósofo quiere comer se pone en la cola de los dos tenedores que
necesita. Cuando un tenedor está libre lo toma. Cuando toma los dos
tenedores, come y deja libre los tenedores.
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
Visto desde el otro lado, cada tenedor sólo puede tener dos filósofos en cola,
siempre los mismos.
Introducción a interbloqueos
¿Qué se entiende por interbloqueo?
Es el bloqueo permanente de un conjunto de procesos que juntos compiten por recursos del
sistema o se comunican entre ellos.
Recursos reusables:
Recursos consumibles:
❖ Interrupciones
❖ Señales
❖ Mensajes
❖ Información en buffers de E/S
Debe ejecutarse un algoritmo que determine si el estado actual del sistema esté libre de
bloqueo y que, en caso de que no lo esté, identifique qué procesos están implicados en el
interbloqueo.
Se realiza mediante la aplicación del concepto de reducción a partir de una representación del
sistema (procesos y recursos) mediante un grafo.
Sea N = Conjunto que contiene los nodos del grafo (formado por los recursos y los procesos)
Sea A = Conjunto de las aristas que conectan a los nodos del grafo
Estado inicial
Una vez detectado el bloqueo mutuo, se debe aplicar una acción que lo elimine.
Alternativas:
Abortar
Método:
*Costo alto.
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
Exclusión mutua: Los recursos implicados deben usarse en exclusión mutua, o sea, debe
tratarse de recursos de uso exclusivo.
Solo debe conservarse par aquellos recursos que por naturaleza propia o función no pueden
compartirse.
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
No apropiativa: Los recursos no se pueden quitar, es decir, un recurso sólo puede ser liberado
voluntariamente por el proceso que lo retiene, después que haya cumplido su tarea.
Espera circular: Debe existir una cadena circular de procesos tal que cada proceso en la lista
esté esperando por uno o más recursos que tiene asignado el siguiente proceso.
man ps
– Ver ayuda del comando ps
ps aux
– Muestra todos los procesos del sistema
ps axjf
– Mostrar árbol jerárquico con la ruta del programa al que pertenece
ps -U root -u root u
– Muestra cada proceso con permiso root
top
– Informe en tiempo real
man top
– Ver ayuda del comando top
top -o %CPU
– Donde %CPU es el valor por el que vamos a ordenar los procesos
top –d 5
– Donde 5 es el número de segundos a transcurrir entre cada muestreo
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
top –u usuario
– Donde usuario es el usuario del cual queremos mostrar los procesos
htop
– Administra interactivamente los procesos del sistema
man htop
– Ver ayuda del comando top
htop -d –delay=TIEMPO
– Tiempo de espera para refrescar (Tiempo en décimas de segundo)
htop -u –user=USUARIO
– Muestra solo los procesos de dicho usuario
killall [programa]
– Variante de kill, cierra todos los procesos de un programa