forked from nils.hoelscher/RTSA-lab02-SchedTest
started with TDA
This commit is contained in:
parent
e398f3a492
commit
49c1a64e52
|
@ -19,9 +19,9 @@ def test(tasks):
|
||||||
U_lub = n * ((2 ** (1 / n)) - 1)
|
U_lub = n * ((2 ** (1 / n)) - 1)
|
||||||
|
|
||||||
# for fewer tasks than 10, we use the exact computed least upper bound
|
# for fewer tasks than 10, we use the exact computed least upper bound
|
||||||
if n < 10:
|
# if n < 10:
|
||||||
return U <= U_lub
|
# return U <= U_lub
|
||||||
|
|
||||||
# from 10 tasks up unlimited, we use the limes of n(2 ** 1/n - 1)
|
# from 10 tasks up unlimited, we use the limes of n(2 ** 1/n - 1)
|
||||||
return U <= np.log(2) # round to 0.7 ?
|
return U <= U_lub # np.log(2)
|
||||||
|
|
||||||
|
|
|
@ -13,15 +13,42 @@ import include.TasksHelper as TH
|
||||||
# C_i is accessed as: tasks[i][2]
|
# C_i is accessed as: tasks[i][2]
|
||||||
# The number of tasks can be accessed as: tasks.shape[0]
|
# The number of tasks can be accessed as: tasks.shape[0]
|
||||||
|
|
||||||
#The Time Demand Analysis Test
|
# The Time Demand Analysis Test
|
||||||
|
|
||||||
|
|
||||||
def test(tasks):
|
def test(tasks):
|
||||||
#Sorting Taskset by Period/Deadline
|
# Sorting Taskset by Period/Deadline
|
||||||
#This makes implementing TDA a lot easier
|
# This makes implementing TDA a lot easier
|
||||||
shape = tasks.shape
|
shape = tasks.shape
|
||||||
sortedtasks = tasks[tasks[:, 0].argsort()]
|
sortedtasks = tasks[tasks[:, 0].argsort()]
|
||||||
|
|
||||||
#####################
|
print("\n======= TASK SET =======")
|
||||||
#YOUR CODE GOES HERE#
|
# For each tasks in the ordered set
|
||||||
#####################
|
for i in range(len(sortedtasks)):
|
||||||
|
|
||||||
return False
|
print(f'Task #{i} {tasks[i]}:')
|
||||||
|
|
||||||
|
# calculate the time points for the demand function
|
||||||
|
# t = j * P_k for k = 1, 2,...i and j = 1, 2,...,math.ceil(P_i / P_k)
|
||||||
|
list_of_t = [TH.P_i(sortedtasks, k) * j for k in range(1, i)
|
||||||
|
for j in range(1, int(np.ceil(TH.D_i(sortedtasks, i) / TH.P_i(sortedtasks, k))))]
|
||||||
|
|
||||||
|
# print(f'\t list of ts: {list_of_t}')
|
||||||
|
|
||||||
|
# at any time t between 0 and and TH.P_i
|
||||||
|
for t in np.sort(list_of_t):
|
||||||
|
# for t in range(TH.C_i(sortedtasks, i), TH.P_i(sortedtasks, i)+1, TH.P_i(sortedtasks, i)):
|
||||||
|
|
||||||
|
print(f'\tTime-Demand for t ({t}): {time_demand_func(sortedtasks, i, t)} ')
|
||||||
|
|
||||||
|
# if the demand for CPU time of task i exceeds the available time t
|
||||||
|
if time_demand_func(sortedtasks, i, t) > t:
|
||||||
|
return False # then the task i will not meet its deadline, hence taskset not schedulable
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def time_demand_func(tasks, i, delta=0):
|
||||||
|
sum = 0
|
||||||
|
for k in range(1, i-1):
|
||||||
|
sum += math.ceil(delta / TH.P_i(tasks, k)) * TH.C_i(tasks, k)
|
||||||
|
return TH.C_i(tasks, i) + sum
|
||||||
|
|
Reference in New Issue