miércoles, 14 de septiembre de 2011

What we did in NachOS

Knowing that User programs consists in Syscalls, we did the following:

(1) WE ADD 1 SYSCALL TO USERPROGR/SYSCALL.H


(2) WE ADD THE DECLARATION OF THAT SYSCALL IN THE SAME FOLDER



(3) WE WRITE SOME THINGS TEST/START.S FOLDER IN ASSAMBLER LANGUAGE -> CUADRADO



(4) WE ALSO ADD SOME CODE IN USERPROGR/MAKEFILE. WE WRITE OUR LITTLE CODE NAME, SO THE KERNEL COULD READ OUR PROGRAM.



(5) WHEN WE FINISHED ALL CHANGES WE NEEDED, WE WRITE A LITTLE CODE TO USE THOSE DECLARATIONS AND SYSTEM CALL..


(6) AFTER ALL WE DID WE REALIZE THAT NACHOS DIDN'T COMPILE AGAIN!! :C







SO, BECAUE OF THIS REASON, WE COULD JUST FIX OUR DINING PHILOSOPHERS PROBLEM IN JAVA. WE WERE ABLE TO AVOID THE DEADLOCK


THIS IS OUR SOLVED CODE:



IT WORKS :) EACH PHILOSOPHER SHARES IT FORK WITH THE OTHERS :)

12 comentarios:

  1. Bueno nada más un comentario, para que sirve el "addiu" que estas utilizando, donde pones cuadrado, que después llamas al sistema.

    ResponderEliminar
  2. Es de lenguaje ensamblador el cual es la representacion simbolica de la codificacion
    binaria del lenguaje interpretado por un computador,

    ADDIU -- Add immediate unsigned (no overflow)

    Añade un registro y un valor inmediato al inicio de la sesión ampliada y almacena el resultado en un registro

    ResponderEliminar
  3. Recordé que cuando ejecutaron el código de los filósofos, hubo un momento donde 4 de ellos estaban pensando "T" y 1 más esperando "W", y me causa duda como es posible que uno este esperando si los demás no estaban comiendo; tal vez no soltaron el tenedor los demás =/

    ResponderEliminar
  4. Como le haran para pasar el codigo de dining philosophers en C y despues implementarlo en nachOS?

    ResponderEliminar
  5. Entren a la carpeta CODE de nachOS, ahi ejecutan:

    sudo make clean

    Esto elimina los archivos compilados y regresa nachOS a su estado original, despues ejecuten otra vez (en la misma carpeta CODE):

    sudo make

    para recompilar nachOS, eso les puede servir para arreglarlo.

    Obed: C y C++ trabajan como amiguitos, no habrá mucho problema al portarlo, supongo :)

    ResponderEliminar
  6. pero no lo hicieron en C Charly lo hicieron en Java

    ResponderEliminar
  7. @Ramon.- acabo de correr el dining philosophers y en efecto ocurre lo que mencionaste esto
    se debe al codigo, si te fijas en la publicacion anterior esta el codigo del deadlock los filosofos empiezan primero con el tenedor izq es por eso que aun esta
    en W esto es lo que sale al correr el codigo:

    T | T |E| T |E| 26
    |W | T | T | T | T 27
    |E| T | T |W |W 28

    los palitos vendrian siendo los tenedores
    y las letras los filosofos, en la 2 linea es donde ocurre lo que mencionaste pero como te digo esto pasa por que en el codigo primero se empieza con el tenedor izq. y al momento que lo toma inmediatamente se pone la W :

    // Try to get the chopstick on the left

    Object leftLock = listOfLocks[threadIndex];
    synchronized (leftLock) {
    int i = 4*threadIndex;
    dinerTable[i] = ' ';
    dinerTable[i+1] = '|';
    dinerTable[i+2] ='W';
    try {
    sleep(unitOfTime*1);
    } catch(InterruptedException e) {
    break;
    entonces sucede el break y el codigo sigue, despues el tendedor derecho pues lo toma y entonces ahi comé. Espero y esto solucione tu duda?

    @obed.- creo que tendremos que trabajar con la version de java


    @juan carlos.- Gracias :)

    @cecy.- Gracias?

    ResponderEliminar
  8. Cecy: A ok, es que le entendi mal a Obed... cuando dijo "en C" confundi entonces.

    Erick: si es entendible, sobre todo cuando el código corre a cierta velocidad y es imposible captar ese tipo de cosas de forma rápida y eficiente; la lógica esta bien, pero recordemos lo que vimos en la clase también, los input-output son más lentos que una ejecución en sí.

    ResponderEliminar
  9. Muy buena explicación y excelente código.
    No se si ya lo hicieron pero podrian porfa poner referencias de donde aprendieron a agregar syscalls.
    Se los agredecere mucho.

    ResponderEliminar
  10. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  11. Me resulto interesante tu codigo de los dining philosophers, viendo el problema que comentaba mi companero Ramon, en mi punto de vista si le agregas otro semaforo "mutex" para evitar las regiones criticas y evitar conflictos entre las mismas variables, y ademas, definir ya los lados izquierda y derecha para asi saber si estan disponibles, podrias evitar ese problema.Esto lo tome de referencia del libro de Tanenbaum y pues esa parte del codigo que le mencionaste a Ramon en el libro siento que tiene un gran parecido al del libro que tiene como solucion incorrecta del problema.De igual manera te puedo prestar el libro o puedes checar el pseudocodigo en nuestro blog para que te des una idea de lo que trato de decir.

    ResponderEliminar
  12. Usen un syntax highlighter para código y eviten capturas de pantallas. Es importante incluir los números de línea para facilitar la discusión. Puntos extra por la discusión a Erick y Saúl.

    ResponderEliminar