Clase cMailBox

Entorno.

La clase cMailBox, surge a partir de la dos clases recientemente expuestas, la cMessage, y la cMessageBox, con el fin de abarcarlas y hacerlas accesibles a todo el sistema. Así pues la clase cMailBox, se instaura como un sistema de mensajería al servicio del sistema.

Como se verá posteriormente el sistema de mensajería está totalmente integrado en el planificador para conseguir unos alos niveles de rendimiento. Vamos pues a continuación a exponer el desarrollo de la clase.

Grafo.

Vamos a ver cuales son los miembros atributo y los miembros función del Objeto:

  cMailBox
Privado:

 

 

 

Público:

Owner

BoxArray

NumBox

HashFactor

error

Privado:

 

Público:

SearchHashFactor

HashFunction

cMailBox

AddBox

MyBox

SendMsg

ExistMessageBox

RemoveBox

ReturnOwner

~cMailBox

 

Definición de miembros.

Atributos.

Definiciones previas.

Con anterioridad a la definición de los atributos y miembros de la clase, se ha optado por definir una serie de constantes y estructuras que hacen más asequible la programación. Para ello pues vamos a nombrarlas:

Número máximo de procesos:

MAX_PROCS: Es redefinible en el momento de la compilación, pero no durante la ejecución. MAX_PROCS por defecto tiene un valor de 1024, ya que éste es el número máximo de tareas que admite el sistema, al estar limitadas por la longitud de la GDT. Se tendría que hacer un estudio previo exaustivo, de los lugares específicos de implantación para saber el número máximo de tareas que se pueden ejecutar a la vez, de este modo se podría recompilar de una manera prsonalizada, y hacer un gasto menor de recursos, obteniendo un rendimiento más óptimo del sistema.

Constates de error

Se darán posteriormente indicación de los miembros que utilizan estos mecanismos.

Mecanismos de bloqueo:

Se darán posteriormente indicación de los miembros que utilizan estos mecanismos.

Nombre de la estructura: RegMessageBox

Atributos:

Owner.

Tipo: void.

Cometido: Almacenar lla @ del propietario del buzón.

BoxArray

Tipo: Array [MAX_PROCS] del tipo RegMessageBox;

Cometido: Es el array que contiene los buzones de los procesos y mapa de características.

NumBox

Tipo: unsigned int, Almacena e número de buzones ocupados del sistema.

Cometido: Almacenar el número de buzones ocupados del sistema.

HashFactor

Tipo: unsigned int, Clave de Función Hash.

Cometido: Almacena el número clave hallado para encontrar la @ rápida de los buzones.

error.

Tipo: int, contenido del último error ocurrido.

Cometido: Dar constancia del último error cometido, es posible que haya funciones que no lo hagan, comprobar su valor inmediatamente después de llamar a una función, si se quiere saber su resultado a ciencia cierta.

Funciones.

SearchHashFactor.

p1 SearchHashFactor();

Parámetros:

Cometido: Encontrar el número primo inferior más cercano, a la constante del sistema MAX_PROCS.

Pseudocódigo:

  1. p1 SearchHashFactor()
  2. inicio
  3. para(c1=MAX_PROCS hasta 0)
  4. para(c2=c1-1 hasta 1)
  5. si(c1%c2)
  6. flag=1;
  7. salir;
  8. sino continuar;
  9. finsi
  10. if(flag==0) devolver c1;
  11. finpara
  12. finpara
  13. devolver 0;
  14. fin.

HashFunction

p1 HashFunction(p2);

Parámetros:

Cometido: Dada la @ de una tarea, mediante una sencilla función hash, haya la posición del buzón de destino dentro del array de buzones.

Pseudocódigo:

  1. p1 HashFunction(p2)
  2. inicio
  3. devolver p2%HashFactor;
  4. fin.

cMailBox.

cMailBox();

Parámetros: No necesita.

Cometido: Constructor. Inicializa el buzón, dando como propietario él mismo.

Pseudocódigo:

  1. cMailBox()
  2. inicio
  3. Owner=this;
  4. HashFactor=SearchHashFactor();
  5. NumBox=0;
  6. rellenar_con_0 BoxArray;
  7. fin.

cMailBox(p1);

Parámetros:

Cometido: Constructor. Inicializa el objeto asignando como propietario a p1.

Pseudocódigo:

  1. cMailBox(p1)
  2. inicio
  3. Owner=p1;
  4. HashFactor=SearchHashFactor();
  5. NumBox=0;
  6. rellenar_con_0 BoxArray;
  7. fin.

AddBox.

p1 AddBox(p2);

Parámetros:

Cometido: Añade un buzón ya creado con @ p2 al sistema de buzones propio del sistema, si se incurre en algún error, devolverá uno de los valores descritos con anterioridad dentro de la sección "Constantes de error" de éste mismo capítulo.

Pseudocódigo:

  1. p1 AddBox(p2)
  2. inicio
  3. var
  4. ind, boxCount enteros;
  5. si(todos_los_buzones_llenos)devolver bNOSPACE;
  6. ind=HashFunction((entero sin sig)p2->ReturnOwner())
  7. boxCount=0;
  8. mientras(buzon_no_vacío)
  9. si(++ind>MAX_PROCS)
  10. ind=0
  11. finsi;
  12. si(revisados_todos_los_buzones_ocupados)
  13. devolver bNOFOUNDOWNER;
  14. finsi;
  15. finmientras;
  16. bloquear_registro;
  17. añadir_buzon_
  18. incrementar_num_buzones;
  19. desbloquear_registro;
  20. devolver bNOERROR;
  21. fin.

MyBox

p1 MyBox(p2);

Parámetros:

Cometido: Dado un propietario de un buzón devuelve la @ física del buzón. Atención no la posición dentro del array de buzones, si se incurre en algún error, devolverá uno de los valores descritos con anterioridad dentro de la sección "Constantes de error" de éste mismo capítulo.

Pseudocódigo:

  1. p1 MyBox(p2)
  2. inicio
  3. si(todos_los_buzones_llenos)devolver NULL;
  4. ind=HashFunction((entero sin sig)p2->ReturnOwner())
  5. boxCount=0;
  6. mientras(buzon_no_vacío)
  7. si(++ind>MAX_PROCS)
  8. ind=0
  9. finsi;
  10. si(revisados_todos_los_buzones_ocupados)
  11. devolver bNOFOUNDOWNER;
  12. finsi;
  13. si(propietario_de_buzon_elegido==p2)
  14. devolver buzon->dirección();
  15. finsi;
  16. fin.

SendMsg

p1 SendMsg(p2);

Parámetros:

Cometido: Mandar un mensaje p2, si se incurre en algún error, devolverá uno de los valores descritos con anterioridad dentro de la sección "Constantes de error" de éste mismo capítulo.

Pseudocódigo:

  1. p1 SendMsg(p2)
  2. inicio
  3. var
  4. ind entero.
  5. si(todos_los_buzones_llenos)devolver bNOSPACE;
  6. ind=HashFunction((entero sin sig)p2->ReturnOwner())
  7. boxCount=0;
  8. mientras(buzones_llenos<MAX_PROCS)
  9. si(dueño_del_buzon[ind]=p2)
  10. mandar_mensaje dirección_destino_del_mensaje;
  11. finsi
  12. si(ind>MAX_PROCS)
  13. ind=0;
  14. finsi;
  15. incrementar ind;
  16. finmientras
  17. devolver bNOFOUNDOWNER;
  18. fin.

ExistMessageBox

p1 ExistMessageBox(p2);

Parámetros:

Cometido: Dada la @ de un proceso nos indica si tiene creado un buzón, em importante a la hora de mandar un mensaje, si se incurre en algún error, devolverá uno de los valores descritos con anterioridad dentro de la sección "Constantes de error" de éste mismo capítulo.

Pseudocódigo:

  1. p1 ExistMessageBox(p2)
  2. inicio
  3. var ind entero.
  4. si(todos_los_buzones_llenos)devolver bNOSPACE;
  5. ind=HashFunction((entero sin sig)p2->ReturnOwner())
  6. boxCount=0;
  7. mientras(buzones_llenos<MAX_PROCS)
  8. si(dueño_del_buzon[ind]=p2)
  9. devolver bEXIST;
  10. finsi
  11. si(ind>MAX_PROCS)
  12. ind=0;
  13. finsi;
  14. incrementar ind;
  15. finmientras
  16. devolver bNOEXIST;
  17. fin.

RemoveBox.

p1 RemoveBox(p2);

Parámetros:

Cometido: Borar el buzón de un propietario definido por la @ p2, si se incurre en algún error, devolverá uno de los valores descritos con anterioridad dentro de la sección "Constantes de error" de éste mismo capítulo.

Pseudocódigo:

  1. p1 RemoveBox(p2)
  2. inicio
  3. var ind entero.
  4. si(todos_los_buzones_llenos)devolver bNOSPACE;
  5. ind=HashFunction((entero sin sig)p2->ReturnOwner())
  6. boxCount=0;
  7. mientras(buzones_llenos<MAX_PROCS)
  8. si(dueño_del_buzon[ind]=p2)
  9. mientras(registro_bloqueado)
  10. finmientras;
  11. bloquear_registro;
  12. borrar_mensaje;
  13. inicializar_registro;
  14. decrementar num_mensajes;
  15. devolver bNOERROR;
  16. finsi
  17. si(ind>MAX_PROCS)
  18. ind=0;
  19. finsi;
  20. incrementar ind;
  21. finmientras
  22. devolver bNOEXIST;
  23. fin.

ReturnOwner

p1 ReturnOwner();

Parámetros:

Cometido: Devuelve el propietario del buzón expresado en forma de @, si se incurre en algún error, devolverá uno de los valores descritos con anterioridad dentro de la sección "Constantes de error" de éste mismo capítulo.

Pseudocódigo:

  1. p1 ReturnOwner()
  2. inicio
  3. devolver Owner;
  4. fin.

~cMailBox

~cMailBox();

Parámetros: No necesita.

Cometido: Eliminar la instancia en memoria del objeto cMailBox, además de recorrer el array de registros de buzones, aantes de eliminarlos llama a los destructores de los mensajes que contiene cada uno.

Pseudocódigo:

  1. ~cMailBox()
  2. inicio
  3. mientras(buzones_revisados<MAX_PROCS)
  4. si(registro_ocupado)
  5. eliminar_buzon;
  6. finsi;
  7. finmientras;
  8. fin.


zeusv2@geocities.com

Última actualización de la página: 12/03/99


Esta página está hospedada en   Consigue tu Página Web Gratis