-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathman-pscheduler
More file actions
212 lines (151 loc) · 7.52 KB
/
man-pscheduler
File metadata and controls
212 lines (151 loc) · 7.52 KB
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
********************************************************************************
* man-pscheduler *
********************************************************************************
En este archivo se encuentra la documentación de pscheduler
Contenido:
-----------
1- Autores
2- Makefile
3- Implementación
4- Estructura del archivo de salida
5- Variables de estado
1- Autores:
------------
Mariano Rodríguez 12-10892
Pablo Gonzalez 13-10575
2- Makefile:
-------------
Para ejecutar el makefile, es suficiente con ejecutar el comando 'make' en el
directorio con todos los archivos especificados en el punto 2 de este archivo.
El 'makefile' viene diseñado, para generar el ejecutable de forma autónoma.
Además permite borrar todos los archivos creados por el mismo
(incluyendo el ejecutable).
Para modificar el comportamiento del 'makefile', se puede acceder al mismo
y modificarlo.
Para no eliminar el ejecutable:
Modificar la línea 33 del archivo de la siguiente forma:
Antes: rm -f pscheduler $(OBJS)
Después: rm -f $(OBJS)
3- Implementación:
----------------------------
Estructuras:
En este archivo se declaran las estrucuras (structs) usadas en el programa.
struct Estado:
Estructura que mantiene el estado de un proceso. El estado para este
caso particular, se maneja con solamente dos posibles valores:
"E" - En Ejecución
"L" - Listo
struct Proceso:
Estructura que contiene toda la información necesaria de un proceso,
como a su vez, apuntadores al proceso siguiente y al proceso anterior,
para facilitar la manipulación de los mismos en el programa.
struct Cola:
Estructura que contiene solamente dos apuntadores del tipo Proceso.
Con esta estructura, se es capaz de organizar y acceder a los procesos
de forma eficiente.
struct EstrucSched:
Estructura que contiene 6 colas, tratadas en este programa como colas
de prioridades, lo que permite el manejo de los procesos y las colas y
un apuntador al proceso en ejecución.
EstrucShed:
En estos archivos, se declaran y definen las funciones que le dan
funcionalidad a la estructura 'EstrucSched', las cuales, son las siguientes:
SeleccionarCola:
Esta función, recibe una 'EstrucSched' y una prioridad, para devolver la
cola que contiene los procesos de la prioridad dada dentro de la
estructura 'EstrucSched' dada.
InicializarProceso:
Esta función inicializa el proceso, solicitando la memoria necesaria
para el almacenamiento del mismo y a su vez inicializa los apuntadores
'next' y 'prev' del mismo con el valor 'NULL', lo que permite asegurar
un uso correcto de estos apuntadores por el resto del programa.
ImprimeProceso:
Recibe un proceso e imprime la información del mismo de forma ordenada
(ver orden en 7) por salida estándar.
Imprime:
Recibe una estructura 'EstrucSched' e imprime toda la información de la
misma por salida estándar (haciendo uso de la función ImprimeProceso).
Primero indica con una línea la prioridad de la cola de procesos a
imprimir. Luego imprime todos los procesos con dicha prioridad de
forma ordenada (ver orden en 7). Todas las impresiones de esta función
son realizadas por salida estándar.
Guardar:
Esta función recibe una estructura 'EstrucSched' y guarda de forma
ordenada en un archivo (cuyo nombre es pasado en la inicialización
del programa (5)). Se guardan los procesos tal cual se encuentran
en el momento de la llamada de la función, comenzando por los de
mayor prioridad. Cada línea del archivo de texto contiene un
proceso (ver orden en 7).
Colas:
En estos archivos, se declaran y definen las funciones que le dan
funcionalidad a la estructura 'Cola', las cuales, son las siguientes:
InsertarProceso:
Esta función recibe la estructura 'EstrucSched', un proceso y la
prioridad de dicho proceso. Luego inserta el proceso al final de la cola
de prioridad correspondiente.
EliminarProceso:
Esta función recibe el proceso a eliminar y la cola donde se encuentra el
mismo, de esta manera libera la memoria que ocupaba dicho proceso
(el anterior y el siguiente en la cola) y actualiza los apuntadores de
los procesos afectados por la eliminación del mismo, para que no se
pierda el orden de la cola ni la capacidad de acceder a todos los
procesos de una cola.
ElimProceso:
Esta función, dado el ID del proceso (PID) y la prioridad del mismo,
busca el proceso en la cola apropiada, lo elimina de la misma usando
la función EliminarProceso().
ElimProcesoE:
Esta función recibe la estructura 'EstrucSched', busca el proceso en
ejecución de la misma y lo elimina, haciendo uso de la función
EliminarProceso().
CambiarEstado:
Esta función cambia el estado de un proceso del estado que posee al
momento de su llamada, al estado que le es pasado a la función como
el parámetro 'newestado'.
ProxProceso:
Esta función recibe la estructura 'EstrucSched' y busca en la misma, el
próximo proceso a ser planificado y puesto en ejecución. Para determinar
cual es el proceso que debe ser ejecutado, busca en las colas de
prioridades de forma descendente (mayor a menor prioridad) y además
respeta el orden de las colas, siempre se atenderá al primer proceso de
la cola de mayor prioridad. La función además, modifica el estado del
proceso seleccionado de "Listo" a "EnEjecucióń" (usando CambiarEstado) y
devuelve un apuntador al mismo.
Menu:
En estos archivos, se declaran y definen las funciones que le dan
funcionalidad al Menu del programa y la función que crea e instancia la
estructura principal del programa (EstrucSched). Dichas funciones son:
ImprimeMenu:
Esta función imprime el menú, mediante el cual se puede interactuar
con el programa para realizar todas las funciones del mismo.
Construye:
Esta función, se ejecuta al inicio del programa y construye la
estructura de datos inicial (EstrucSched), utilizando los datos del
archivo que le fue pasado al momento de la invocación del ejecutable.
EjecutaAccion:
Esta función chequea la entrada que hizo el usuario en el Menú y toma
las previsiones necesarias para poder ejecutar de forma exitosa las
funciones que el usuario desea, para lograr esto, solicita los posibles
datos que puedan faltar para ejecutar la opción solicitada por el
usuario y llama a las funciones adecuadas en el orden correcto.
Main:
Archivo donde se mantiene la lógica inicial del programa, que permite que
todo lo demás sea ejecutado.
4- Estructura del archivo de salida:
-------------------------------------
Cada línea contendrá la información de un único proceso,
en el siguiente orden:
Prioridad PID Estado Tiempo Comando
Ejemplo:
1 1345 L 5.6 javac
5- Variables de estado:
------------------------
Estado de ejecución de un proceso:
L - Listo
E - EnEjecución
Colas -> ElimProcesoE -> eliminado:
0 - Sin eliminar
1 - Eliminado
main -> salir:
0 - No salir
1 - Salir del programa