Python 实现进程调度算法模拟:先来先服务和时间片轮转
当然,我可以帮助你编写这个实验的代码。下面是一个使用Python实现先来先服务调度算法和时间片轮转调度算法的示例代码:
import time
class Process:
def __init__(self, pid, arrival_time, burst_time):
self.pid = pid
self.arrival_time = arrival_time
self.burst_time = burst_time
self.remaining_time = burst_time
self.status = 'Ready'
def fcfs_scheduling(processes):
current_time = 0
for process in processes:
if process.arrival_time > current_time:
current_time = process.arrival_time
process.status = 'Scheduled'
print(f'Process {process.pid} is scheduled at time {current_time}')
time.sleep(process.burst_time) # Simulating the execution time
process.status = 'Completed'
print(f'Process {process.pid} is completed at time {current_time + process.burst_time}')
current_time += process.burst_time
def round_robin_scheduling(processes, time_slice):
current_time = 0
while True:
all_completed = True
for process in processes:
if process.status != 'Completed':
all_completed = False
if process.remaining_time > 0:
process.status = 'Scheduled'
print(f'Process {process.pid} is scheduled at time {current_time}')
if process.remaining_time > time_slice:
time.sleep(time_slice) # Simulating the execution time for a time slice
process.remaining_time -= time_slice
current_time += time_slice
print(f'Process {process.pid} is preempted at time {current_time}')
else:
time.sleep(process.remaining_time) # Simulating the execution time for remaining burst time
current_time += process.remaining_time
print(f'Process {process.pid} is completed at time {current_time}')
process.status = 'Completed'
if all_completed:
break
# 创建进程
process1 = Process(1, 0, 5)
process2 = Process(2, 1, 3)
process3 = Process(3, 2, 2)
process4 = Process(4, 4, 4)
processes = [process1, process2, process3, process4]
# 先来先服务调度算法
print('FCFS Scheduling:')
fcfs_scheduling(processes)
# 时间片轮转调度算法
print('\nRound Robin Scheduling:')
time_slice = 2
round_robin_scheduling(processes, time_slice)
请注意,这只是一个基本示例,并没有进行输入验证和错误处理。你可以根据实际需要进行修改和扩展。运行代码后,你将看到每个进程被调度和完成的顺序及时间戳。
希望这个示例能对你有所帮助。如果有任何疑问,请随时提问。
原文地址: https://www.cveoy.top/t/topic/b5CU 著作权归作者所有。请勿转载和采集!