文章目录
相关时间计算
周转时间 = 作业完成时刻 - 作业到达时刻
等待时间 = 周转时间 - 运行时间
带权周转时间 = 周转时间 / 服务时间
平均周转时间 = 作业周转时间之和 / 作业个数
平均带权周转时间 = 带权周转时间之和 / 作业个数
服务时间:作业的运行时间
一、先来先服务调度算法(FCFS)
如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在就绪队列的后面,那么先来先服务(FCFS: first come first service)总是把当前处于就绪队列之首的那个进程调度到运行状态。也就说,它只考虑进程进入就绪队列的先后,而不考虑它的下一个CPU周期的长短及其他因素。
先来先服务的调度算法是最简单的调度算法,既可以用于作业调度 ,也可以用于程序调度,当作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,优先从后备队列中,选择一个或多个位于队列头部的作业,把他们调入内存,分配所需资源、创建进程,然后放入“就绪队列”,直到该进程运行到完成或发生某事件堵塞后,进程调度程序才将处理机分配给其他进程。
实现代码:
avg_turnaround_time = 0.0
aqtt = 0.0
class Progress:
def __init__(self):
self.pro_name = ""
self.arrive_time = 0
self.service_time = 0
self.finish_time = 0
self.cycling_time = 0
self.float_wi = 0.0
courses = [Progress() for _ in range(80)]
def health_examine(course_num):
return
def progress_num(course_num):
i = 0
for i in range(course_num):
print("Enter information for process %d" % (i + 1))
courses[i].pro_name = input("Enter process name: ") #进程名
courses[i].arrive_time = int(input("Enter arrival time: ")) #到达时间
courses[i].service_time = int(input("Enter service time: ")) #服务时间
return
def finish_time(course_num):
i = 0
if courses[0].arrive_time != 0:
courses[0].finish_time = courses[0].arrive_time + courses[0].service_time
courses[0].finish_time = courses[0].service_time
for i in range(1, course_num):
if courses[i - 1].finish_time >= courses[i].arrive_time:
courses[i].finish_time = courses[i - 1].finish_time + courses[i].service_time
else:
courses[i].finish_time = courses[i].arrive_time + courses[i].service_time
return
def cycling_time(course_num): #周转时间
for i in range(course_num):
courses[i].cycling_time = courses[i].finish_time - courses[i].arrive_time
return
def float_wi(course_num): #带权周转时间
for i in range(course_num):
courses[i].float_wi = float(courses[i].cycling_time) / courses[i].service_time
return
def avg_turnaround_time(course_num): #平均周转时间
sum_turnaround_time = 0
for i in range(course_num):
sum_turnaround_time += courses[i].cycling_time
global avg_turnaround_time
avg_turnaround_time = sum_turnaround_time / course_num
return
def aqtt(course_num): #平均带权周转时间
sum_float_wi = 0
for i in range(course_num):
sum_float_wi += courses[i].float_wi
global aqtt
aqtt = sum_float_wi / course_num
return
def print_fifo(course_num):
print("Process information:")
print("Process\tArrival Time\tService Time\tFinish Time\tTurnaround Time\tWeighted Turnaround")
for i in range(course_num):
print("%s\t%d\t%d\t%d\t%d\t%.2f" % (courses[i].pro_name, courses[i].arrive_time, courses[i].service_time, courses[i].finish_time, courses[i].cycling_time, courses[i].float_wi))
print("Average Turnaround Time\tAverage Weighted Turnaround Time")
print("%.2f\t%.2f" % (avg_turnaround_time, aqtt))
return
def main():
course_num = 5
course_num = int(input("Enter the number of processes: "))
progress_num(course_num)
finish_time(course_num)
cycling_time(course_num)
float_wi(course_num)
avg_turnaround_time(course_num)
aqtt(course_num)
print_fifo(course_num)
if __name__ == "__main__":
main()
输出信息:
Enter the number of processes: 3
Enter information for process 1
Enter process name: p1
Enter arrival time: 0
Enter service time: 5
Enter information for process 2
Enter process name: p2
Enter arrival time: 2
Enter service time: 1
Enter information for process 3
Enter process name: p3
Enter arrival time: 3
Enter service time: 4
Process information:
Process Arrival Time Service Time Finish Time Turnaround Time Weighted Turnaround
p1 0 5 5 5