Anda di halaman 1dari 4

Primera entrega

Sistemas Operativos

Juan Sebastin Lpez


Cesar David Guerrero

Pontificia Universidad Javeriana


17 de septiembre de 2015
Sistemas Operativos
Proyecto
Primera entrega

1. Descripcin del problema planteado


El problema planteado en el presente proyecto consiste en crear tres
implementaciones concurrentes del comando sort de UNIX. Este comando
permite ordenar archivos que le entran como parmetros segn ciertos flags
que son permitidos por el mismo. Para esto fue necesario usar procesos e hilos
que permiten, de forma concurrente, manejar distintos archivos y arrojar
resultados ptimos en trminos de recursos y propiamente de salidas. Los
archivos a ser organizados tienen una misma estructura interna aunque la
longitud, medida por la cantidad de lneas, es variable.
Existe una forma especfica para los argumentos que deben ser ingresados al
momento de invocar el comando. El primer argumento corresponde a uno de
los tres comandos a ser implementados, seguido de al menos un archivo al cual
se le realizar el ordenamiento y, por ltimo, habr un argumento
correspondiente al archivo de salida en el que ser almacenado el resultado
final del ordenamiento del o de los archivos anteriormente referidos. Esto
corresponde a lo siguiente:
$ <comando> <archivo1> <archivoN> <archivoSalida>
Cada una de la implementaciones a crear tiene especificaciones que sern
enunciadas a continuacin:
i. csortp: este es un comando que debe permitir ordenar los archivos de
forma concurrente a travs de un abanico de procesos. Cada uno de estos
procesos se encarga de ordenar uno de los archivos ingresados y,
posteriormente, el proceso padre se encarga de recolectar la informacin del
ordenamiento de sus hijos para reordenar y crear el archivo final con toda la
informacin.

Primera entrega

Sistemas Operativos

ii. csortpexec: este comando debe permitir ordenar los archivos de forma
concurrente como en el caso anterior pero los procesos hijos deben hacer uso
del comando sort que directamente ofrece el sistema operativo. Para esto ser
necesario usar la llamada al sistema exec.
iii. csorth: este comando debe permitir ordenar los archivos pero en esta
ocacin con hilos. Cabe aclarar que cada hilo corresponde al ordenamiento de
uno de los archivos de entrada.
2. Algoritmos implementados
Para cumplir con el objetivo propuesto por el enunciado del proyecto se
implementaron algoritmos de diferentes tipos:
i. De lectura de archivos: este algoritmo permite abrir un archivo, obtener
las lneas que lo componen y almacenarlas. Para este fin se defini un buffer
que almacena cierta cantidad mxima de caracteres y mientras se encuentran
los saltos de lnea del texto, se van agregando una a una a un arreglo de
cadenas asignndole la memoria suficiente y necesaria. Si el archivo es ms
grande que la capacidad del buffer, se reutiliza el buffer y el mismo
procedimiento descrito para continuar almacenando la informacin del archivo.
Este es un proceso iterativo y se repite hasta que se completa todo el archivo.
ii. De ordenamiento: se us el algoritmo de burbuja para organizar los
contenedores de las lineas del archivo. Para esto se tuvo en cuenta la
especificacin del enunciado que prevea cierta jerarqua a la hora de ordenar
el archivo (algoritmo de comparacin).
iii. De comparacin: se implement un algoritmo de comparacin que
fuera acorde al enunciado del proyecto. All se tomaban dos lneas del archivo,
se tomaban los tokens relevantes para ordenar el archivo (usando sscanf) y
se comparaban para retornar una respuesta concreta.
iv. De escritura de archivos: este algoritmo recibe un arreglo de cadenas
que corresponde a las lneas de un archivo y las escribe el un archivo
especfico que tambin recibe.

Primera entrega

Sistemas Operativos

3. Llamada al sistema exec


Para resolver el segundo punto se hizo una investigacin que permiti conocer
una de las soluciones ms factibles para el problema planteado. De esta forma
se hizo uso de la llamada execl en el que hay que especificar un comando del
sistema con su respectiva ubicacin, los argumentos y los flags que
permitieran cumplir con el objetivo.
En el caso del proyecto en cuestin se us el siguiente comando:
execl("/usr/bin/sort", "sort", argv[i], "-g", "-k1", "-k2", "-k3", "-k4", "-k5", "-k6", "-o",
salida, NULL );
All se defini que se deba ordenar de acuerdo a cada una de las keys que se
encontraban en los archivos. Al final se almacena la respuesta en un archivo de
salida temporal. Este procedimiento se hizo para los procesos hijos.
4. Tabla de tiempos
Comando\longitud

100 lineas

500 lineas

1000 lineas

csortp

0.017s

0.382s

1.457s

csortpexec

0.012s

0.253s

0.736s

csorth

0.018s

0.392s

1.499s

Primera entrega

Sistemas Operativos

5. Grfico
1,6
1,4
1,2
1
csortp
csortpexec
csorth

0,8
0,6
0,4
0,2
0
100 lineas

500 lineas

1000 lineas

6. Anlisis de los resultados obtenidos


Gracias a los datos que se pudieron tomar, fue evidente que el comando que
menos tiempo tom fue el csortpexec ya que ordena los archivos con la llamada
al sistema de forma concurrente. Por otra parte, el algoritmo implementado para
el comando csorth siempre es un poco mas lento que el csortp como se
pensaba ya que los hilos comparten recursos mientras que los procesos son
independientes. Adicionalmente, se puede ver que mientras el archivo sea mas
grande, el tiempo de respuesta es mayor y crece de forma rpida.
En conclusin, los comandos se comportan de manera congruente con lo que
se pens desde el principio ya que los hilos son un poco ms lentos que los
procesos, aunque sea el mismo algoritmo, y el sort que ofrece el sistema
operativo es ms eficiente al menos en trminos de tiempo.