Advertisement
Guest User

Untitled

a guest
Nov 4th, 2018
1,180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.53 KB | None | 0 0
  1. # -*- coding: utf-8 *-*
  2. """
  3. UCSE DAR - Sistemas Operativos I - Trabajo Práctico Nro 1 - 2018
  4.  
  5. Algoritmos de Planificación del Procesador
  6. """
  7.  
  8. # TODO: completar con los datos de los integrantes del grupo
  9. __autores__ = [
  10. ["Agustín Jobson", "agujobson1@gmail.com"],
  11. ["Maximiliano Mainero", "maximainero7@gmail.com"],
  12. ["Franco Rossetti", "francorossetti98@gmail.com"]
  13. ]
  14.  
  15. __all__ = [
  16. 'FIFO', 'SJN', 'SRT', 'RoundRobin',
  17. 'HRN', 'HRNsa',
  18. 'Prioridad', 'PrioridadA'
  19. ]
  20.  
  21.  
  22. def FIFO(proceso_actual, cola_procesos, tiempo_actual):
  23. siguiente = None
  24. if (proceso_actual is not None) and (not proceso_actual.fin()):
  25. siguiente = proceso_actual
  26. for proceso in cola_procesos:
  27. if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
  28. proceso.esperar()
  29. else:
  30. candidatos = []
  31. for proceso in cola_procesos:
  32. if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
  33. candidatos.append(proceso)
  34. if len(candidatos) > 0:
  35. menor = candidatos[0]
  36. for proceso in candidatos:
  37. if (proceso.inicio < menor.inicio) or proceso.inicio == menor.inicio and proceso.id < menor.id:
  38. menor = proceso
  39. siguiente = menor
  40. for proceso in candidatos:
  41. if proceso is not siguiente:
  42. proceso.esperar()
  43.  
  44. if siguiente is not None:
  45. siguiente.ejecutar()
  46. return siguiente
  47.  
  48.  
  49. def SJN(proceso_actual, cola_procesos, tiempo_actual):
  50. siguiente = None
  51. if (proceso_actual is not None) and (not proceso_actual.fin()):
  52. siguiente = proceso_actual
  53. for proceso in cola_procesos:
  54. if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
  55. proceso.esperar()
  56. else:
  57. candidatos = []
  58. for proceso in cola_procesos:
  59. if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
  60. candidatos.append(proceso)
  61. if len(candidatos) > 0:
  62. menor = candidatos[0]
  63. for proceso in candidatos:
  64. if (proceso.duracion < menor.duracion):
  65. menor = proceso
  66. else:
  67. if (proceso.duracion == menor.duracion):
  68. if (proceso.inicio < menor.inicio):
  69. menor = proceso
  70. siguiente = menor
  71. for proceso in candidatos:
  72. if proceso is not siguiente:
  73. proceso.esperar()
  74.  
  75. if siguiente is not None:
  76. siguiente.ejecutar()
  77. return siguiente
  78.  
  79.  
  80. def SRT(proceso_actual, cola_procesos, tiempo_actual):
  81. siguiente = None
  82. candidatos = []
  83. for proceso in cola_procesos:
  84. if not proceso.fin() and (proceso.inicio <= tiempo_actual):
  85. candidatos.append(proceso)
  86. if len(candidatos) > 0:
  87. menor = candidatos[0]
  88. tiemporestantemenor = menor.duracion - menor.procesado
  89. for proceso in candidatos:
  90. tiemporestante = proceso.duracion - proceso.procesado
  91. if (tiemporestante < tiemporestantemenor) or ((tiemporestantemenor == tiemporestante) and (proceso_actual == proceso)):
  92. tiemporestantemenor = tiemporestante
  93. menor = proceso
  94. siguiente = menor
  95. for proceso in candidatos:
  96. if proceso is not siguiente:
  97. proceso.esperar()
  98. if siguiente is not None:
  99. siguiente.ejecutar()
  100. return siguiente
  101.  
  102. def HRN(proceso_actual, cola_procesos, tiempo_actual):
  103. raise NotImplementedError
  104.  
  105.  
  106. def HRNsa(proceso_actual, cola_procesos, tiempo_actual):
  107. raise NotImplementedError
  108.  
  109.  
  110. def Prioridad(proceso_actual, cola_procesos, tiempo_actual):
  111. """siguiente = None
  112. if (proceso_actual is not None) and (not proceso_actual.fin()):
  113. siguiente = proceso_actual
  114. for proceso in cola_procesos:
  115. if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
  116. proceso.esperar()
  117. else:
  118. candidatos = []
  119. for proceso in cola_procesos:
  120. if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
  121. candidatos.append(proceso)
  122. if len(candidatos) > 0:
  123. menor = candidatos[0]
  124. for proceso in candidatos:
  125. if (proceso.prioridad >= menor.prioridad):
  126. if (proceso.inicio < menor.inicio):
  127. menor = proceso
  128. elif (proceso.inicio == menor.inicio) and (proceso.id < menor.id):
  129. menor = proceso
  130. siguiente = menor
  131. for proceso in candidatos:
  132. if proceso is not siguiente:
  133. proceso.esperar()
  134.  
  135. if siguiente is not None:
  136. siguiente.ejecutar()
  137. return siguiente"""
  138.  
  139. siguiente = None
  140. if (proceso_actual is not None) and (not proceso_actual.fin()):
  141. siguiente = proceso_actual
  142. for proceso in cola_procesos:
  143. if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
  144. proceso.esperar()
  145. else:
  146. candidatos = []
  147. for proceso in cola_procesos:
  148. if (proceso is not proceso_actual) and not proceso.fin() and (proceso.inicio <= tiempo_actual):
  149. candidatos.append(proceso)
  150. if len(candidatos) > 0:
  151. menor = candidatos[0]
  152. for proceso in candidatos:
  153. if (proceso.prioridad > menor.prioridad):
  154. menor = proceso
  155. if proceso.prioridad == menor.prioridad:
  156. if proceso.inicio < menor.inicio:
  157. menor = proceso
  158. if proceso.inicio == menor.inicio and proceso.id < menor.id:
  159. menor = proceso
  160. siguiente = menor
  161. for proceso in candidatos:
  162. if proceso is not siguiente:
  163. proceso.esperar()
  164.  
  165. if siguiente is not None:
  166. siguiente.ejecutar()
  167. return siguiente
  168.  
  169.  
  170. def PrioridadA(proceso_actual, cola_procesos, tiempo_actual):
  171. siguiente = None
  172. candidatos = []
  173. for proceso in cola_procesos:
  174. if not proceso.fin() and (proceso.inicio <= tiempo_actual):
  175. candidatos.append(proceso)
  176. if len(candidatos) > 0:
  177. menor = candidatos[0]
  178. for proceso in candidatos:
  179. if (proceso.prioridad > menor.prioridad):
  180. menor = proceso
  181. if proceso.prioridad == menor.prioridad:
  182. if proceso.inicio < menor.inicio:
  183. menor = proceso
  184. if proceso.inicio == menor.inicio and proceso.id < menor.id:
  185. menor = proceso
  186. siguiente = menor
  187. for proceso in candidatos:
  188. if proceso is not siguiente:
  189. proceso.esperar()
  190.  
  191. if siguiente is not None:
  192. siguiente.ejecutar()
  193. return siguiente
  194.  
  195. def RoundRobin(proceso_actual, cola_procesos, tiempo_actual, quantum):
  196. siguiente = None
  197. if proceso_actual is not None:
  198. if (proceso_actual.quantum == quantum) or (proceso_actual.fin()):
  199. proceso_actual.quantum = 0
  200. cola_procesos.remove(proceso_actual)
  201. cola_procesos.append(proceso_actual)
  202. for proceso in cola_procesos:
  203. if (proceso.inicio <= tiempo_actual) and (not proceso.fin()):
  204. siguiente = proceso
  205. break
  206. for proceso in cola_procesos:
  207. if (proceso.inicio <= tiempo_actual) and (proceso is not siguiente) and (not proceso.fin()):
  208. proceso.esperar()
  209. else:
  210. siguiente = proceso_actual
  211. for proceso in cola_procesos:
  212. if (proceso.inicio <= tiempo_actual) and (proceso is not siguiente) and (not proceso.fin()):
  213. proceso.esperar()
  214. else:
  215. for proceso in cola_procesos:
  216. if (proceso.inicio <= tiempo_actual) and (not proceso.fin()):
  217. siguiente = proceso
  218. break
  219. for proceso in cola_procesos:
  220. if (proceso.inicio <= tiempo_actual) and (proceso is not siguiente) and (not proceso.fin()):
  221. proceso.esperar()
  222.  
  223. if siguiente is not None:
  224. siguiente.quantum += 1
  225. siguiente.ejecutar()
  226. return siguiente
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement