ELO-330: Programación de Sistemas
Tarea 2: Formulación y Selección de Preguntas en Foro
Objetivos
- Diseñar una arquitectura para comunicar, vía memoria compartida,
procesos no relacionados entre sí dentro de una máquina
- Aplicar semáforos para el acceso exclusivo a datos compartidos en la
memoria de una máquina
- Ejercitar el uso de GIT
- Preparar documentación de un sistema de software
- Conocer un mecanismo para ejecutar aplicaciones a través de la WEB
usando PHP.
Contexto
En las comunidades con democracia representativa es común organizar elecciones donde la comunidad elige a quienes la representarán en consejos, centros, o quienes las dirigirán. En estos procesos de elección es necesario informar a la comunidad los proyectos o visiones de cada candidato a un cargo de representación. Para tal propósito se suelen organizar foros o debates donde la comunidad tiene la oportunidad de formular preguntas a los candidatos. Para organizar tal proceso, suele haber un moderador que recibe las preguntas y, generalmente al azar, las selecciona para ser respondidas por los candidatos.
Inspirada en la situación previa, en esta tarea se desarrollarán tres programas: uno para ingresar una pregunta, otro para seleccionar una pregunta al azar, y un tercero para poner en marcha y concluir el foro de preguntas. Los tres programas corren en una misma máquina. Con la ayuda de una pequeña aplicación escrita en PHP, el programa seleccionador de preguntas se puede ejecutar a través de un servidor WEB y así mostrar cada pregunta en formato html a través de un browser. Se busca principalmente diseñar un sistema básico y aplicar conceptos de programación listados en los objetivos. No se busca un sistema a toda prueba; por ejemplo, aspectos de seguridad para restringir el acceso a ciertos usuarios no son considerados.
Programas a Desarrollar
Desarrolle los siguientes programas: foro_setup, foro_qsu (por question submission), foro_qse (por question selection).
foro_setup : Foro setup - programa para iniciar y poner término al
foro.
Sintaxis: foro_setup ( b N | e ) Nombre_parcial_de_zona_compartida
Descripción: foro_setup crea una zona de memoria compartida y los recursos
necesarios para su acceso exclusivo (semáforos) por parte de otros
procesos. Usted puede imaginar que se crea un buzón para almacenar
preguntas. Este programa usa la biblioteca POSIX. La zona de memoria
compartida almacena un arreglo de N entradas y otros datos para
implementar una lista circular. Cada entrada del arreglo puede tener la
siguiente estructura:
struct Question {
char name[MAX_NAME_LENGTH]; /* Name of who asks the
question */
char text[MAX_QUESTION_LENGTH]; /* question
text */
};
La lista circular de preguntas puede tener la siguiente estructura:
struct Circular_List {
int head; /* first element index */
int tail; /* last element index
*/
struct Question questions[N];
};
El parámetro b indica que se desea dar inicio (begin) al foro, en este caso debe ingresarse además el parámetro N, número máximo de preguntas de la lista. El parámetro e (end) pone término al foro y libera los recursos compartidos creados con la opción b. En ambos casos, al final se debe especificar un nombre (string) para identificar de manera única un foro particular en la máquina. Este string es usado por los programas para identificar los recursos compartidos dentro del sistema (memorias, semáforos, etc). El programador elige post-fijos de este nombre para identificar de manera única la memoria compartida, los semáforos, u otros recursos compartidos.
foro_qsu: Foro question submission - programa para ingresar
una pregunta al foro.
Sintaxis: foro_qsu N Nombre_parcial_de_zona_compartida
Descripción: foro_qsu solicita al usuario su nombre completo y luego su
pregunta. Posteriormente, almacena ambos textos en la lista de preguntas y
termina. El parámetro indicado, Nombre_parcial_de_zona_compartida,
permite identificar en forma única el foro al cual ingresar la pregunta.
Si la lista de preguntas estuviera llena, foro_qsu se bloquea hasta que
una pregunta sea removida por foro_qse y así foro_qsu pueda ingresar su
pregunta en la lista.
foro_qse: Foro question selection - programa para seleccionar una
pregunta del foro.
Sintaxis: foro_qse N Nombre_parcial_de_zona_compartida
Descripción: foro_qse selecciona y remueve desde la lista circular una
pregunta y envía a su salida estándar el nombre de su autor y la pregunta
en cuestión. Para su mejor visualización en un navegador (tamaño, color,
font, etc) el nombre del autor y su pregunta son enviados a la salida en
formato HTML. El parámetro indicado, Nombre_parcial_de_zona_compartida,
permite identificar el foro del cual extraer la pregunta. Una vez
seleccionada la pregunta ésta es removida de la lista de preguntas dando
así la opción a que una nueva pregunta sea ingresada. En ausencia de
preguntas en la lista, foro_qse debe bloquearse hasta que foro_qsu ingrese
una pregunta.
Mientras foro_setup y foro_qsu son ejecutados desde la línea de comandos, foro_qse es ejecutado a través de una aplicación PHP invocada desde un browser. Así el browser interpreta el lenguaje html y se logra un mejor despliegue de la pregunta.
Como parte de lo solicitado en las instrucciones para tareas en C (o C++), usted debe incluir la página web con el código PHP que permite ejecutar foro_qse.
Extra-crédito: Usted puede ganar 5 puntos adicionales (su nota igualmente se satura en 100), si propone un esquema en que el parámetro N puede ser omitido al ejecutar foro_qsu y foro_pse.
Ayuda
* Aquí usted puede ver una página PHP básica para ejecutar esta aplicación simple. La página PHP contiene:<?php
system("./exe foro_2019_2s_I");
?>
Usted puede dar mayor formato a la página incorporando más rótulos HTML
según desee.
* Revise estos ejemplos y estos ejercicios.
* En clases o en horario de atención a estudiantes, el profesor atenderá
con gusto cualquier consulta.
* Más ayuda puede ser incluida en la medida que surjan preguntas.
* Haga su tarea de a poco y con tiempo.