agent HDD() { private signal real q; private signal real srs; private signal real srsa; private signal real sps; private signal real spsa; private signal real power; private signal real requestlost; private signal real losttime; private signal real t; agent sr = SRequester(); agent rq = Queue(); agent sp = SProvider(); agent pm = PowerManager(); } agent SRequester() { output signal real srs; input signal real srsa; output signal real requestlost; output signal real losttime; output signal real t; mode srg = SReqOp(); } mode SReqOp() { output signal real srs; output signal real requestlost; output signal real losttime; output signal real t; input signal real srsa; input signal real q; private signal real rl; private signal real lt; mode a = ActiveUser(); mode pr = ProcessRequest(); mode rl = ProcessRequest(); trans Begin from default to a when true do { } sttrans a_pr from a when q<=20 distr randExp(1.383) to pr do {srs=1} weight 1 sttrans a_pr from a when q==20 distr randExp(1.383) to rl do { rl=1; lt=t } weight 1 trans pr_a from pr to a when srsa==1 do {srs=0} diff { d(t) == 1 } alge { requestlost == rl} alge { losttime == lt} } mode ActiveUser() {} mode ProcessRequest() {} mode RequestLost() {} agent Queue() { mode qo = QueueOp() } mode QueueOp() { output signal real q; output signal real srsa; output signal real spsa; input signal real srs; input signal real sps; mode wr = WaitRequest(); mode wsr = WaitForSR(); mode wsp = WaitForSP(); trans Begin from default to wr when true do {q=0} trans wr_wsr from wr to wsr when srs==1 do {q=q+1;srsa=1} trans wsr_wr from wsr to wr when srs==0 do {srsa=0} trans wr_wsp from wr to wsp when sps==1 do {q=q-1;spsa=1} trans wsp_wr from wsp to wr when sps==0 do {spsa=0} } mode WaitRequest() {} mode WaitForSR() {} mode WaitForSP() {} agent SProvider() { mode spo = SProviderOp() } mode SProviderOp() { input signal real q; input signal real spsa; input signal real com; output signal real sps; output signal real state; output signal real power; mode i = Idle(); mode b = Busy(); mode sb = Standby(); mode wspsa = WaitSPSA(); mode isb = IdleStandby(); mode sbi = StandbyIdle(); trans Begin from default to i when true do {state=0} trans i_b from i to b when q>0 do {state=1} sttrans b_wspsa from b when true distr randExp(125) to wspsa do {sps=1; state=4} weight 1 trans wspsa_i from wspsa to i when spsa==1 do {sps=0; state=0} trans i_isb from i to isb when com==1 do {state=5} sttrans isb_sb from isb when true distr randUniform(0.5,0.84) to sb do {state=2} weight 1 trans sb_sbi from sb to sbi when com==0 do {state=6} sttrans sbi_i from sbi when true distr randUniform(0.73,2.5) to i do {state=0} weight 1 } mode Idle() { output signal real power; diff {d(power)==0.95} } mode Busy() { output signal real power; diff {d(power)==2.15} } mode Standby() { output signal real power; diff {d(power)==0.13} } mode WaitSPSA() { output signal real power; diff {d(power)==0.95} } mode IdleStandby() { output signal real power; diff {d(power)==0.1} } mode StandbyIdle() { output signal real power; diff {d(power)==4.4} } agent PowerManager() { mode pmo = PowerManagerOp() } mode PowerManagerOp() { input signal real q; output signal real com; mode idle_com = IdleCommand(); mode standby_com = StandbyCommand(); trans Begin from default to idle_com when true do {com=0} trans toStandby from idle_com to standby_com when q==0 do {com=1} trans toIdle from standby_com to idle_com when q>=16 do {com=0} } mode IdleCommand() {} mode StandbyCommand() {}