Skip to content

Indicaciones sobre el Diseño de la práctica 3

armando-ferro edited this page Mar 28, 2018 · 1 revision

Esta práctica tiene un tiempo de desarrollo de tres semanas. El trabajo de laboratorio debe orientarse a adquirir las habilidades necesarias para garantizar que el alumno puede enfocar el desarrollo de la práctica en condiciones y pueda superar la prueba de laboratorio suficientemente. El desarrollo de la práctica en todo su enunciado dependerá del interés del alumno y del trabajo adicional que pueda realizar fuera de las horas regladas de laboratorio. Esta guía está más enfocada a proponer una metodología sencilla de trabajo en laboratorio que pueda servir para formar suficientemente al alumno para conseguir sus objetivos. La secuencia de pasos a realizar en el tiempo de laboratorio es la siguiente:

  1. Pensar previamente en qué tipo de información se quiere almacenar    en el segmento de memoria compartida y como se va a organizar su uso.
  2. Crear un segmento de memoria compartida (shmget()) de un tamaño adecuado para almacenar la información que se quiere tener en él. Hacer esto desde el primer proceso de la aplicación que lo precise y conseguir que todos los procesos se enganchen a él (shmat()).  
  3. Comprobar con ipcs si el segmento de memoria está disponible en el sistema.
  4. Escribir un mensaje en la memoria en una posición determinada desde el proceso servidor  y observar si se puede acceder a él desde un proceso cliente.
  5. Crear un proceso monitor que pueda presentar en la pantalla la información estructurada que se almacene en el segmento de memoria compartida.
  6. Estudiar la problemática de accesos concurrentes que se puede presentar en la aplicación y diseñar los recursos de sincronización que se crean adecuados.
  7. Diseñar un semáforo sencillo de exclusión de acceso a una parte del sistema (por ejemplo la actualización de contadores de paquetes pendientes entre clientes y servidor) y construir una sección crítica clara (por ejemplo metiendo retardos exagerados de 2 seg en medio de la sección crítica) para observar que se están bloqueando los procesos como corresponde.
  8. Construir los semáforos adecuados (semget()) e inicializarlos a su estado adecuado (semctl()). Comprobar que todos los procesos de la aplicación tienen acceso al semáforo y que éste es visible como un recurso del sistema (comando ipcs).
  9. Construir las operaciones de semaforización a aplicar en cada caso con semop(). Estudiar si cada una de las secciones críticas está correctamente diseñada.
  10. Proteger el estado de los semáforos contra eventualidades como muerte de un proceso de forma inesperada, cierre de un programa de forma desordenada, etc. Se debe de evitar que el sistema quede bloqueado por una de estas circunstancias. Si se rearranca la aplicación los recursos deben de ser restaurados de forma adecuada. Si se es capaz de identificar y resolver estos pasos en laboratorio, el alumno no tendrá ningún problema en resolver la prueba de laboratorio y en orientar la realización del ejercicio práctico final