Giter VIP home page Giter VIP logo

os.p1.2019_2.cuestajohn's Introduction

OS.P1.2019_2.CuestaJohn

Proyecto de Sistemas Operativos - Primer parcial - Segundo término 2019

PARTE 1:

DESCRIPCIÓN GENERAL DEL DISEÑO

Esta es una estructura genérica en donde se tiene la carpeta de los ejecutables (bin) generados por el MAKEFILE, la carpeta include están los archivos headers para el código adicional que se necesita. En la carpeta lib se encuentran los archivos customizables enlazados a los archivos headers realizados en la carpeta include. La carpeta src tiene el código principal que ejecuta el programa.

ESPECIFICACIÓN COMPLETA

El planteamiento de la solución para esta parte del proyecto es el de mantener activo un proceso padre, es decir, la consola como tal. Además, se deben ejecutar procesos hijos, o los comandos de la consola, que deben ejecutar sus propias tareas.

Mientras los procesos hijos se crean y se ejecutan, el proceso padre debe mantenerse vigente. Cuando finalmente el proceso hijo termina, el proceso padre espera para mostrar el resultado del proceso hijo.

Cuando el shell está ejecutando espera una entrada para dirigirse a ese directorio. En el caso de ser un espacio se lo maneja de manera que no se ha ingresaso una cadena válida. Si el comando tiene una virgulilla y nada más se redirige al home del usuario. Todo esto se maneja con validaciones de la entrada de las cadenas.

Finalmente, cuando el proceso padre termina todo lo que se está ejecutando se cierra en ese momento.

ERRORES O PROBLEMAS

No se aceptan pipes No se aceptan directorios que tengan un espacio en el nombre

PARTE 2:

DESCRIPCIÓN GENERAL DEL DISEÑO Esta es una estructura genérica en donde se tiene la carpeta de los ejecutables (bin) generados por el MAKEFILE, la carpeta include están los archivos headers para el código adicional que se necesita. En la carpeta lib se encuentran los archivos customizables enlazados a los archivos headers realizados en la carpeta include. La carpeta src tiene el código principal que ejecuta el programa.

ESPECIFICACIÓN COMPLETA

Para la solución se decide a particionar el archivo en chunks, estos serán porciones del archivo que dependen de la cantidad de hilos que se utilicen. Por ejemplo, si se tienen 4 hilos se tendrán 4 chunks. La cantidad de hilos se definen en “pthread_create”.

Para realizar el conteo de líneas se busca el carácter “\n” o salto de línea, dependiendo de la cantidad de estos caracteres se obtiene la cantidad de líneas.

Para realizar el conteo de palabras se utilizan punteros para saber si el carácter actual es diferente de espacio y si el carácter siguiente es un espacio. Si estas condiciones se dan, entonces se considera que es una palabra. Para verificar si hay una palabra en los límites de los chunks se utiliza la misma estrategia. Este algoritmo sigue la base del “wc” genérico con algunas modificaciones.

Dado que no hay operaciones de escritura, y se utilizan diferentes punteros para leer el archivo, ya que para cada hilo se obtiene una dirección de memoria diferente, por ende cada puntero es independiente uno del otro y no se manejan zonas críticas, por lo que no hubo la necesidad de utilizar la exclusión mutua.

Esto se debe a que se realiza una lectura y no realiza conflictos o condiciones de carrera. Cuando se manejan multihilos se divide la longitud del archivo para la cantidad de hilos totales. El último chunk es el que va a tener más de la participación o menos de la participación.

Esto depende de la división ya que la división en C es de paquetes enteros. Cuando se tenga el tamaño del bloque, cada hilo se inicializa en estado “joineable” para poder esperar los hilos que van contando y cuando terminen se puedan juntar con los demás hilos.

Cuando se tengan los chunks contados al final, se cuentan las partes que se pudieron saltar. Con la validación se maneja los caracteres de inicio y fin para controlar si lo que se tiene es una palabra. De manera global sólo se acumulan las particiones para dar el resultado.

Este algoritmo es eficiente ya que no carga en memoria más de lo necesario. Esto se refleja especialmente en archivos muy grandes. Al contrario de utilizar, por ejemplo, mmap para separar espacio en la RAM entonces se está utilizando más memoria para el archivo de gran contenido.

ERRORES O PROBLEMAS

Si hay una cantidad muy elevada de hilos no va a funcionar correctamente la partición que se hace.

os.p1.2019_2.cuestajohn's People

Contributors

novastriker avatar

Watchers

James Cloos avatar  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.