GithubHelp home page GithubHelp logo

life-myshell's Introduction

IIC2333 - Tarea 2

Cristóbal Eyzaguirre 15636976 Franco Mendez 14636077

Diseño de myShell

myShell cuenta con un solo módulo con varias funciones. Realiza un loop en main, desde donde se llama a las funciones principales que leen los comandos ingresados por el usuario, los parsean en argumentos que se guardan en punteros con un puntero hacia cada uno de ellos, y los entregan de cierta manera (según estos mismos) para que se ejecuten.

Para ejecutar un comando se llama a la función execArgs, que verifica que no hayan palabras especiales. Si no hay, se ejecuta un simple execv, cersiorándose de que si hay un customPath y exista un archivo en la ruta customPath + arg[0] sea ejecutado, de no ser así, se corre de manera absoluta.

En el caso en que sí hayan palabras especiales se llaman funciones que modelan el comportamiento de cada una. Dentro de las no triviales se encuentra la que se activa al haber un & como último argumento, que se encarga de crear tantos procesos como indique el número que le sucede (o 1 sí no hay) para que ejecuten los argumentos con execv (verificando el path personalizado) y el programa principal pueda seguir corriendo.

Para el manejo de los estados anteriores, prompt y path personalizados, se usan variables globales.

Diseño de Life

El diseño de life es bastante simple. Se crean tantos procesos como cores tenga el computador y se usa la variable core en la iteracion sobre cores guardar el "indice" de cada proceso de 0 a N-1 donde N es el numero de cores.

Para cada proceso se guarda en status su pid en la posicion que corresponde a su indice. Para que master tenga los estados y numeros de iteraciones de cada proceso slave existen en memoria compartida iterations que guarda en el indice de cada proceso esclavo el numero de iteraciones que ha corrido, y states que almacena las matrices que representan el ultimo estado computado por completo en el pointer con desfase indice * (filas * columnas * sizeof(int)).

Para coordinar los procesos existe una ultima variable en memoria compartida shared. Esta hace que solo un proceso (el primero en terminar) imprima su resultado en CONSOLA, y elimina al resto.

Los threads no requieren coordinacion porque cada uno edita sus propias filas (que son distribuidas equitativamente al principio) y por lo mismo nunca intentan cambiar valores de la misma variable al mismo tiempo. Se usa un join para sincronizar los threads y esperar a que terminen todos antes de pasar a la siguiente iteracion de el juego de la vida.

life-myshell's People

Watchers

James Cloos avatar Franco Mendez avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.