Skip to content

Commit

Permalink
Revert "Revert "[BUG FIX]: Offline phase""
Browse files Browse the repository at this point in the history
This reverts commit 03dba09.
  • Loading branch information
gokulvasan committed May 2, 2016
1 parent 03dba09 commit b269129
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 28 deletions.
11 changes: 11 additions & 0 deletions ls
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
interval.py
list.py
main.py
SlotShifting.py
ss_chronos.py
ss_conf_table.py
ss_list.py
ss_queue.py
ss_state_machine.py
ss_task.py
ss_tsaheylu.py
14 changes: 10 additions & 4 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,19 @@


def main():

remote = reciever("/tmp/ss_parser")

configuration = Configuration()

remote.recieve_table()

if remote == None:
#todo: this number should be generated randomly
table = gen_slotshift_table(1, 10, 10, 10, .10)
remote = local_table(table[0], table[1],
table[2], table[3])
else:
remote.recieve_table()

associate = association(remote)

interval = associate.create_def_intr_list(associate)
Expand Down
8 changes: 7 additions & 1 deletion ss_conf_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@
from simso.configuration import Configuration

server_addr = "/tmp/ss_parser"
class local_table:
def __init__(self, tsk_cnt, tsk_lst, intr_cnt, intr_lst):
self.intr_cnt = intr_cnt
self.tsk_cnt = tsk_cnt
self.tsk = tsk_lst
self.intr = intr_lst

class reciever:
def __init__(self, serv_addr):
Expand All @@ -15,7 +21,7 @@ def __init__(self, serv_addr):
self.__sock.connect(serv_addr)
except socket.error, msg:
print >>sys.stderr, msg
sys.exit(1)
return None
self.intr_cnt = 0
self.tsk_cnt = 0
self.tsk = []
Expand Down
97 changes: 74 additions & 23 deletions ss_offline_phase.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ def get_hyperperiod(task_set):
"""
return _lcm([x[2] for x in task_set])

def __calc_sc(tmp_lst):
def __calc_wcet(tmp_lst):
c = 0
for j in tmp_lst:
c += j[4]
c += j[2]
return c

def __gen_intr(job, job_set, tsk_lst, intr_lst, intr_id):
Expand All @@ -32,30 +32,67 @@ def __gen_intr(job, job_set, tsk_lst, intr_lst, intr_id):
if job_set == None:
break
if job[3] == job_set[0][3]:
j = job_set.pop[0]
j = job_set.pop(0)
else:
break

intr_est = min(job_set, key=lambda x:x[4])
print "intr_id", intr_id, "job_lst", tmp_lst
if tmp_lst:
intr_est = min(tmp_lst, key=lambda x:x[4])
intr_est = intr_est[4]
else:
intr_est = 0

if intr_lst:
intr_start = max(intr_est, intr_lst[intr_id - 1][2])
intr_end = tmp_lst[0][2]
intr_before_end = intr_lst[intr_id - 1][2]
intr_start = max(intr_est, intr_before_end)
else:
intr_start = 0

intr_end = tmp_lst[0][3]
print "intr start and end", intr_start, intr_end
intr_sc = intr_end - intr_start
intr_sc = intr_sc - __calc_sc(tmp_lst)
return (intr_id, intr_start, intr_end, intr_sc)
print "intr_sc: ", intr_sc, __calc_wcet(tmp_lst)
intr_sc = intr_sc - __calc_wcet(tmp_lst)

return [intr_id, intr_start, intr_end, intr_sc]

def __correct_intr(intr_lst):
pass
def calculate_sc(intr_lst):
pass
i_curr = 0
i_nxt = 1
length = len(intr_lst)
while i_curr < length:
intr_lst[i_curr][0] = i_curr
if i_nxt < len(intr_lst):
if intr_lst[i_curr][2] != intr_lst[i_nxt][1]:
intr_lst.insert( i_curr, [i_curr+1,
intr_lst[i_curr][1],
intr_lst[i_nxt][2],
intr_lst[i_nxt][2] - intr_lst[i_curr][1]] )
i_curr += 1
i_nxt +=1

def __calculate_sc(intr_lst):
i = len(intr_lst) - 2
while i >= 0:
intr_lst[i][3] = intr_lst[i][3] + min(0, intr_lst[i+1][3])
i -= 1

def gen_slotshifting_intervals(job_set, tsk_lst):
intr_lst = []
intr_id = 0
for j in job_set:
job = job_set.remove(j)
intr = __gen_intr(job, job_set, tsk_lst, intr_lst, intr_id)
job = job_set.pop(0)
if job:
intr = __gen_intr(job, job_set,
tsk_lst, intr_lst, intr_id)
else:
break
intr_lst.append(intr)
intr_id += 1
print "intr", intr_lst
__correct_intr(intr_lst)
__calculate_sc(intr_lst)
return intr_lst

def gen_jobs(task, hp, i, job_lst):
Expand All @@ -68,21 +105,23 @@ def gen_jobs(task, hp, i, job_lst):
tsk_job = []
job_cnt = hp/task[2]
jid = 1
while cnt < job_cnt:
j_id = jid
if j_id > 1:
c = task[0] * jid
print job_cnt
while jid <= job_cnt:
# j_id = jid
if jid > 1:
c = task[0]
d = task[1] * jid
p = task[2] * jid
else:
c = task[0]
d = task[1]
p = 0
t = i
tsk_job.append((t, j_id, c, d, p))
tsk_job.append((t, jid, c, d, p))
jid += 1
job_lst.extend(tsk_job)


# create task based on requirement
tsk.append(i) # id
tsk.append(0) # est
tsk.append(task[0]) #wcet
Expand All @@ -91,7 +130,7 @@ def gen_jobs(task, hp, i, job_lst):
tsk.append(0) #intr_cnt
return tsk

def gen_slotshifting_table(nsets, compute, deadline, period, target_util):
def gen_slotshift_table(nsets, compute, deadline, period, target_util):
"""
Args:
- `nsets`: Number of tasksets to generate.
Expand All @@ -103,13 +142,25 @@ def gen_slotshifting_table(nsets, compute, deadline, period, target_util):
i = 0
job_lst = []
tsks_lst = []
tsk_set = gen_ripoll(nsets, compute, deadline, period, target_util)
#tsk_set = gen_ripoll(nsets, compute, deadline, period, target_util)
tsk_set = [[(2,9,3), (5,13,4), (1,17,13)]]
print "task_set : {}".format(tsk_set)
hp = get_hyperperiod(tsk_set[0])
print "hyper period {}".format(hp)

tsk_cnt = len(tsk_set[0])
while i < tsk_cnt:
tsk = gen_jobs(tsk_set[0][i], hp, i, job_lst)
tsks_lst.append(tsk)
i += 1
sorted(job_lst, key=itemgetter(2))
intr_lst = gen_slotshifting_intervals(job_lst)
job_lst.sort(key=itemgetter(3))
print "job_lst {}".format(job_lst)
print "tsk_lst {}",format(tsks_lst)
intr_lst = gen_slotshifting_intervals(job_lst, tsks_lst)
return(len(tsks_lst), tsks_lst, len(intr_lst), intr_lst)

"""
TEST CODE
"""
t = gen_slotshift_table(1, 1,2 , 2, .5)

0 comments on commit b269129

Please sign in to comment.