Departamento de Estadistica TAREA #2
Enviado por Ramon Rivera • 7 de Octubre de 2019 • Ensayo • 3.881 Palabras (16 Páginas) • 230 Visitas
[pic 1]
UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS |
Departamento de Estadistica
TAREA #2
Licenciado Docente: Wilfredo Murillo
Asignatura: Estadística I
Sección: 1400
Integrantes:
- Ramón Rivera - 20151022552
Lugar Y Fecha: Tegucigalpa M.D.C 16/Septiembre/2019
Índice
Objetivo General 3
Objetivo Especifico 4
Algoritmo de Peterson 10
∙ Algoritmo para dos procesos 10
∙ Algoritmo para N procesos (pseudo-codigo) 11
Algoritmo para N procesos (pseudo-codigo) 11
Conclusiones 12
Bibliografía 13
Introducción
El algoritmo de Dekker y Pearson, introduce al alumno para trabajar con múltiples procesos, enseña la manera en que se manejan los hilos y sub procesos como una breve introducción para trabajar con semáforos binarios.
Objetivo General
- Comprender los límites y desventajas que se acoplan fuertemente a los procesos interactivos.
- Aprender la funcionalidad de ambos algoritmos y para que cantidad de procesos fueron creados
Objetivo Especifico
- Aprender el termino de “Exclusión Mutua” relacionado a los procesos que estos algoritmos manejan.
- Comprender las pausas y turnos entre el proceso A y el proceso B
Algoritmo de Dekker
El algoritmo de Dekker es un algoritmo de programación concurrente para exclusión mutua, que permite a dos procesos o hilos de ejecución compartir un recurso sin conflictos. Fue uno de los primeros algoritmos de exclusión mutua inventados, implementado por Edsger Dijkstra. Si ambos procesos intentan acceder a la sección crítica simultáneamente, el algoritmo elige un proceso según una variable turno. Si el otro proceso está ejecutando en su sección crítica, deberá esperar su finalización.
Existen cinco versiones del algoritmo Dekker, teniendo ciertos fallos los primeros cuatro. La versión 5 es la que trabaja más eficientemente, siendo una combinación de la 1 y la 4.
- Versión 1: Alternancia estricta. Garantiza la exclusión mutua, pero su desventaja es que acopla los procesos fuertemente, esto significa que los procesos lentos atrasan a los procesos rápidos.
- Versión 2: Problema interbloqueo. No existe la alternancia, aunque ambos procesos caen a un mismo estado y nunca salen de ahí.
- Versión 3: Colisión región crítica no garantiza la exclusión mutua. Este algoritmo no evita que dos procesos puedan acceder al mismo tiempo a la región crítica.
- Versión 4: Postergación indefinida. Aunque los procesos no están en interbloqueo, un proceso o varios se quedan esperando a que suceda un evento que tal vez nunca suceda.
#include
#include
#include
#include
using namespace std;
/*SUPONGAMOS QUE LOS DOS PROCESOS SON REPARAR DAÑOS Y HACER RONDA ALCALDE
PROCESO 1 SERIA REPARAR DAÑOS
PROCESO 2 HACER RONDA ALCALDE*/
bool terminar;
bool proceso1_entrar;
bool proceso2_entrar;
int Proceso_favorecido;
thread hilo;
void seccion_critica_p1(){
//este es el cuerpo del proceso, en este caso seria algo como
// el jardinero esta reparando los daños detectados por el alcalde
cout<
//std::chrono::milliseconds decsec( 2000 );
//std::this_thread::sleep_for( decsec ); //
}
void proceso1_ejecucion(){
while(!terminar){
proceso1_entrar = true;
Proceso_favorecido = 2;
while(proceso2_entrar && !terminar && Proceso_favorecido == 2){
/*Esto significa que el proceso 2 esta en ejecucion entonces aqui
el proceso 1 espera que se termine p
ara el hacer su rutina a la
seccion critica, en este caso proceso 1 es reparar daño, entonces
esperara que el proceso 2 que es hacer ronda alcalde se termine, ahi
el alcalde notara daños y se corre el proceso de reparar*/
/*acuerdense que se corren con hilos entonces si proceso2 quiso entrar
primero entonces "proceso2_entrar" sera true y hasta que este termine sera
...