Está en la página 1de 8

TRABAJO DE EMERGENCIA POR CUARENTENA SOBRE

LABORATORIO DE SISTEMAS OPERATIVOS – VALOR 20


PTOS. (PESO 7%)

GRUPO No.3

GUIA DE LABORATORIO: No. 4

TEMA: CONOCIENDO LA CONCURRENCIA Y SINCRONIZACION


ENTRE PROCESOS EN LOS SO

Realice y responda las siguientes preguntas (DEBEN LEER TODA LA GUÍA, YA QUE LAS
PREGUNTAS SERÁN DESDE EL LA 1ra. PÁG HASTA LA ÚLTIMA PÁGINA, LEER BIEN EL
MARCO TEÓRICO):

1. Indique dos diferencias entre Concurrencia y Procesos Concurrentes.

2. Realice un cuadro con los mecanismos de Comunicación y Sincronización. Indique cuales


mecanismos son a la vez de comunicación y sincronización.

3. Explique los dos tipos de comunicación presente entre los procesos concurrentes.

4. Realice una comparación entre las propiedades de los dos tipos de comunicaciones entre
los procesos.

5. Defina: ¿Qué es un archivo? ¿Qué es paso de mensajes? ¿Que son Tuberías? ¿Qué son
variables en memoria compartida?

¿Qué es un archivo?

La definición de archivo es un lugar de almacenamiento de documentos. Es un término general


que puede llegar a englobar muchas posibilidades y matrices distintas. En un archivo en sistema
operativo se conoce como un espacio lógico de direcciones contiguas que son usadas para
almacenar los datos. Es un espacio físico de direcciones son los que ocupan un área particular y
utilizada para el almacenamiento de información, una unidad de almacenamiento no volátil es la
que grupa la información relacionada entre sí, bajo un mismo nombre.

¿Qué es paso de mensajes?

En sistema operativos, un sistema de paso de mensajes, que son herramientas que se basan
en la valides de la memoria compartida. Los mensajes puede ser de tamaño fijo o variable, los
mensajes son enviados y recibidos a través de una cola de mensajes y puertas.

¿Que son Tuberías?

Las tuberías son un mecanismo de comunicación y de sincronización, existen dos tipo de


tuberías, pipes y fifos, las tuberías pipes no tienen nombre, solo el proceso las creas y sus
descendientes, pueden utilizarla, tiene asociado dos descriptores de archivos, que se utilizan
para leer y el otro para escribir. Los fifos son tuberías con nombre, son para los procesos que no
guardan ninguna relación, los fifos tienen una asociación descriptiva de archivos que se puede
utilizar para leer o escribir.

¿Qué son variables en memoria compartida?

Las variables en una memoria son compartida, son aquellas pueden leer y escribir para
comunicarse, los procesos que desean comunicarme para que sea una memoria compartida
deben de ser físicos.

6. Investigue que son: Lenguajes concurrentes, Mutex y variables condicionales.

Lenguajes concurrentes

La concurrencia es la capacidad de un sistema para realizar actividades simultaneas, los


lenguajes concurrentes pueden incorporar concurrencia directamente, sin recurrir a servicios del
sistema operativo, bibliotecas entro otros, incluyen mecanismo de sincronización y comunicación
entre procesos. Los lenguajes concurrentes permiten ejecutar varios procesos a la vez, y para
controlar el tráfico de los procesos, utilizan las herramientas, como el semáforo, hebras e hilos.

Mutex

Las variables mutex también conocidas como mutexes, son buenas para administrar la exclusión
mutua, para los recursos compartidos o las piezas de código. Son fáciles de implementar, lo que
se hace que sea útiles en paquetes de hilos, que se implementan en un espacio de usuario, un
matex es unas variables que pueden permanecer en uno o dos estados.

Abierto (Desbloqueado) o cerrado (Bloqueado). Se requiere un solo bit para replantarla. 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.
Variables condicionales

Las variables de sincronización asociada a un mutex, estas variables ayudan a sincronizar los
bloqueos entre los hilos. Se ejecutan entre un lock y unlock, estas variables realizan dos
opciones wait y signal, donde se conviene realizarlas dentro de un lock o un unlock de un mutex.
Las funciones de un Wait y signal, Wait bloquea al proceso ligero que la ejecuta y le expulsa del
mutex y signal desbloquea a uno o varios procesos su pendidos en la variable condicional.

7. ¿Qué lenguajes de programación manejan concurrencia?

 Ada
 Java
 Sr
 Occam
 Parlog

8. ¿Qué lenguaje maneja las palabras reservadas COBEGIN Y COEND para indicar
concurrencia?

pascalFC

9. ¿En Windows se le llama a los programas: procesos o hilos, cómo se le llama en Linux?

Proporciona la funcionalidad de crear hilos usando el llamado al sistema clone()

10. ¿Cuáles con los componentes generales de un hilo en Windows XP?

componentes generales
 Identificador único para cada hilo
 Conjunto de registros que representa el estado del procesador
 Dos pilas una para el usuario y otra para el modo kernel
 Un almacenamiento privado empleado por varias librerías en tiempo de ejecución y en
enlaces dinámicos

11. ¿Qué es un fork( ) en Linux?

12. Escriba un cuadro comparativo con la Comunicación entre Hilos/Procesos a través de


Memoria compartida.

13. ¿Qué es un semáforo? ¿Cuáles son las variables que se implementan para poner en
práctica un semáforo en un prg, explíquelas?

14. Corra Bajo Linux y en Lenguaje C los siguientes programas y responda las preguntas que
están al pie de cada Prg:

14.1 HILOS
Compile los siguientes ejercicios, analice el código y la salida. Para la compilar el código con
la librería pthread es necesario utilizar la opción –lpthread, como se muestra este ejemplo:

gcc codigo.c –o codigo –lpthread

Luego de compilarlos, ejecútelo con la instrucción: ./

a) Creación de un hilo:

#include <pthread.h>

#include <stdio.h>

/* Imprime ‘x’ en la salida de error stderr. El parámetro no es usuado. No tiene retorno*/

void* print_xs (void* unused){

while (1)

fputc ('x', stderr);

return NULL;

int main (){

pthread_t thread_id;

/* Crea un nuevo hilo sobre la función print_xs */

pthread_create (&thread_id, NULL, &print_xs, NULL);

/* Imprime ‘o’ en la salida de error stderr*/

while (1)

fputc ('o', stderr);

return 0;

• Puede finalizar la ejecución con <Ctrl + C>.


• ¿Cuáles son los argumentos de la función pthread_create? ¿Para qué sirven?

• ¿Cómo es la salida en pantalla? ¿Cuál es la razón para este tipo de salida?

b) Retorna un valor desde el hilo.

#include <pthread.h>

#include <stdio.h>

/* Calcula los números primos sucesivamente .Retorna el N-esimo numero primo

donde N es el valor apuntado por *ARG. */

void* compute_prime (void* arg) {

int candidate = 2;

int n = *((int*) arg);

while (1) {

int factor;

int is_prime = 1;

for (factor = 2; factor < candidate; ++factor)

if (candidate % factor == 0) {

is_prime = 0;

break;

if (is_prime) {

if (--n == 0)

return (void*) candidate;

++candidate;
}

return NULL;

int main () {

pthread_t thread;

int which_prime = 5000;

int prime;

/* Inicia el hilo, se requiere l número primo #5000. */

pthread_create (&thread, NULL, &compute_prime, &which_prime);

/* Puedo hacer algo mientras... si quiero */

/* Espero que el número sea calculado y me sea entregado. */

pthread_join (thread, (void*) &prime);

/* Imprimo el número entregado. */

printf("El número primo es %d.\n", prime);

return 0;

• ¿Cómo es el funcionamiento del código presentado?

• Según lo visto en este ejercicio ¿Cuál es la forma de retornar valores desde un hilo? Explique
de manera clara y en sus propias palabras.

15.   Indique las diferencias entre Tuberías Pipes y Fifos.

Una pipe provee una interfaz entre dos procesos.


Es un par de descriptores especiales que, en lugar de conectar a un archivo, conecta a otro proceso.
Un pipe provee un canal de comunicación unidireccional entre dos procesos que cooperan.

Mientras que, Una limitación de pipes es que sólo se pueden usar entre procesos relacionados
(padre-hijo etc). FIFOs están relacionadas con una entrada en el sistema de archivo y así pueden ser
usadas por procesos no relacionados (pero deben tener acceso al mismo archivo). Las FIFOs son un
tipo especial de archivo. la creación de un FIFO es similar a la creación de un archivo.

16.   Investigue como se crea una Tubería Pipes y una Tubería Fifos.

Creación Pipe
Hay dos formas para crear una pipe entre dos procesos: popen()  y  pipe()
La forma más simple es a través de la función popen.
#include <stdio.h>
FILE *popen (const char * command, const char *type),
Esta función crea una pipe para leer desde o escribir a otro comando. El comando se pasa como
argumento. Type puede ser "r" o "w".
Este función crea un nuevo proceso y ejecuta el comando. Luego crea una pipe desde la entrada o
salida estándar de este proceso dependiendo de si se abrió para escritura o lectura.
    Para cerrar la pipe use:
    #include <stdio.h>
    int pclose(FILE * stream);
Esta función ejecuta un waitpid para esperar por el término del comando y su código de término.
   Una pipe puede ser creada con la función pipe
    #include <unistd.h>
    int pipe (int f [2]);
Creación avanzada
    Se crean dos descriptores de archivo, uno para lectura f [0] y otro para escritura f [1].
Lo que se escribe por fd[1] se puede leer por fd[0].
Condiciones especiales:
1. Si el extremo escritor cierra la pipe, el lector puede continuar hasta que los datos terminan y
luego recibe end-of-file.
2. Si el extremo lector cierra la pipe, un intento por escribir en la pipe genera la señal SIGPIPE.

Creación Fifo
 #include <sys/types.h>
    #include <sys/stat.h>
    int mkfifo (const char *path, mode_t mode);
path es el nombre de la FIFO a ser creada en el sistema de archivo, la cual no debe existir
previamente.
mode contiene los permisos de la FIFO, es similar a su uso en la función open().
Escrituras sobre una FIFO que no tiene proceso lector genera una señal SIGPIPE.
Ejemplo: mkfifo también existe como comando de consola. En este caso supongamos que deseamos
procesar la salida de un programa de dos formas, cada una con un programa distinto. Podemos usar
el comando tee para duplicar el contenido de la salida estándar en un archivo, que en lugar de irse a
disco será una FIFO.
% mkfifo fifo1
% prog3 < fifo1 &
% prog1 < infile | tee fifo1 | prog2
prog3 quedara esperando en background por datos desde fifo1.
prog1 lee infile, lo procesa y su salida es duplicada por tee hacia la entrada de fifo1 y la salida
estándar que es conducida a prog2.
Así, sin hace uso de archivos temporales, hemos podido enviar la salida de prog1 a prog2 y prog3.

17.   Realice un cuadro de ventajas y desventajas entre los tres requisitos que se ofrecen para solucionar
la sección crítica (Exclusión mutua, Progreso y Espera Limitada).

Requisitos Ventajas Desventajas


 Se usan en programació n  La mayoría de los métodos
Exclusión Mutua concurrente para evitar que de exclusió n mutua clá sicos
entre má s de un proceso a la intentan reducir la latencia y
vez en la secció n crítica. espera activa mediante las
colas y cambios de contexto. 
 Las pruebas indican que estos
algoritmos especiales pierden
más tiempo del que ahorran.
 Muchas técnicas de exclusión
mutua tienen efectos
colaterales.
 Ningún proceso está en sección  Sólo los procesos que no estén en
Progreso crítica, pero algunos desean sección restante participan en la
entrar. decisión de quién entra en
sección crítica.
 La decisión debe realizarse en
un tiempo finito.
 Si un proceso quiere entrar en
Espera Limitada sección crítica, sólo debe
esperar un número finito de
veces a que otros entren antes
que él.

También podría gustarte