python实现的最低松弛度优先(LLF)算法,, 1 #!/use
python实现的最低松弛度优先(LLF)算法,, 1 #!/use
1 #!/user/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import sys 5 6 7 class TaskControlBlock: 8 CURRENT_TIME = 0 9 10 def __init__(self, dictionary, 11 name_list, 12 period_time, 13 central_processing_unit_time, 14 remain_time, 15 current_period, 16 laxity_time): 17 for key in dictionary.keys(): 18 name_list.append(key) 19 period_time.append(dictionary.get(key)[1]) 20 central_processing_unit_time.append(dictionary.get(key)[0]) 21 remain_time.append(dictionary.get(key)[0]) 22 current_period.append(1) 23 laxity_time.append(dictionary.get(key)[1] - dictionary.get(key)[0] - self.CURRENT_TIME) 24 25 @staticmethod 26 def get_index_of_min(least_laxity_task_list, minimum): 27 return least_laxity_task_list.index(minimum) 28 29 @staticmethod 30 def get_another_index_of_min(least_laxity_task_list, minimum): 31 least_laxity_task_list[least_laxity_task_list.index(minimum)] = sys.maxsize 32 return least_laxity_task_list.index(min(least_laxity_task_list)) 33 34 @staticmethod 35 def is_exit(temp_list): 36 for element in temp_list: 37 if element != sys.maxsize: 38 return False 39 return True 40 41 def scheduling(self, name_list, 42 period_time, 43 central_processing_unit_time, 44 remain_time, 45 current_period, 46 laxity_time): 47 least_laxity_task = laxity_time.index(min(laxity_time)) 48 temp_list = [] 49 for i in laxity_time: 50 temp_list.append(i) 51 if self.CURRENT_TIME < period_time[least_laxity_task] * (current_period[least_laxity_task] - 1): 52 while self.CURRENT_TIME < period_time[least_laxity_task] * 53 (current_period[least_laxity_task] - 1): 54 least_laxity_task = self.get_another_index_of_min(temp_list, min(temp_list)) 55 if self.is_exit(temp_list=temp_list): 56 exit(0) 57 another_task = self.get_another_index_of_min(temp_list, min(temp_list)) 58 if remain_time[least_laxity_task] 59 <= laxity_time[another_task]: 60 running_time = remain_time[least_laxity_task] 61 else: 62 running_time = laxity_time[another_task] 63 remain_time[least_laxity_task] -= running_time 64 print(name_list[least_laxity_task], self.CURRENT_TIME, running_time) 65 self.CURRENT_TIME += running_time 66 if remain_time[least_laxity_task] == 0: 67 current_period[least_laxity_task] += 1 68 remain_time[least_laxity_task] = central_processing_unit_time[least_laxity_task] 69 i = 0 70 while i < laxity_time.__len__(): 71 laxity_time[i] = current_period[i] * period_time[i] - 72 remain_time[i] - self.CURRENT_TIME 73 i += 1 74 print(laxity_time) 75 else: 76 another_task = self.get_another_index_of_min(temp_list, min(temp_list)) 77 if remain_time[least_laxity_task] 78 <= temp_list[another_task]: 79 running_time = remain_time[least_laxity_task] 80 else: 81 running_time = laxity_time[another_task] 82 remain_time[least_laxity_task] -= running_time 83 print(name_list[least_laxity_task], self.CURRENT_TIME, running_time) 84 self.CURRENT_TIME += running_time 85 if remain_time[least_laxity_task] == 0: 86 current_period[least_laxity_task] += 1 87 remain_time[least_laxity_task] = central_processing_unit_time[least_laxity_task] 88 i = 0 89 while i < laxity_time.__len__(): 90 laxity_time[i] = current_period[i] * period_time[i] - 91 remain_time[i] - self.CURRENT_TIME 92 i += 1 93 print(laxity_time) 94 95 96 if __name__ == "__main__": 97 task_dictionary = {"A": [10, 30], 98 "B": [25, 75], 99 "C": [30, 90],}100 current_time = 0101 name_list = []102 period_time = []103 central_processing_unit_time = []104 remain_time = []105 current_period = []106 laxity_time = []107 tcb = TaskControlBlock(task_dictionary,108 name_list,109 period_time,110 central_processing_unit_time,111 remain_time,112 current_period,113 laxity_time)LLF Module
1 #!/user/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import sys 5 import EarliestDeadlineFirst 6 import LeastLaxityFirst 7 8 9 class GetCloseTime:10 """ design the close time by itself """11 def __init__(self, dictionary):12 self.dictionary = dictionary13 14 def greatest_common_divisor(self, _left, _right):15 return _left if _right == 0 else self.greatest_common_divisor(_right, _left % _right)16 17 def lowest_common_multiple(self):18 temp_result = 119 for value in self.dictionary.values():20 temp_result = value[1] * temp_result / self.greatest_common_divisor(value[1], temp_result)21 return temp_result22 23 24 class TimeError(Exception):25 """26 Self-defined Exception :27 Judging whether the processing time and cycle of real-time tasks satisfy the conditions28 """29 def __init__(self, message):30 self.message = message31 32 def is_execute(dictionary):33 sum = 034 for value in dictionary.values():35 sum += value[0] / value[1]36 return sum37 38 if __name__ == "__main__":39 task_dictionary = {"A": [10, 30],40 "B": [20, 60],41 "C": [30, 90]}42 if is_execute(task_dictionary) > 1:43 raise TimeError("error, scheduling finish!")44 user_choose = input("Please enter your choice"45 "(1 : EarlistDeadlineFirist) or (2 : LeastLaxityFirst) : ")46 close_time_object = GetCloseTime(task_dictionary)47 close_time = close_time_object.lowest_common_multiple()48 if int(user_choose) == 1:49 current_time = 050 name_list = []51 period_time = []52 central_processing_unit_time = []53 remain_time = []54 current_period = []55 tcb = EarliestDeadlineFirst.TaskControlBlock(task_dictionary,56 name_list,57 period_time,58 central_processing_unit_time,59 remain_time,60 current_period)61 62 63 while tcb.CURRENT_TIME < close_time:64 tcb.scheduling(name_list,65 period_time,66 central_processing_unit_time,67 remain_time,68 current_period)69 else:70 current_time = 071 name_list = []72 period_time = []73 central_processing_unit_time = []74 remain_time = []75 current_period = []76 laxity_time = []77 tcb = LeastLaxityFirst.TaskControlBlock(task_dictionary,78 name_list,79 period_time,80 central_processing_unit_time,81 remain_time,82 current_period,83 laxity_time)84 while tcb.CURRENT_TIME < close_time:85 tcb.scheduling(name_list,86 period_time,87 central_processing_unit_time,88 remain_time,89 current_period,90 laxity_time)bin
python实现的最低松弛度优先(LLF)算法
相关内容
- python地图投影转换,,一、投影包osr与p
- Python 面试题 字符串 删除多少个字符使得出现做多的字
- python socket,,Python3 网络
- 使用Nginx和uwsgi部署Flask项目,,前言之前用Flask
- python解释器配置和python常用快捷键,,1、准备工作安装
- Python 中的特殊双下划线方法,,python类内部部
- python,tensorflow,CNN实现mnist数据集的训练与验证正确率,
- 关于基于python27使用 from pylab import * 报错问题,,### 这里
- 在Python中使用aws的sns和sqs,,首先,sns = S
- python对Excel表格操作,,操作场景,给一个Ex
评论关闭