Volvemos después de un merecido descanso al curro y a comprender como funciona la planificación de procesos.
Lo primero que vamos a hacer es crearnos una imagen nueva e introducir en ella los 3 ficheros (1, 2 y 3) que se nos proporcionan en la práctica. Para poder hacer esto ver el post sobre la práctica 1, no la continuación 1ª.
Una vez hecho esto, como vemos en la imagen tenemos ya los tres ficheros dentro del fichero .img:
El fichero .img se encuentra en la carpeta \MEDIA.
Asegurarse de que en las propiedades de la imagen a arrancar MINIX 3.0 el disco de floppy A es el que habeis creado.
Ahora arrancamos MINIX 3.0, como siempre la constraseña es “root” sin las comillas.
Vemos el contenido del diskette:
#dosdir fd0
Ahora enviamos el contenido del fichero prueba-1.c a nuestro disco duro en mi caso yo me he creado un directorio y ahí voy a volcar todos los datos.
#dosread -a fd0 prueba-1.c > prueba-1.c
Con -a evitamos lo que le pasó a Brom en el foro de delegación, ahora ya está solucionado y ya no da problemas ningún carácter extraño.
APARTADO 1
Lo siguiente que nos pide la práctica es compilarla:
#cc prueba-1.c
Como nos ha devuelto como resultado una almohadilla “#” y no un asterisco “*”, sabemos que todo ha ido bien, además porque el compilador “cc” no nos ha dicho nada. Vemos el resultado:
#ls -l
Ejecutamos el fichero “a.out”:
#./a.out
El resultado es una pantalla llenas de 1 y 2 entrelazados …
Para salir pulsamos CTRL+C.
EXTRAIDO DEL FORO DE DELEGACIÓN
Una vez que tenemos los 3 ficheros en MINIX los compilamos yo opto por la opcion:
cc -o prueba-1.out prueba-1.c
cc -o prueba-2.out prueba-2.c
cc -o prueba-3.out prueba-3.c
con la opcion -o el fichero objeto que se genera el independiente y podemos probar uno y otro sin tener que utilizar el mismo nombre para los 3.
para ejecutarlos ./prueba-1.out y así con los otros 3.
APARTADO 2
Básicamente tenemos que hacer lo que pide.
2.1
2.1.1 —> Localizar la función
2.1.2 —> Sustituir (yo he utilizado elvis)
2.1.3 —> Grabar y cambiar de direcorio
2.1.4 —> Compilar e instalar la nueva imagen
2.1.5 —> Reiniciar
2.1.6 —> ¿que ocurre?
2.1.7 —> Ya está justificado anteriormente.
2.2
2.2.1 —> Arrancar la imagen de fábrica.
2.2.2 —> Buscar la función “sched”.
2.2.3 —> Eliminar sentencias.
2.2.4 —> Modificar código.
PISTA:
PRIVATE void sched(rp, queue, front)
register struct proc *rp; /* process to be scheduled */
int *queue; /* return: queue to use */
int *front; /* return: front or back */
Se ve claramente que la variable "front" sirve para insertar al principio o al final. Os queda a vuestra libertad la interpretación del siguiente código.
int time_left = (rp->p_ticks_left > 0); /* quantum fully consumed */
*front = time_left;
2.2.5 ---> Grabar.
2.2.6 ---> Compilar.
2.2.7 ---> Reiniciar con la nueva imagen.
2.2.8 ---> Compilación y ejecución de ./a.out
2.2.9 --->
Antes de nada vamos a ver como funciona la función sched (...). Esta función primero lo que hace es bajarle la prioridad a un proceso si no ha terminado de ejecutarse (en lineas generales y sin haber tocado nosotros nada). Luego determina en que cola debe añadirse ese proceso, lo cual se sabe viendo que prioridad tiene, es decir COLA = PRIORIDAD, si tiene la prioridad 10 lo metemos en la cola 10, por último debemos saber si añadir el proceso por delante o añadirlo por detrás de la cola, entonces nos hacemos la siguiente pregunta:
¿Le quedan tics al proceso n?
* SI: Insertamos el proceso por la cabecera de la cola.
* NO: Insertamos el proceso por el final de la cola.
Cuando digo insertamos me refiero a que la función ENCOLAR se encarga de añadir al final o al principio el proceso en la cola correspondiente. La función ENCOLAR pregunta a sched(...) donde debe introducir y sched(...) lo devuelve en un parámetro que es FRONT.
¿Que diferencia hay?
2.2.10 ---> ¿Por qué se produce este comportamiento?
2.2.11 ---> ¿Cual es el orden?
2.2.12 ---> ¿Es el resultado obtenido el perseguido?
[ CONTINUARÁ ]
[...] forma que le ofrece su superficie máxima « Práctica 1 - SO II (continuación 1ª) Práctica 1 - SO II (continuación 2ª) - LIBERARÉ LA FAQ CUANDO LA TERMINE [...]
ResponderEliminar