La figura 4.13 muestra la máquina de estados del proceso bwa_be_mgr, mientras que la tabla 4.2 muestra los eventos lógicos que pueden ocurrir en este proceso. Los eventos representan solicitudes para actividades particulares, tales como la recepción de paquetes ó la expiración de un timer. Los eventos mostrados en la tabla incluyen, además de su nombre, su descripción y el tipo de evento.
Figura 4.13. Proceso bwa_be_mgr.
Nombre del evento Descripción del evento Tipo de evento
Process_Create Evento inicial para permitir la inicialización Begsim interrupt
Down_data_traffic Recepción de tráfico para el canal descendente Stream interrupt
Upstream_traffic Recepción de tráfico por el canal ascendente Stream Interrupt
Ranging_request Recepción de una petición de ranging Stream Interrupt
MTN_MAP_time Tiempo de enviar un mapa de mantenimiento Self Interrupt
NXT_MAP_time Tiempo de enviar mapas subsecuentes Self Interrupt
SYNC_time t Tiempo de enviar una señal SYNC Self Interrup
UCD_time Tiempo de enviar un UCD Self Interrupt
Transmitter_Free Señal indicadora de transmisor libre Statwire interrupt
Sync_done Fin del periodo de ranging Self interrupt
Factibilidad de eventos por estado
La tabla 4.3 muestra todos los eventos lógicos y su factibilidad de acuerdo al estado en que se encuentre el proceso. Los eventos son factibles si existe la posibilidad de que ocurran bajo las circunstancias en que está el estado del proceso. Los eventos suprimidos son eventos que pueden ocurrir, pero que no aportan ninguna información útil.
Estado INIT
Ejecutivas de entrada:
Se encarga de obtener las coordenadas de la estación base, crear el proceso TX_Controller, crear las listas con los elementos de información, leer parámetros de simulación, como número de nodos, y crear las listas de calidad de servicio para cada tipo de tráfico, tamaño de los mapas, tamaño de los slots y encabezados e iniciar las variables de estado que se utilizarán como contadores durante la simulación.
Durante este estado se programa el momento en el que terminará el ranging. La variable End_of_Ranging es un parámetro de simulación disponible en el archivo de variables de ambiente. Se crea e invoca el proceso bwa_be_txctl con el fin de completar la inicialización.
Una vez realizadas las tareas anteriores se pasa al estado de ranging.
Nombre del estado Evento lógico Factibilidad
Ranging Down_data_traffic factible
Upstream_traffic no factible Ranging_request factible MTN_MAP_time no factible NXT_MAP_time no factible SYNC_time no factible UCD_time no factible Transmitter_free suprimido Sync_done factible
Idle Down_data_traffic factible
Upstream_traffic factible Ranging_request no factible MTN_MAP_time factible NXT_MAP_time factible SYNC_time factible UCD_time factible Transmitter_free suprimido Sync_done no factible
Idle Traffic_arrival factible
Transmitter_status_indication factible
Wait Traffic_arrival factible
Transmitter_status_indication factible
Estado Ranging
Posibles acciones de acuerdo al tipo de evento:
1) En caso de que llegue un paquete para el canal descendente, se deberá destruir el paquete mientras no se termine de hacer el ranging. Se mantiene el estado de ranging.
2) Si ocurre un evento de tipo de solicitud de ranging (ranging_request) se pasa al estado Rng_rcvd.
3) Si se termina el tiempo de sincronización (Sync_done), entonces se pasa al estado Rng_complete.
Estado Rng_rcvd
En este estado se creará un mensaje de respuesta de ranging (ranging response) con el sid del nodo que hizo la petición, junto con un cálculo del retardo de propagación desde la SS hasta la BS para la corrección del tiempo. Se enviará este mensaje y se destruye la petición. Se hace una transición hacia el estado de ranging.
Estado Rng_Complete
Ejecutivas de entrada
Al terminarse el tiempo de sincronización (Sync_done), se crea y se envía el primer mapa. Se programa una interrupción para enviar el mapa siguiente. Se pasa al estado Idle.
Estado Idle
Las transiciones de estado dependen del tipo de evento lógico:
1) Al recibirse tráfico de la fuente de tráfico descendente se produce el evento Down_data_traffic, se produce la transición SEND_DATA y se pasa al estado Down_data.
2) Al recibirse tramas del canal ascendente, ocurre el evento lógico Upstream traffic, se produce la transición RCV_DATA y se pasa al estado Upstream.
3) En el momento en el que sea necesario enviar un mapa de mantenimiento, ocurre el evento MTN_MAP_Time y se pasa al estado Mtn_MAP con la transición SEND_MTN_MAP ó SEND_STATION_MTN_MAP.
4) Si se genera el evento NXT_MAP_time ocurre la transición SEND_NXT_MAP, y se pasará al estado MAP_time.
5) Al generarse el evento SYNC_Time, es tiempo de enviar un mensaje de sincronía, se produce la transición SEND_SYNC y se pasa al estado SYNC_Time.
6) Al generarse el evento UCD_Time, es tiempo de enviar un mensaje de tipo UCD, se produce la transición SEND_UCD y se pasa al estado UCD_Time.
Estado Down_data
Si se recibe tráfico del canal descendente (Down_data_traffic), se encapsula en un frame MAC y se le asigna la dirección destino en caso de que no la tenga y se transmite. Se pasa al estado Idle.
Estado Upstream
Se revisa la estructura de la trama recibida, si se recibe una trama con una petición de ancho de banda, se agrega ésta a la lista de peticiones, en caso de que la trama contenga datos, se pasa al módulo de estadísticas. Una vez hecho lo anterior, se regresa al estado Idle.
Estado Mtn_MAP
Se crea y se envía un mapa de mantenimiento. Una vez hecho lo anterior, se programa una interrupción para enviar el siguiente mapa. Se regresa al estado Idle.
Estado MAP_Time
Si el proceso llegó a este estado por la transición SEND_NXT_MAP, entonces, se crea un mapa regular, se envía y se programa la interrupción para enviar el siguiente mapa. Una vez hecho lo anterior se regresa al estado Idle.
Estado Sync_Time
Se genera un mensaje de sincronía, se envía, y programa la ocurrencia de la siguiente interrupción SYNC_Time; al terminar se regresa al estado Idle.
Estado UCD_Time
Se genera y envía un mensaje de UCD, programa la ocurrencia de la siguiente interrupción SYNC_Time, una vez hecho lo anterior, se regresa al estado Idle.