-
Notifications
You must be signed in to change notification settings - Fork 0
/
hoja5.py
97 lines (82 loc) · 3.28 KB
/
hoja5.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#Roberto Chiroy
#Diego Jacobs
from SimPy.Simulation import *
from random import uniform, Random
class Memoria():
def __init__():
Process.__init__(self)
self.nombre=id
mem = 5
class Procesos(Process):
def __init__(self,id):
Process.__init__(self)
self.nombre=id
def ejecutar(self,cantRAM,cantInstrucciones,mem):
self.llega= now() #tiempo de ingreso del proceso
Memoria = mem
self.RAM=cantRAM
if Memoria>=cantRAM:
Memoria = Memoria - cantRAM
print "->",Memoria
print "El proceso", self.nombre ,"solicita ", self.RAM ," MB de RAM"
else:
print "->",Memoria
print "El proceso", self.nombre ,"solicita ", self.RAM ," MB de RAM"
print "No hay suficiente memoria para el proceso", self.nombre
self.cantInstrucciones=cantInstrucciones
i=3
yield request,self,ready
print self.nombre, "en cola para ser atendido por el cpu"
while(self.cantInstrucciones>0):
yield release,self,ready
print self.nombre, "está listo para ser atendido por el cpu"
if (self.cantInstrucciones-i)<=0:#mira si puede resolver las instrucciones con una solo llegada al cpu
print "No se necesitan más de 1 ciclo para ",self.nombre , ", usa ",self.cantInstrucciones, "instrucciones"
yield request, self, cpu
print self.nombre, "obtiene cpu"
self.cantInstrucciones=self.cantInstrucciones-i
i=i+1
yield release, self, cpu
tiempoProceso= now() - self.llega
wt.observe(tiempoProceso)
Memoria = Memoria + cantRAM
print self.nombre, "libera cpu"
print self.nombre, "sale del sistema"
else:#si se necesita más de una llegada al cpu para resolver el proceso
print "Se necesitan más de 1 ciclo para el proceso",self.nombre, "usa ",self.cantInstrucciones, "instrucciones"
yield request, self, cpu
print self.nombre, "obtiene cpu"
self.cantInstrucciones=self.cantInstrucciones-i
i=i+1
yield release, self, cpu
print self.nombre, "libera cpu"
decision=random.randint(1,2+1)
if decision==1: #entra a la cola de waiting
yield request,self,waiting
print self.nombre, "está en espera para ser atendido por el cpu"
yield hold,self,1
print self.nombre, "sale de espera para ser atendido por el cpu"
yield release,self,waiting
yield request,self,ready
print self.nombre, "en cola para ser atendido por el cpu"
else: #regresa al estado de ready
yield request,self,ready
print self.nombre, "en cola para ser atendido por el cpu"
wt=Monitor()
initialize() #inicar la simulacion. Tiempo = 0
nrCars=5
Memoria=5
#memoria = container(init=100,capacity=100)
cpu = Resource(capacity=1)
azar = Random() #se puede reproducir los mismos numeros al azar
parkingLot=Resource(capacity=4,qType=FIFO)
ready=Resource(capacity=20,qType=FIFO)
waiting=Resource(capacity=20,qType=FIFO)
for i in range(nrCars):
c=Procesos(id="Proceso #"+ str(i)) #se crea una instancia por cada carro
#activar los carros en la lista de simulacion. Se genera un numero
#al azar para indicar el tiempo que se conduce cada carro para llegar
#a la meta.
activate(c,c.ejecutar(cantRAM=azar.randint(1,7+1),cantInstrucciones=azar.randint(1,10+1),mem = Memoria))
simulate(until=100) #simular para 100 unidades de tiempo
print "Tiempo total de los procesos: \tmean = %5.1f, \n\t\tvariance=%2d"%(wt.mean(),wt.var())