1.2 - Exemplo de AADL
A seguir vamos listar um exemplo de uma especificação de uma arquitetura utilizando o AADL:
data lander_state_data
end lander_state_data;
bus lan_bus_type
end lan_bus_type;
bus implementation lan_bus_type.ethernet
properties
Transmission_Time => 1 ms .. 5 ms;
Allowed_Message_Size => 1 b .. 1 kb;
end lan_bus_type.ethernet;
system calculation_type
features
network
: requires bus access lan_bus.calculation_to_datastore;
request_ge t
: out event port;
response_get
: in event data port lander_state_data;
request_store
: out event port lander_state_data;
response_store : in event port;
end calculation_type;
system implementation calculation_type.calculation
subcomponents
the_calculation_processor : processor calculation_processor_type;
the_calculation_process : process calculation_process_type.one_thread;
connections
bus access network -> the_calculation_processor.network;
event data port response_get -> the_calculation_process.response_get;
event port the_calculation_process.request_get -> request_get;
event data port response_store -> the_calculation_process.response_store;
properties
Actual_Processor_Binding => reference
the_calculation_processor applies to the_calculation_process;
end calculation_type.calculation;
processor calculation_processor_type
features
network : requires bus access lan_bus.calculation_to_datastore;
end calculation_processor_type;
process calculation_process_type
features
request_get
: out event port;
response_get : in event data port lander_state_data;
request_store : out event data port lander_state_data;
response_store : in event port;
end calculation_process_type;
thread calculation_thread_type
features
request_get
: out event port;
response_get : in event data port lander_state_data;
request_store : out event data port lander_state_data;
response_store : in event port;
properties
Dispatch_Protocol => periodic;
end calculation_thread_type;
process implementation calculation_process_type.one_thread
subcomponents
calculation_thread : thread client_thread_type;
connections
event data port response_get -> calculation_thread.response_get;
event port calculation_thread.request_get -> request_get;
event port response_store -> calculation_thread.response_store;
event data port request_store -> request_store;
properties
Dispatch_Protocol => Periodic;
Period => 20 ms;
end calculation_process_type.one_thread;
A primeira coisa a notar sobre este modelo é o nível de detalhe com o qual a arquitetura é descrita. Um componente (calculation_type.calculation) é executado em um processador físico (the_calculation_processor), que executa um processo (calculation process type.one thread), que por sua vez contém um único segmento de controle (thread de cálculo), todos os quais podem fazer dois tipos de solicitação-resposta através de portas (request get/response get, request store/response store) sobre um barramento Ethernet (lan bus type.ethernet). Cada um destes diferentes níveis de modelagem está conectado através de composição, mapeamento de portas, e assim por diante. Este nível de detalhe enfatiza a importância de ferramentas, como editores gráficos, para modelar essas informações em uma forma mais compreensível.
A segunda coisa a notar sobre esta especificação é o uso de propriedades para definir as características específicas de alguns dos elementos (por exemplo, o processo de cálculo é executado periodicamente, a cada 20ms). Em uma especificação completa do sistema, essas propriedades seriam ainda mais detalhadas e elaboradas, e poderiam ser usadas por ferramentas para responder a questões sobre a disponibilidade e tempo que são críticos em um contexto em tempo real.