Anda di halaman 1dari 8

Laboratorio 2

Sistemas operativos Ingenier a en ejecuci on en inform atica


Pablo Torres Tram on Hossman Escobar Nicol as Soto Gabriel Tamayo pablo.torrestr@usach.cl gutural.voice@gmail.com nicolas.soto@usach.cl gabriel.tamayo@live.cl Primavera, 2012 v1.0

Objetivos

Comprender y aplicar hebras en sistemas concurrentes.

Motor de base de datos

Un motor de base de datos es un sistema computacional que permite almacenar informaci on de manera estructurada y consistente. T picamente estos sistemas realizan 4 tareas b asicas que son: Insertar (Insert), Seleccionar (Select), Actualizar (Update) y Borrar (Delete). Acontinuaci on se detalla cada operaci on: 1. Insert: Dado una entrada para una tabla en el sistema, la funci on inserta (agrega) la entrada en la tabla. 2. Select: Dada una consulta sobre tablas, el sistema retorna el valor solicitado. 3. Update: Dada una consulta y una tabla, actualiza uno o m as valores de una o m as entradas. 4. Delete: Dada una consulta y una tabla, borra una o mas entrada. Generalmente, un usuario manipula la base de datos utilizando estas funciones b asicas. En este trabajo, usted deber a construir un motor de base de datos elemental utilizando hebras.

Especicaciones

El motor de base de datos por simplicidad tendr a un n umero de tablas jo. Al conjunto de tablas se le denomina lista de tablas (lt). Estas tablas se dar an como parte del enunciado. Cada tabla es en realidad un archivo de texto plano el cual contiene la lista de entradas en la tabla. Por simplicidad, todas las tablas contienen un solo atributo. A cada archivo se le denomina tabla de dato (td). El nombre del archivo corresponde al nombre de la tabla. Cada archivo es u nico. Por su parte, cada tabla contiene su correspondiente lista de entrada (le), donde cada una de ellas se compone de una estructura de datos denominada entrada de tabla (et). Esta estructura es una tupla de dos elementos: el identicador del documento (id) y un atributo asociado (att), formalmente: Atributos = AT T = {s String } Identicadores = ID = {n Z } Entrada de tabla = ET = (id ID, att AT T ) Lista de entrada = LT = {et0 , et1 , ..., etm1 }eti ET Tabla de datos = T D = (id String, lt LT ) Lista de tablas = LT = {td0 , td1 , ..., tdk1 }tdi T D
+

(1) (2) (3) (4) (5) (6)

3.1

Entrada

El motor de base de datos debe recibir como par ametro el n umero de hebras a usar, la direcci on del archivo de consultas y la direcci on del archivo de resultado. Observe la gura 3.1. El programa recibe el n umero de hebras 10 y los archivos queries.dat y queries.dat.out. Note que cada archivo se especica mediante una bandera, al igual que el n umero de hebras. Para este caso: -t, -q y -o respectivamente. El orden de las banderas puede ser cualquiera, no necesariamente igual al que aparece en la gura. Generalizando, el programa requiere del n umero de hebras, el archivo de consultas, y el archivo de salida. La gura 2 mustra la sintaxis de la entrada. $ ./minisql -t 10 -q queries.dat -o queries.dat.out Figure 1: Ejemplo entrada v alida $ ./minisql -t [num hebras] -i [path archivo consultas] -d [path archivo salida] Figure 2: Sint axis entrada v alida Si el usuario ingresara mal la entrada usted deber a validar dichos casos. Existen tres casos posibles detallados a continuaci on: Error 1: El usuario no ingresa la bandera -t. Error 2: El usuario no ingresa la bandera -i. Error 3: El usuario no ingresa la bandera -o. Error 4: El usuario no ingresa el argumento de -t Error 5: El usuario no ingresa el argumento de -i

Error 6: El usuario no ingresa el argumento de -o Error 7: El archivo indicado por el argumento ingresado para cualquiera de las banderas -i no existe. Error 8: El archivo indicado por el argumento ingresado para cualquiera de las banderas -i no es un archivo de texto o es inv alido. Error 9: El archivo indicado por el argumento ingresado para la bandera -i tiene un formato inv alido y/o adulterado. Usted deber a advertir al usuario en caso que se produzca cualquiera de los errores mencionados. Si existe ambig uedad con respecto al error (es decir hay dos o m as casos posibles), usted mencionar a solo el primer error seg un el orden de la lista de errores. Por ejemplo, considere la entrada de la gura 3. El usuario no ha ingresado ni las banderas ni los valores. En este caso el error ha utilizar es el 1, ya que se sucede, y es el primero de todos los que se producen (errores 1, 2, 3, 4, 5 y 6) $ ./minisql Figure 3: Ejemplo entrada inv alida La tabla 3.1 muestra los mensajes a dar al usuario en caso de error. Note que estos errores impiden la correcta ejecuci on de su programa, por lo que frente a estos casos deber a abortar la ejecuci on. Adem as, ante un error, deber a enviar como retorno de la funci on main de su programa el respectivo c odigo para el error. Todo mensaje de error siempre debe ser enviado por el descriptor de archivo stderr. Para validar su entrada se recomienda utilizar la funci on de GNU getopt. Para m as detalles de esta funci on re erase a www.gnu.org. Utilizar esta funci on facilita enormemente la recuperaci on de par ametros desde la consola, por lo cual es altamente recomendable que la utilice. La extensi on de los archivos de entrada es irrelevante. Solo se usan para indicar al usuario la nalidad del archivo. Todos los archivos usado siempre son de texto plano.

3.2

Archivos de entrada

Para construir el motor de base de datos se requiere los archivos de tablas y el archivo que contiene las consultas del usuario. 3.2.1 Tablas de datos

Observe el ejemplo denido en la gura 4. Note que en primer lugar cada entrada en el archivo (l nea) corresponde a una entrada en la tabla. Por tanto el n umero de entradas en el archivo dene el n umero de entradas en la tabla. En cada l nea se dene un identicador (siempre est a presente) y luego el atributo respectivo. Note que el atributo puede contener espacios en blanco y su largo es variable, pero siempre considera tuplas como las denidas en la ecuaci on (1). En el ejemplo, la primera l nea del archivo muestra que el identicador 2 contiene el atributo gato. El sistema tendr a un n umero de tablas jo durante la ejecuci on. Las tablas a usar est an dadas en el directorio ./bd/. Usted deber a validar que dichas tablas cumplen con el formato especicado.

C odigo error 1 2 3 4 5 6 7 8 9

Retorno main return -1 return -2 return -3 return -4 return -5 return -6 return -7 return -8 return -9

Mensaje por stderr Uso v alido: ./minisql -t [hebra] -i [archivo consulta] -o [archivo salida] Uso v alido: ./minisql -t [hebra] -i [archivo consulta] -o [archivo salida] Uso v alido: ./minisql -t [hebra] -i [archivo consulta] -o [archivo salida] Uso v alido: ./minisql -t [hebra] -i [archivo consulta] -o [archivo salida] Uso v alido: ./minisql -t [hebra] -i [archivo consulta] -o [archivo salida] Uso v alido: ./minisql -t [hebra] -i [archivo consulta] -o [archivo salida] El archivo: [archivo consulta] no existe] El archivo: [archivo consulta] no es v alido] Imposible reconocer formato de archivo: [archivo consulta]

Table 1: Tabla de c odigos de error y mensajes relacionados. Note que para el c odigo 5 y 6 puede ser uno de los dos mensajes mostrados.

1 perro 2 gato 5 casa 7 las casas azules 10 otras casas Figure 4: Ejemplo archivo de tabla

3.2.2

Consultas

Por otro lado, se tiene un archivo con las consultas que realizan los usuarios. Una consulta puede ser insertar, seleccionar, actualizar o borrar. La consultas siguen la siguiente sintaxis: insertar : insert [nombre tabla] (id, "val") seleccionar : select [nombre tabla] [id=val | att="val"] actualizar : update [nombre tabla] (id, "nuevo val") actualizar : delete [nombre tabla] (id) (7) (8) (9) (10)

El archivo de consultas se compone uno o m as consultas brindadas por un usuario. Observe la gura 5. Por cada entrada en el archivo se tiene una consulta. Una consulta puede estar compuesta solo por las instrucciones mencionadas anteriormente. Usted deber a validar que el archivo de consultas cumplen con lo especicado en este enunciado.

insert insert select select update delete

tabla tabla tabla tabla tabla tabla

a b a b a a

(1020, "agregar elemento a 1020") (1161, "agregar elemento a 1161") id=1020 att="agregar elemento a 1161" (1020, "cambia el valor anterior") (1161) delete tabla b (1161) Figure 5: Ejemplo archivo de consultas

3.3

Funcionamiento

Determinado los archivos, deber a leer y cargar en primer lugar las tablas de datos en memoria. Esto quiere decir que usted deber a crear una estructura de datos capaz de soportar al motor de b usqueda. La estructura de datos debe ser similar a lo mencionado en la secci on 3. Una vez cargado el motor, deber a leer el archivo de consultas y realizar el mismo proceso, es decir, crear una lista en memoria con todas las consultas. Cargados tanto el motor como las consultas, deber a asignar las consultas a alguna hebra ( o que cada hebra tome un subconjunto de consultas). Para distribuir las consultas en las hebras utilice el algoritmo Round Robin. Puede implementar el algoritmo de Round Robin usando la funci on m odulo (%) como se muestra el algoritmo 1. Note que este algoritmo no utiliza quantum, porque no distribuye tiempo sino consultas. Require: N umero de hebras Nt , Lista de consultas C y n umero de consultas Nc 1: Inicializar lista de listas queriesP erT hread[k ][]. 2: for ( i = 0) ,( i < Nc ),( i + +) do 3: thread = i mod Nt 4: add(C [i], queriesP erT hread[thread]) 5: end for Algorithm 1: Algoritmo de Round Robin. Una vez que cada hebra cuenta con un subconjunto de consultas, entonces cada hebra concurrentemente acceder a al motor para procesar las consultas. El acceso al motor requiere de 5

sincronizaci on ya que la estructura podr a muta (recurso consumible) con el acceso de la hebras. Cuando la hebra tenga acceso al recurso, usted podr a modicar y/o accesar a la tabla seleccionada. Note que la competencia de recursos es a nivel de tabla. Es decir, si una hebra est a leyendo un dato de la tabla ninguna otra podr a escribir, o si una hebra est a escribiendo en la tabla ninguna otra podr a estar leyendo. Una vez realizada la acci on de la consulta, la hebra debe generar el mensaje de salida y almacenarlo para su posterior visualizaci on.

3.4

Salida

Considerando el archivo de entrada de la gura 5, el archivo de respuesta est a dado en la gura 6. La primera l nea responde la primera consulta denida en el archivo de consultas. Para este archivo usted deber a crearlo seg un lo indique el usuario. Cada l nea en este archivo corresponde a las entradas en el archivo de entradas. Dichas l neas se componen de la consulta realizada, el caracter : que act ua como separador y el mensaje generado al ejecutar la consulta. Por tanto el formato de salida corresponde a consulta: mensaje ejecuci on. insert insert select select update delete delete tabla tabla tabla tabla tabla tabla tabla a b a b a a b (1020, "agregar elemento a 1020"): OK (1161, "agregar elemento a 1161"): OK id=1020: (1020, "agregar elemento a 1020") att="agregar elemento a 1161": (1161, "agregar elemento a 1161"): (1020, "cambia el valor anterior"): OK (1161): OK, nulo (1161): OK Figure 6: Ejemplo archivo de salida

3.4.1

Respuestas y excepciones

La ejecuci on de la consultas puede generar diferentes respuestas y gatillar distintos errores. Por ejemplo si se desea eliminar una entrada en una tabla y est a no existe. Para controlar este tipo de eventos, su programa deber a indicar en el archivo de salida las respuestas y los errores que pudieran suceder. Para dicho n se utilizar a los mensajes provistos a continuaci on: 1. Insertar: Agrega elemento a la tabla (a) Si se pudo agregar el elemento OK (b) Si la tabla no existe Error, Tabla no encontrada (c) Si el id existe en la base de datos, entonces la entrada est a duplicada Error, Entrada duplicada. 2. Seleccionar: Obtiene la(s) entrada(s) que cumple con la descripci on. (a) Si se pudo seleccionar un elemento OK, (id0 , att0 ), ..., (idn , attn ) (b) Si no se encontr o ning un elemento OK, nulo (c) Si la tabla no existe Error, Tabla no encontrada 3. Actualizar:Modica el valor de atributo de una entrada. (a) Si se pudo actualizar OK 6

(b) Si no se encontr o ning un elemento con la descripci on OK, nulo (c) Si la tabla no existe Error, Tabla no encontrada 4. Borrar:Elimina de la tabla la(s) entrada(s) que cumple con la descripci on (a) Si se pudo eliminar OK (b) Si no se encontr o ning un elemento con la descripci on OK, nulo (c) Si la tabla no existe Error, Tabla no encontrada

Consideraciones
El programa es background. No debe agregar interactividad con el usuario. Debe controlar la entrada del programa. Sea riguroso. Ante errores, utilice los mensajes provistos y los c odigos de error. Si detecta otro tipo de error que no est a declarado, consulte con los ayudantes. Debe validar los datos de entrada. Por ejemplo el rango de los n umeros. El programa debe crear un pipeline de procesos. Cualquier otra forma no es v alida. La u nica manera permitida para crear hebras es la biblioteca POSIX threads (pthreads) La cantidad de hebras en ejecuci on es variable. Su programa deber a ser capaz de soportar innitas hebras. El nombre del ejecutable debe ser minisql. Debe desarrollar su tarea en C++. Solo para el manejo de hebras puede usar C. Para m as informaci on lea el programa del laboratorio. Ante dudas, consulte con el ayudante. La tarea es individual.

Entregables
1. La entrega corresponde a un archivo de extensi on .tar, el cual debe contener los siguientes directorios y archivos: (a) include/ : Directorio, contiene todos los archivos con extensi on .h. (b) src/ : Directorio, contiene todos los archivos con extensi on .cc o .cpp. (c) bd/ : Directorio, contiene los archivos de las tablas con extensi on .bd (d) Makefile : Archivo, se indica a continuaci on EME.txt : Archivo, se indica a continuaci (e) LE on (f) minisql.cc : Archivo, contiene u nicamente la funci on principal de su programa. 2. El nombre de archivo .tar corresponde al RUT del alumno. Ejemplo: 11.111.111-1.tar. No comprima este archivo (i.e. tar.gz, tar.bzip, etc)

5.1

Makele

Archivo Makefile debe contener al menos 4 reglas: Compilaci on normal, Compilaci on con s mbolos de depuraci on (debug), Compilaci on con tester (test) y limpiar todos los archivos creados durante la compilaci on (clean). Por ejemplo: # # # # make make make make Construye el ejecutable por defecto debug Construye el ejecutable por defecto con s mbolos de depuraci on test Construye el ejecutable por defecto con s mbolos de depuraci on clean Borra todos los archivos construidos incluido el ejecutable

5.2

LEEME.txt

Este archivo contiene las instrucciones necesarias para compilar y ejecutar el programa suponiendo que el usuario es novato. Adem as agregue el nombre de los integrantes y sus emails de contacto respectivos.

Plazos

La falta de uno o m as de los archivos especicados en el punto anterior ser a sancionada, adem as de condicionar su evaluaci on. De m as est a decir que la evaluaci on es estricta en seguir los puntos especicados por este enunciado.

6.1

Primera entrega parcial

La primer entrega parcial debe incluir: 1. Carga de motor de base de datos: Cargar datos en memoria desde los archivos. 2. Carga de consultas: Cargar consultas en memoria desde archivo de consultas. 3. Validaci on de archivo de consultas. La fecha de la primera entrega parcial es la siguiente: Grupo de Hossman: Viernes 9 de septiembre. Grupo de Nicol as: Lunes 5 de octubre. Grupo de Gabriel: Martes 6 de octubre.

6.2

Entrega nal

Fecha de entrega: Lunes 16 de Noviembre hasta las 23:55 hrs. mediante elsitio del curso en usachvirtual.cl. Se realizar a un descuento de un punto (1,0) por cada hora de retraso. Todo aquel alumno que no suba su trabajo hasta la hora indicada m as 6 horas de penalizaci on, ser a calicado con la nota m nima (1,0). Cualquier duda o consulta real cela al foro de ayudant a.