! !"##$"$ %& ! !"##$ $ ' ( )" $ " * +, --- . INDICE....................................................................................................................................................2 1. INTRODUZIONE ..............................................................................................................................3 1. ARCHITETTURA .............................................................................................................................4 3 ARCHITETTURA TECNICA ...........................................................................................................6 3.1 ARCHITETTURA MULTI-THREAD ......................................................................................................6 3.2 THREAD INTERNI E INTER-THREAD COMMUNICATION......................................................................8 3.3 INTER-PROCESS COMMUNICATION ...................................................................................................8 4. SCRIPT DI CONTROLLO APPLICATIVO: STREAM .............................................................10 5. PRECALCULATED LOAD-FACTOR SCHEDULING ..............................................................12 6. STRUTTURA DEL DATABASE 'FLOWMANDB' .....................................................................14 " ! / -0 . 1 7 .5 - , • 2 . + 31 455 - .% . 5 ++ . ( 5 . 8 * + 4 . . 5 5 6 6 . 4 6. 5 % 5 . 0 % 5 . 8 1. 1 . .5 , • 4. 5 % ! 9 ! ! 4 ! . :4 5 ; .4 5 8 . ( ( + 9 .5 5 ++ 6 . 5 = 4 !> .3.1 .5 5, 1 4 .< + 5 %. 6 6 . 6. 4 ?. ++ 6 . / -4 . 1 ; ++ ( * 4 . .5 4 4 " 5 4 .% ++ (; 4 . " @ .%1 6 . . 4 ( 5 A . +C 4 ! ( A 5 . $ < 2 . 5 4+ 4 5 6. 4, ; 5 . 4. 2+ 6 . ;/ -! .%1 6 . 1 . 1 4 55 .4 5 9 < < 1 .6 6 " + ( % . *5 . # + % % / -! . .! ( . + . 4 . 0 ( 9 5 5 % 4. . (;/ 5 ' 1 F< 6 ., . . 8 + .6 5 % 1. ++ ( 4 . ++ (5 % 5. % 6 6 . . .+ 1 + ( ( 51 . 2 9 .5 % 5 . . / -!' 4 + 5 5 . 8 ( 5 + . < 5 / -!' + 6. $ 6. +B . + (5 5 . %.6 . 5 %7 .5 - + ( . 4 . + (. + 31 2 . 5 + .1 4 1 . + %4 . . % D5 6 . 5 E>0 . & . D5 6 . 5 %1 1 . *4 * 5 . / -0 . 1 ! ++ . & G ++ . H( . = .1F " & *+ $ & # ' H(. 4 …. ! IG H& . ! H(. > 3 .1 ! 4 J .5.1 ! 4 J .5.1 ) ! + ! * 5 -. ! *. . ! * 6 . ! . .1 (% ! H(. ! H(. .' .1 . 11 #,-./,- /1 @ *4 5 5 " . (5 .6 4 4 " ( " # ! / -0 . 1 ! ++ 5 4 .% ++ (; 5 6 ., ., *4 * 45 ; < , < 4 E H(. 2 5 + 5 / -! . ; + 5+ 5 / -!' ;' K < * + . + . * 4 + + + 6. 5 < 5 .+ 4 5 / -! ( + 5 / -! . . .5 1 , + 5 1 . +. + 5 / -0 . 1 * ( . .5 D (6 . 5 (6 . 5 (6 . 1 8 . 5 . 6. 6 66 . . .1 5 1 . * 5 (. ( 1 %.6 . + (. .% . 5 / -0 . 1 L + 51 . 5 1 ( . * 5 . % 1 (. 5 1 . 5 + .1 1 5 K ++ ( 5 . . ;+ ( % D .6 5 % ++ ( 5 1. 5 . 8 .< .6 ( 5 1 . . ; 11 <L + 51 (. . 9 M ! . ! .1 5 . 4. + 5+ 6 . ++ + 5 ( ( 2 / -0 . 1 .%1 6 . • • • • • 4+ .5 . 5+ . +C 5 . 5 . (6 . . 5 D 4 5 6 ., µG 6 . ++ (5 % 5 .2 5 µG ++ ' K + B ( +C µG 4 5 6. 4 ++ 5 . .+ .%1 + 1. + E 5 µG ( 4 5 . 5 4 . 5 1 (. * 5 1. + 5 .6 . 5 4 !M ;µG < 5% . 5 . 1 . ., . 9 .6 . 5 µG ( . 4 . . 1. . 5 + 8 + .6 6 .< + . ; &< . +C4 6 . 5 µG ++ ++ ( ( 1. ( . 5 + ++ ( ( . D 5 .6 ( +, ; ( *. 5 5 % % ( 'K . . 5 .4 4 6 . 5 1. + 'K ( (< + 1. ' K ; 9 .5 + + %* 5 1 . .5 *+ 4 5 .%1 1 : %.6 . 5 6. . 5 + . 5 + * + . . :4 5 . µG < + 1 5 1 (. ;+ .1 11 5 K F< 1 4 5% ; 9 .6 . 5 µG 5 (. + 1 5 41 ( 4 . ++ ( ( 5 1 (. 55 5 5 + ;+ 5 5 , 4 F< .+ ( 5 1 (. ( . 1 5 / -0 . 1 4 . . .5 5 1 (. . 51 4 . 6. ; 5 ( µG < 5 6 .5 4 ;- ..1 ( % < ( 5 . 4 ++ ( 5 µG + B1 4 5 85 1 . 2 . . 4. 5 / -0 . 1 + + 5 ( ++ # ++ ( ( .6 . ( . 5 + 0 ?. * + . . +C 4 2 + 6 6 . 4 5 . .. 4 5+ 4 . . .. . ' 4 !* 5 + 5 / -! . ; + ( H( . E < 5 (. + . . 4 .9 . .5(5 . . * 5!4 4 K (. 4 . . ( 5 .! 4 5 (8 . * 5!4 4 K( . . . . 85 . ++ 6 . 1 % ;/4 . < * + 4 :+ 5 / -0 . 1 5 4 . .. 4 . ( 5 :4 . + 5 / -!' ;' K µG ++ (< + . + 4 + . :. (. 5 . + 'K + 4 ; .9 . ' K 2%.6 . 4 . :1 . 5 / -0 . 1 4 55 6 . ++ (< @ .%1 6 . . . . 4 + . 4 ( ; / -! . * / -!' < (2 . + 'K +. 5 6. % % 4 *. 0 + . 4+ 4 . ( 9 + H(. E 'K< + . 4 4 + 5 &! .+ 5 4 + 5 .6 6 66 . • • • N = O. . OPPPPPPPP N = O= 5K ' 1. (6 + . . • ' 1. .. . + 6 6 , • : (6 . 5 + . . . 5 . . 4 5 &! *4 *4 *4 *4 . NO. * + *4 . 55 ( . + 6 6 , : .6 5 (8 : .6 5 ( 8+ 1. 5 + : (6 . 5 (65 ' .%1 5 &! @=O. 5 5 :4 . / -0 .1 ; ++ 6 . 5 N @ " 4 4 ! * 55 N @ 4 .! * 5 ( . + 6 6 , +4 5 4 5 .+ : (6 . 5+ : .; ( +:5 ++ . 3 + ++ (6 5 .% ( 55 ( . 4 . .. + ( 6 6 .!4 5 < . * . !* 5 5 &! . . Q1. *5! * 5 + . 5 . .. 5 6 .! 4 . . 9 ( 4 11 5 * 5 + . .. . 3 55 ( * 4 .5 . . 4 5 & ! . ++ ( , • ' OPPPPPPPP ( . 5 %. . &! . + 1. (6 ++ ( N @ 2 . '!0 . 1* + 6 66 . 5 ++ 6 . . ( 4 !+ 4 !* 5 * '! ' ( ++ 5 ? , ( . + 4 . 0 %7 .5 " ;P@ '! P .5 5 @ - 3 ( ' 31 < 2 5 9 + % 4 5 ( ++ + + 31 / -0 . 1 ( . + . &( 8 6 6 + . (( . .% 5 + .1 " A .5 1. + 5 / -0 . 1 ! ++ . . .4 .! * 5 .+ 5 . ! * 5; . + * 5; . + 1. .. . (< %1 1 . . . 5 .+ .5 . + 1. (6 '< N @ + .+ 5 *5! N @ MAIN thread - stderr banner - read .ini configuration Applicazione KerNet - build services table - call KSRV_Initiate (XParam) KSRV_Initiate (XParam) - initialize transactions call Init_XXXXXXXXs () - starts up Listeners for all services - call KSRV_Ready () KSRV_Ready () KSRV_Shutting () - sleep (∞ ∞) KSRV_Terminate () - on Process termination - call KSRV_Shutting () - stop Listeners for all services call LSNR_Terminate () LSNR_Initiate (SvcName, XParam) - terminate transactions call Term_XXXXXXXXs () LSNR_Terminate () - call KSRV_Terminate () TASK_Initiate (SvcName, XParam LISTERNER thread TASK_Terminate () - task initialization - call LSNR_Initiate (SvcName, XParam) - create listener socket { - infinite loop - accept calls on listener socket Init_XXXXXXXX () - starts up Child task for connected socket Term_XXXXXXXX () CHILD threads (server) Proc_XXXXXXXX () - task initialization - call TASK_Initiate (SvcName, XParam) { - infinite loop Corpo della Applicazione - Receive_First on child socket - handle application transaction call Proc_XXXXXXXXs () - call TASK_Terminate (SvcName) /1 " ! ++ 6 . N @ , + ;+ 5 N @ 5 & ! $ 6. 5 . ++ (8 (< 01 + 5 / -! . * 5N @ + %* * 5. .+ . / -!' ; + ( +C * 5 . . + . 55 6 6. . +, * ( 1. : H( . 4 J .5 5 : H(. <L " H( . E 'K< ( 14 . 5 ( 85 (8 5 . . 45 .4 ;9 %! * ( 1. (65 5 + 1 * 55 6 6.5 . + 4 . 4 5 4 . 6 . . ! * 5; K.* < + 00 + 5 5 / -! . . 9 / -!' +54 , . "# . 1. + " 1 .. .1 5 %. ; "# ++ 5 + * ( 25. 4 . . 45 4 ; + ( H( . E . 4 5 4 . 6 ., ', 9 4 . ++ ( <L . , .+ 1. . 5 5 * 5 1 + 4 . 4 +B + L 'K< 5 :4 .. . + 4 . . . N @ . . 5 ++ ( + + 1. . * ?. 11 K .* + 4 5 . * 5+ 5 ; < 5+ .4 11 5 ( .* 5 . 4 ; < . + 514 * 5 . . 2+ . ( 4 11 * 5 + R 1. * 5 * 5 ( .( .4 11 , 9 .5 . 11 K .* 2%.6 . 4 . . 5 5 * 5; . .5 4 11< " ; .< % " ; (< " ; .< 3 % 4 & ( % "# , + 1. ++ 5 + . 5 .. . '5 ++ 1 5 ++ 5 * 55 5 .4 5 * 1. + + . .% . 5 + . 4 . * 4 ( L * 5 . + 5. 4 4 * 55 (6 . . ; . . K .* 5 5 < 4. * 5 ( 2 . * 5! *5N @ .+ 5 (6 ' " "# " % % " # # ) & %! # , 6 6 (4 . . ( / -!' ' K + : (6 . 6. 4. 5 µG ++ ( 4 .4 5 Q . * 54 4 K5 5 + 1. µG %1 1 . 4 . 6 .1 . !+ 5 . / -0 . 1 ! ++ 4 . 6 . ' * 5!4 4 K < ; 5 + . 4. . . 4. 5 *+ $ *+ $ *+ $ 04 K 04 K 04 K ! IG H& . & ! + ! * 5 -. ! *. . ! * 6 . ! . .1 H(. 4 …. " ' " ! H(. ! H(. ! H(. > 3 .1 ! 4 J .5.1 ! 4 J .5.1 .' .1 . 11 ! .. . ' .. . ' -. Q * 50 4 K (6 . ' /1 ! 5 4 . 6 . 5 . / -0 . 1 ! ++ . 5 %6 @ D4 5 D * / -0 . 1 4. S 4D( . 6 6 + .5 + .1 1 5 5 %.6 . 5 ( 8 .. 1 . 5 . (. D . . 5 + E (. ( . * 5 . . 55 1 . 5 1. .1 (. ++ ( %4 5 4 ?. .. 1 7( 5.% 4 . 5 . + % (. Q1. (. ( 5 + .%1 6 . 5 . + + E 11 5 . . E ?. + 4 • • • • • + ; H( . =H 0 ++ . 6 . 5 5 %.6 . 5 (. 5 9 1. + + 1 . (. ( Q1. * 5 ! 4!0 *. < E 45. + ( . * 55 5 4 . ++ 1 + 1 . 5 . 4 D( . + =H 0 2 .( 4 . 5 5 %. 4 . 5 D(. . . (. 4. 5, + 4 1 .4 ( .1 9 .6 5 M 5 1 + 1 D(. 4 - ..1 + . 5% 5 9 .6 5 µG 51 % 4 - ..1 1 2 + . 4+ 5 + Par1, 5 + + =H 0 stream test, version = 3.35, "Stream Test" [ Par0, 5 . *. ( 1. 5 4 0 *. ; 0< 6 6 D . . 5 + E . " . (. 1 5 11 1. 5 4+ 1. . 1. * 5 44 . . 4 0 .+ + . =H 0 1 E . 1 (8 Par2 ]; setvar var[1] = "pippo"; setvar var[2] = "pappo"; setvar var[3] = "peppo"; putenvparam var[1] = var[2] in var[3]; setvar var[1] = "rippo"; setvar var[2] = "rappo"; setvar var[3] = "reppo"; getenvparam var[1] = var[2] from var[3]; /* primo job */ setvar var[2] = "hello"; if (Par1 == "1") if (Par2 >= "2") opmsg ("attenzione: par2 maggior di 1 !!!"); exit (1); endif; job myjob1 (par0=$Par0, par1="parametro-1", par2=$Par2); opmsg ("myjob1 eseguito!!!"); setvar var[1] = "fine"; else setreg reg[2] = 22; setvar var[1] = "hello"; job myjob2 ( par1=$Par2, par2="parametro-2" ); opmsg ("myjob2 eseguito!!!"); endif; + . 5 =H 0 . + ( 5 if (exitcode < 0) opalarm (0x9B1c, "errore!!!"); exit (255); endif; /* secondo job */ if (var[1] == var[2]) job myjob3 ( par1=$Par2, par2="parametro-2" ); opmsg ("myjob3 eseguito!!!"); exit (0); else if (var[1] == "next") job myjob4 ( par1=$Par2, par2="parametro-2" ); opmsg ("myjob4 eseguito!!!"); exit (0); endif; endif; if (exitcode < 0) opalarm (0x9B1c, "errore!!!"); exit (255); endif; end stream; 8# , * 5 6 . 5 µG 4 5 / -!' . + 1 4 * + 4 5 5 ( 4 ++ ( ' 5 1 5 'K + . 4 5 5. 4 E 1 4 5 . 4. ' 5 5!% * 5 .1 + ( 6. 5 % 5 5 .µG % % .% 5 .%1 6 . ..15 4 5 .1 µG 5 1 (. (. * .µG * . 4. 5 4 + ( 5 % ++ (; 5 4+ 5 + . 85 . + % + % 9 . .8 . . + 1 5 .. .5 < Q1. + 'K * + 4 1 . 5 / -0 . 1 ++ ( (. .%1 . + 4 + % 5 + + + % 9 .6 5 + 4 + ( % 5 * + %* 9 + % * .. . < 4 5 4 + ++ 6. ; + 5 Q1. µG 1 5 / -0 . 1 ( . .%1 5 / -0 .E> . 4. 5% 5 4 5 ' *T 1. µG 25 . 4 5 5 6 . 5% * . 5 . 4 5 5 ; .1 . 85 6 . ++ (< + H(. * *5 : 6. 5 . 4 ; 9 .5 5 µG < 2 .1 5 5 4 .4 5 55 .% 5 ;. 4 5 *+ 5 .1* 6 65 % 5 . 54 . . 4 5 5 . . 8 ( 5 5 / -0 .E>< 5 45 5 6 . 5 . .1 5; 4 4 + 5 5 / -0 .E>< A .5 + • • • E ( .4 5 .8 4+ 4 5 5 . 9 .5 5 ( 5 µG ;5 ( * µG 5 ( 6 . 5 1. . 8 * 6 . 5 .µG : * 4+ 5 . ' + .% 4 4 . . + E 5 .+ . . 5 5% % 1. ( + . 5 .6 5 . µG . 5 4 4 + . 4 . 5 :1 4+ 5 6 6 4 ' , ;. 4 5 * + @ 4J +< (; 4 4 + 40 < 1. ' K ( + E . ( 5 +. U9 .5 .1 5 5 6. . ( ( % % . ++ 4. . (. ( * 5 µG %1 1 . * 5 6 . 5 .µG . < + ( 1 ;# *5 5 + 5 . 4 E 5!% 5 ++ ( ;' K < * 5 µG + % % * 5 .1 ( 5 4 ++ ( ;' K < .5! . . 9 4. . 'K ( 5 ' K +C 5 . . . + .5 + 4 'K . . . .+ B *5 + .5 + . 85 . ' K 5 * 55 4 * * * : 6. + .5 + . 4 ! + 5 %. .5< 5 + 5 * . : 6. . 9 .5 6 6 4 !9 5 1 5 5 µG ; 4< * . . . + .5 + . 85 ++ ( 51 Q1. µG .5 . . 4+ 4 4 ; .%1 / -0 .E>< 5 + 5 * 1 . . 4 + .5 + . 85 4 " µ+ $ # ' : 5 1 . .5! .< 9+ $ ; EG 4 'K @ 4J + . 4 H.5 4 = 4 @ &G A : 9# ' @ - 3 @4 .% 7 3.1 : 9 $+ $ G @4 E + . / @4 @ 4' 0 .5 @ 4' Q+ ' 4@ 4 K ( '? / 9 .K Q K . . 5/ 40 0 & 4 / H& 9+ $ & EG 4 'K @ 4J + . 4 H.5 4 = 4 @ &G A 9# ' ' K @4 @ 5 ;. - 3.%< 5' K K 4 K + . 4 @ 4H& G G 9+ $ 45 G @4 9' ' K> 9 '& 5/ . 5/ . '? / 9 .K K .%1. K .%1 . '?@ 4 Q Q@4 /1 %1 + !' 1 . E *5 5 . 45 5!% * 5 .1, 6. + 5 6 . ++ µ+ $ 5 6 . 5 µG ( ;' K < 5 µG ( . * . 6. @ 4J + V 4 0 µ+ $ % µ+ $ µ+ $ @ 4J + V 4 0 # ' / µ+ $ @ 4J + V 4 0 # ' 1 44 " ! !H µ+ $ @ 4J + V 4 0 @ 4J + V 4 0 " /1 % µ+ $ @ 4J + V 4 0 # ' @ 4J + V 4 0 µ+ $ % " ! 6 . 5 µG , ( . 5 E ! 5 'K 5 µG . 6. ; & 4 / -0 . 1 ; &< • • • • • *+ 4 6 6 5 .+ + .%1 : %.6 . 5 6. + 1 5 1 (. ;+ .1 1 4 5% ; 9 .6 . + 1 5 41 ( ( 5 1 (. 5 / -0 .E>2 1 4 . 6. • • • • • • • " % H @OH H@ H @OJQ E H @O'=Q Q Q H @O Q?@ H= H @OQW H @OQW / H H @O@Q H H @O JH NE> 6. • • • • • 55 5 .%1 6. , . 11 5 5 µG 4. 5 K 5 (. ++ ( .9 6 ., ; F< F< . + % F< 51 . 5 / -0 . 1 5 + % %.6 . 5 %.6 . 5 6 . + %!%.6 . 5 6. . !+ % 51 5 1.5 + 4'K .%1 6 . 1 . 5 1 (. 1 5 .%1 6 . 5 1 (. 5 .%1 6 . 5 1 . % ( 5 . 4.15 % . 6 6 5 . 5. 6 66 . 5. 6 66 . 5 1 (. ( 5 15 % . 6 6 5 1. 6 . . 4 5( % ; 6 6 5 * 54 5 + / -0 . 1 + ( % 5 .. .< 5 .%1 6 . 1 E =O =H 0 E =O =H 0 ? E =O =H 0 QW E =OG Q> E =OG Q> QW 6. • • • • • • • • • 5 5 1 &< .%1 6 . 5 1 ' O? H= ' O'=Q/ H ' O/?@ Q@ ' O'=Q/ H/?@ Q@ ' O? H='=Q/ H 'O H H ' O' H= 6 . (% • • • • • • • • 5 1 .6 6 < . 51 5 .%1 6 . 5 1 5 51 4 5 15 : ( 85 1 5 .%1 6 . 5 µG 5 15 µG 1 5 0O =0 0O =0 Q@ 0O Q@ 0O Q@? H= 0O Q@? H= EE=H 0OEH @ Q@ 0OEH @ Q@? H= 0O =0 QW 0O =0 QW Q0 .%1 6 . 1 . 51 4 5 µG 4 4 4 5 .%1 6 . 5 1 4 5 .1 5 .5 1 4 5 6 .5 .5 1 4 51 . 5 . 51 4 5 1 .5 6 6 . 51 4 5 5 . 6 . 51 4 5 6 . 5 .6 . . 5 15 1 4 ( 1 5 15 1 4 ( 5