Sistemas
Operativos
1
Facultad de Ingeniería de Sistemas
Curso:
Sistemas Operativo.
Docente:
Ing. Luis Loo Parian.
Tema:
Ejemplos de Algoritmos de
Exclusión mutua y Planificación
con discos PePs.
Alumno:
Tomairo Paniagua, Roger.
Ciclo:
VI
Sección:
B
2017
2
Facultad de Ingeniería de Sistemas
Dedicatoria:
Dedico el trabajo a mis padres, por el apoyo incondicional
Que nos brindan, los consejos que nos proporcionan para
Ser una mejor persona y también a los docentes que
Nos proporcionan conocimiento.
3
Facultad de Ingeniería de Sistemas
Índice
4
Facultad de Ingeniería de Sistemas
Exclusión Mutua
Consiste en que un solo proceso excluye temporalmente a todos los demás para
usar un recurso compartido de forma que garantice la integridad del sistema.
1. Sólo un proceso, de todos los que poseen secciones críticas por el mismo
recurso compartido, debe tener permiso para entrar en ella en un momento
dado.
2. Un proceso que se interrumpe en una sección no crítica debe hacerlo sin
interferir con los otros procesos.
3. Un proceso no debe poder solicitar acceso a una sección crítica para
después ser demorado indefinidamente, no puede permitirse el interbloqueo
o la inanición.
4. Si ningún proceso está en su sección crítica, cualquier proceso que solicite
entrar en la suya debe poder hacerlo sin demora.
5. No se debe suponer sobre la velocidad relativa de los procesos o el número
de procesadores.
• El algoritmo de Dekker.
• El algoritmo de Peterson.
5
Facultad de Ingeniería de Sistemas
while (cierto)
{
bandera[proc_id] = cierto;
while (bandera[1-proc_id] == cierto)
{
if (turno == 1-proc_id)
{
bandera[proc_id] = 0;
while (turno == (1-proc_id)) /* espera a que sea su turno de
intentar */;
bandera[proc_id] = 1;
}
}
/* ''Sección crítica'' */
turno = 1-proc_id; /* es el turno del otro proceso */
bandera[proc_id] = 0;
/* ''Sección no crítica'' */
}
6
Facultad de Ingeniería de Sistemas
import time
import thred
flag=[True,True]
turno = 1 #Inicio del prodemiento_0
def prodemiento_0():
global flag
global turno
flag[0]=True
while flag[1]:
if turno==1:
flag[0]=False #se tapa el paso del procedimiento 1
while turno==1:
print("Soy el procedimiento 0! Espero 6 Segundos\n")
time.sleep(6)
flag[0]=True
print("Soy el procedimiento 0! Esta es la ruta critica\n")
time.sleep(4)
print("Soy el procedimiento 0! Este es el fin de la ruta critica\n")
turno=1
flag[0]=False
def procedimiento_1():
global flag
global turno
flag[1]=True
while flag[0]:
if turno==1:
flag[1]=False #se tapa el paso del procedimiento 0
while turno==0:
print("Soy el procedimiento 0! Espero 5 Segundos\n")
time.sleep(5)
flag[1]=True
print("Soy el procedimiento 1! Esta es la ruta critica\n")
time.sleep(4)
print("Soy el procedimiento 0! Este es el fin de la ruta critica\n")
turno=0
flag[1]=False
7
Facultad de Ingeniería de Sistemas
8
Facultad de Ingeniería de Sistemas
bandera=[False, False]
turno=0
contador=0
def get_first_part () :
global bandera, turno, contador
bandera[0] =True
turno=1
while(bandera[1]==True and turno==1):
print “Proceso#1 esperando ”+ “\n”
#time.sleep(1)
print “Proceso#1 ini sección critica ”+”\n”
for i in range(3):
contador=contador+1
time.sleep(2)
print “Proceso#1 fin sección critica”+”\n”
print (“Proceso#1 contador: ”+ str(contador)+”\n”)
bandera[0]=False
def get_second_part () :
global bandera, turno, contador
bandera[i]=True
turno=0
while (bandera[0] == True and turno=0)
print “Proceso#2 esperando ”+”\n”
#time.sleep(1)
print (“Proceso#2 ini sección critica ”+”\n”)
for i in range (3):
contador=contador+1
time.sleep(2)
print “Proceso#2 fin sección critica”+”\n”
print (“Proceso#2 contador: ”+ str(contador))
bandera[1]=False
def main():
global contador
contador=0
thread.start_new_thread(get_first_part, () )
thread.start_new_thread(get_second_part, () )
#print contador
main()
9
Facultad de Ingeniería de Sistemas
10
Facultad de Ingeniería de Sistemas
ALGORITMO PEPS
Este algoritmo también llamado FIFO (First Input, First Output) o FCFS (Primero en llegar,
primero en ser servido). Este algoritmo puede verse como muy justo, aunque sea muy
poco eficiente.
11
Facultad de Ingeniería de Sistemas
import java.util.LinkedList;
import java.util.Queue;
import java.util.Iterator;
import java.util.*;
import java.io.*;
12
Facultad de Ingeniería de Sistemas
13
Facultad de Ingeniería de Sistemas
14
Facultad de Ingeniería de Sistemas
15
Facultad de Ingeniería de Sistemas
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
class Test
{ static int pageFaults(int pages[], int n, int capacity)
{ // Para representar un conjunto de páginas actuales. Usamos un conjunto desordenado para que
verifiquemos rápidamente // si una página está presente en el conjunto o no
HashSet<Integer> s = new HashSet<>(capacity);
// Para almacenar las páginas en forma FIFO
Queue<Integer> indexes = new LinkedList<>() ;
// Comience desde la página inicial
int page_faults = 0;
for (int i=0; i<n; i++)
{// Compruebe si el conjunto puede contener más páginas
if (s.size() < capacity)
{ // Insértelo en el conjunto si no está presente, lo que representa un error de página
if (!s.contains(pages[i]))
{s.add(pages[i]);// incrementar fallas de pagina
page_faults++;// Empuje la página actual en la cola
indexes.add(pages[i]);
}
}
// Si el conjunto está lleno, entonces debe realizar FIFO, es decir, eliminar la primera página de la cola
else
{
if (!s.contains(pages[i]))
{ // Pop la primera página de la cola
int val = indexes.peek();
indexes.poll();
// Eliminar la página de índices
s.remove(val);
// insertar la página actual
s.add(pages[i]);
// empujar la página actual hacia
indexes.add(pages[i]);
// Incrementar fallas de página
page_faults++;
}
} }
return page_faults;}
public static void main(String args[])
{
int pages[] = {7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2};
int capacity = 4;
System.out.println(pageFaults(pages, pages.length, capacity));
}}
16
Facultad de Ingeniería de Sistemas
Bibliografía
1. https://www.youtube.com/watch?v=cZTs-ChvVoo
2. https://www.youtube.com/watch?v=ox9Zwxx-lLM
3. http://sistemas-operativos2012.blogspot.pe/2012/08/algoritmos-de-
dekker-y-peterson.html
4. http://tecdis-eu.es/web/sites/default/files/documentos/Practicas/PCTR-
guion_pract5.pdf
5. https://prezi.com/hqa5h-lyr0dn/algoritmo-de-planificacion-fifo/
6. http://campuscoke.blogspot.pe/2015/01/fifo-page-replacement-
algorithm-in-java.html
7. http://www.javaengineeringprograms.com/first-in-first-out-page-
replacement-algorithm-fifo-program-in-java/
8. https://es.stackoverflow.com/questions/67883/algoritmo-de-
planificacion-fifo
9. http://mynorrene.choccac.com/tag/algoritmo-planificacion-procesos-
fifo-first-in-first-out/
17