Tarea 3
Tarea 3
Tarea 3
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.
que para escribir en la tubería hay que usar el descriptor almacenado en tubería [1].
En caso de error durante la ejecución de pipe en resultado se almacenará el valor -1.
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
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
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.
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
Julito
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
Problemas de concurrencia
Problema del productor - consumidor
El problema del productor- consumidor es un ejemplo clásico de problema de
sincronización de multiprocesos. El programa describe dos procesos, productor y
consumidor, ambos comparten un buffer de tamaño finito. La tarea del productor es
generar un producto, almacenarlo y comenzar nuevamente; mientras que el
consumidor toma (simultáneamente) productos uno a uno. El problema consiste en
que el productor no añada más productos que la capacidad del buffer y que el
consumidor no intente tomar un producto si el buffer esta vació.
La idea para la solución es la siguiente, ambos procesos (productor y consumidor) se
ejecutan simultáneamente y se “despiertan” o se “duermen” según el estado del buffer.
Concretamente, el productor agrega productos mientras quede espacio y en el
momento en que se llene el buffer se pone a “dormir”. Cuando el consumidor toma un
producto notifica al productor que puede comenzar a trabajar nuevamente. En caso
contrario, si el buffer se vacía, el consumidor se pone a dormir y en el momento en que
el productor agrega un producto crea una señal para despertarlo. Se puede encontrar
una solución usando mecanismos de comunicación de interprocesos, generalmente se
usan semáforos.
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
Cinco filósofos se sientan alrededor de una mesa y pasan su vida cenando y
pensando. Cada filósofo tiene un plato de fideos y un tenedor a la izquierda de
su plato. Para comer los fideos son necesarios dos tenedores y cada filósofo
sólo puede tomar los que están a su izquierda y derecha. Si cualquier filósofo
toma un tenedor y el otro está ocupado, se quedará esperando, con el tenedor
en la mano, hasta que pueda tomar el otro tenedor, para luego empezar a
comer.
Si dos filósofos adyacentes intentan tomar el mismo tenedor a una vez, se
produce una condición de carrera: ambos compiten por tomar el mismo
tenedor, y uno de ellos se queda sin comer.
Si todos los filósofos toman el tenedor que está a su derecha al mismo tiempo,
entonces todos se quedarán esperando eternamente, porque alguien debe
liberar el tenedor que les falta. Nadie lo hará porque todos se encuentran en la
misma situación (esperando que alguno deje sus tenedores). Entonces los
filósofos se morirán de hambre. Este bloqueo mutuo se denomina interbloqueo
o deadlock.
El problema consiste en encontrar un algoritmo que permita que los filósofos
nunca se mueran de hambre.
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.
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
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.
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
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA INGENIERÍA EN SOFTWARE
UNIVERSIDAD DE GUAYAQUIL
top –d 5
– Donde 5 es el número de segundos a transcurrir entre cada muestreo
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