180 likes | 271 Views
Especificação de um Mecanismo Autonômico em CSP. Adalberto R. Sampaio Junior Doutorado – Cin /UFPE. Ambiente de execução do sistema. S = state?i -> signal!i -> ( next -> S [] execute?x -> Sidx (x) ) Sidx ( i ) = state.i -> signal!i -> execute?x -> Sidx (x) ).
E N D
Especificação de um Mecanismo Autonômico em CSP Adalberto R. Sampaio Junior Doutorado – Cin/UFPE
Ambiente de execução do sistema S = state?i -> signal!i -> ( next -> S [] execute?x -> Sidx(x) ) Sidx(i) = state.i -> signal!i -> execute?x -> Sidx(x) )
Sistemas simulados S1: não determinístico
Sistemas simulados S1: determinístico Estados válidos: 1, 2, 3, 5
Sistemas simulados S3: determinístico Estados válidos: 1, 2
Sistemas simulados S4: determinístico Estados válidos: 1, 5,3,2
Verificação de Traces • Foi verificado se o ambiente e execução S poderia executar os sistemas S1, S2, S3, S4. • Traces • S \{|execute, next|} [T= S1 • S \{|execute, next|} [T= S2 • S \{|execute, next|} [T= S3 • S \{|execute, next|} [T= S4
Mecanismo Autonômico • Modelado com base na arquitetura Mape-K proposta pela IBM. • Quatro processos: • Monitor; • Analisador; • Planejador; • Executor; • Uma base de conhecimento
Mecanismo Autonômico • Monitor check(n) = {s | s <- inter({sym.n},SYMPTOMS), member(sym.n,SYMPTOMS)} Monitor = signal?s -> monitor!s -> ifempty(check(s)) then next -> Monitor elsesymptom_detect!head(seq(check(s))) -> Monitor
Mecanismo Autonômico • Analisador request_change(n) = mapLookup(CHANGES,n) Analizer = symptom_detect?s -> if member(s, SYMPTOMS) then change_plan!request_change(s) -> Analizer else Analizer
Mecanismo Autonômico • Planejador Planner = change_plan?cp -> (mapMember(ACTIONS, cp)) & apply!mapLookup(ACTIONS,cp) -> Planner
Mecanismo Autonômico • Executor Executor = apply?cp -> execute!cp -> Executor
Mecanismo Autonômico Autonomic = ( ( Monitor [|{|symptom_detect|}|] Analizer ) [|{|change_plan|}|] Planner ) [|{|apply|}|] Executor
Mecanismo Autonômico • Base de conhecimento ---------------Knowledge Base--------------- -- S2 --SYMPTOMS = {sym.2, sym.3} --CHANGES = (| sym.2 => change.1, sym.3 => change.2 |) --ACTIONS = (| change.1 => 3, change.2 => 5 |) -- S3 --SYMPTOMS = {sym.2} --CHANGES = (| sym.2 => change.1 |) --ACTIONS = (| change.1 => 1 |) -- S4 SYMPTOMS = {sym.1, sym.2, sym.3, sym.5} CHANGES = (| sym.1 => change.1, sym.2 => change.2, sym.3 => change.3, sym.5 => change.4 |) ACTIONS = (| change.1 => 5, change.2 => 1, change.3 => 2, change.4 => 3 |) ---------------endknowledge Base---------------
Execução do Sistema de Forma Autonômica Au = S [|{|signal, execute, next|}|] Autonomic • Propriedades verificadas • assertAu :[deadlockfree] • assertAu :[deterministic] • assertAu :[divergencefree] • assertS \{|execute, next|} [T= S1 • assertS \{|execute, next|} [T= S2 • assertS \{|execute, next|} [T= S3 • assertS \{|execute, next|} [T= S4 • TO_HIDE = {|symptom_detect, change_plan, apply, next, execute, monitor|} • assertAu \ TO_HIDE [T= S1 • assertAu \ TO_HIDE [T= S2 • assertAu \ TO_HIDE [T= S3 • assertAu \ TO_HIDE [T= S4
Execução do Sistema de Forma Autonômica -- -- monitor.[n] -- execute.[m] A(n,m) = monitor.n -> execute.m -> A(n,m) B(m,n) = execute.m -> monitor.n -> B(m,n) assertAutonomic \ {|signal, symptom_detect, change_plan, apply|} [T= A(3,4) assertAutonomic \ {|signal, symptom_detect, change_plan, apply|} [T= B(4,3)
Refinamento [FD= ---------------Centralized Monitor--------------- -- deterministic -- Monitor check(n) = {s | s <- inter({sym.n},SYMPTOMS), member(sym.n,SYMPTOMS)} Monitor = signal?s -> monitor!s -> ifempty(check(s)) thennext -> Monitor elsesymptom_detect!head(seq(check(s))) -> Monitor ------------------------------------------------- ---------------Distributed Monitor--------------- Non deterministic -- Monitor M(i) = sense?s -> if s == i then (signal.s -> monitor!s -> ifempty (check(s)) thennext -> M(i) elsesymptom_detect!head(seq(check(s))) -> M(i) ) elseM(i) MMM = ||| i : STATES @ M(i) assertMMM \ {|sense|} [T= Monitor assertMMM \ {|sense|} [FD= Monitor -------------------------------------------------