设计一个按下面三种调度算法实现处理机调度的程序python。 1)先来先服务 2)短进程优先或优先权高优先 3)按时间片轮转

时间: 2023-06-24 17:04:41 浏览: 51
下面是三种处理机调度算法的Python实现: 1. 先来先服务调度算法 ```python # 先来先服务调度算法 def fcfs(processes): # 按照进程到达时间排序 processes.sort(key=lambda x: x[0]) # 记录每个进程的开始时间、完成时间和周转时间 start_time = [0] * len(processes) end_time = [0] * len(processes) turnaround_time = [0] * len(processes) # 计算每个进程的开始时间、完成时间和周转时间 for i in range(len(processes)): if i == 0: start_time[i] = processes[i][0] end_time[i] = start_time[i] + processes[i][1] else: start_time[i] = end_time[i-1] end_time[i] = start_time[i] + processes[i][1] turnaround_time[i] = end_time[i] - processes[i][0] # 计算平均周转时间和平均带权周转时间 avg_turnaround_time = sum(turnaround_time) / len(turnaround_time) avg_weighted_turnaround_time = sum(turnaround_time[i] / processes[i][1] for i in range(len(processes))) / len(processes) # 输出结果 print("先来先服务调度算法") print("进程号\t到达时间\t服务时间\t开始时间\t完成时间\t周转时间\t带权周转时间") for i in range(len(processes)): print(f"P{i+1}\t{processes[i][0]}\t\t{processes[i][1]}\t\t{start_time[i]}\t\t{end_time[i]}\t\t{turnaround_time[i]}\t\t{turnaround_time[i]/processes[i][1]}") print(f"平均周转时间:{avg_turnaround_time}") print(f"平均带权周转时间:{avg_weighted_turnaround_time}") ``` 2. 短进程优先或优先权高优先调度算法 ```python # 短进程优先或优先权高优先调度算法 def sjf(processes, priority=False): # 按照进程到达时间排序 processes.sort(key=lambda x: x[0]) # 记录每个进程的开始时间、完成时间和周转时间 start_time = [0] * len(processes) end_time = [0] * len(processes) turnaround_time = [0] * len(processes) # 当前时间和已经完成的进程数 current_time = 0 completed = 0 # 计算每个进程的开始时间、完成时间和周转时间 while completed != len(processes): # 选取当前可运行进程中服务时间最短或优先权最高的进程 runnable_processes = [p for p in processes if p[0] <= current_time and p[3] == 0] if priority: runnable_processes.sort(key=lambda x: x[2], reverse=True) else: runnable_processes.sort(key=lambda x: x[1]) if runnable_processes: current_process = runnable_processes[0] current_process_index = processes.index(current_process) start_time[current_process_index] = current_time end_time[current_process_index] = current_time + current_process[1] turnaround_time[current_process_index] = end_time[current_process_index] - current_process[0] current_time = end_time[current_process_index] completed += 1 processes[current_process_index][3] = 1 else: current_time += 1 # 计算平均周转时间和平均带权周转时间 avg_turnaround_time = sum(turnaround_time) / len(turnaround_time) avg_weighted_turnaround_time = sum(turnaround_time[i] / processes[i][1] for i in range(len(processes))) / len(processes) # 输出结果 if priority: print("短进程优先调度算法") else: print("优先权高优先调度算法") print("进程号\t到达时间\t服务时间\t优先权\t开始时间\t完成时间\t周转时间\t带权周转时间") for i in range(len(processes)): print(f"P{i+1}\t{processes[i][0]}\t\t{processes[i][1]}\t\t{processes[i][2]}\t\t{start_time[i]}\t\t{end_time[i]}\t\t{turnaround_time[i]}\t\t{turnaround_time[i]/processes[i][1]}") print(f"平均周转时间:{avg_turnaround_time}") print(f"平均带权周转时间:{avg_weighted_turnaround_time}") ``` 3. 按时间片轮转调度算法 ```python # 按时间片轮转调度算法 def rr(processes, time_slice): # 按照进程到达时间排序 processes.sort(key=lambda x: x[0]) # 记录每个进程的开始时间、完成时间和周转时间 start_time = [0] * len(processes) end_time = [0] * len(processes) turnaround_time = [0] * len(processes) # 当前时间和已经完成的进程数 current_time = 0 completed = 0 # 计算每个进程的开始时间、完成时间和周转时间 while completed != len(processes): # 选取当前可运行进程中服务时间最短或优先权最高的进程 runnable_processes = [p for p in processes if p[0] <= current_time and p[3] < p[1]] if not runnable_processes: current_time += 1 continue current_process = runnable_processes[0] current_process_index = processes.index(current_process) if current_process[3] == 0: start_time[current_process_index] = current_time time_left = current_process[1] - current_process[3] if time_left <= time_slice: end_time[current_process_index] = current_time + time_left current_time = end_time[current_process_index] turnaround_time[current_process_index] = end_time[current_process_index] - current_process[0] completed += 1 processes[current_process_index][3] = current_process[1] else: end_time[current_process_index] = current_time + time_slice current_time = end_time[current_process_index] processes[current_process_index][3] += time_slice # 将已经完成时间片的进程移到队列尾部 if current_process[3] == current_process[1]: processes.append(processes.pop(current_process_index)) # 计算平均周转时间和平均带权周转时间 avg_turnaround_time = sum(turnaround_time) / len(turnaround_time) avg_weighted_turnaround_time = sum(turnaround_time[i] / processes[i][1] for i in range(len(processes))) / len(processes) # 输出结果 print(f"时间片长度为{time_slice}的轮转调度算法") print("进程号\t到达时间\t服务时间\t开始时间\t完成时间\t周转时间\t带权周转时间") for i in range(len(processes)): print(f"P{i+1}\t{processes[i][0]}\t\t{processes[i][1]}\t\t{start_time[i]}\t\t{end_time[i]}\t\t{turnaround_time[i]}\t\t{turnaround_time[i]/processes[i][1]}") print(f"平均周转时间:{avg_turnaround_time}") print(f"平均带权周转时间:{avg_weighted_turnaround_time}") ``` 以上是三种处理机调度算法的Python实现,可以根据需要调用不同的函数来进行测试。

相关推荐

最新推荐

recommend-type

操作系统实验报告 C++实现进程调度算法,短进程优先SJF与先来先服务FCFS算法

操作系统实验报告 C++实现进程调度算法,短进程优先SJF与先来先服务FCFS算法
recommend-type

短作业优先算法进程调度程序

进程的服务时间由三段组成:I2C10O5(表示进程的服务时间由2个时间片的输入,10个时间片的计算,5个时间片的输出) 进程间的同步关系用一个段表示:W2,表示该进程先要等待P2进程执行结束后才可以运行 因此,进程间...
recommend-type

进程调度、银行家算法、页式地址重定位模拟,LRU算法模拟和先来先服务算法代码

进程调度、银行家算法、页式地址重定位模拟,LRU算法模拟和先来先服务算法代码
recommend-type

“短进程优先”、“时间片轮转”、“高响应比优先”调度算法

编写并调试一个模拟的进程调度程序,分别采用“短进程优先”、“时间片轮转”、“高响应比优先”调度算法对随机产生的五个进程进行调度,并比较算法的平均周转时间。以加深对进程的概念及进程调度算法的理解。
recommend-type

Python模拟简单电梯调度算法示例

主要介绍了Python模拟简单电梯调度算法,涉及Python线程、队列、时间延迟等相关操作技巧,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

如何用python编写api接口

在Python中编写API接口可以使用多种框架,其中比较流行的有Flask和Django。这里以Flask框架为例,简单介绍如何编写API接口。 1. 安装Flask框架 使用pip命令安装Flask框架: ``` pip install flask ``` 2. 编写API接口 创建一个Python文件,例如app.py,编写以下代码: ```python from flask import Flask, jsonify app = Flask(__name__) @app.route('/api/hello', methods=['GET']) def hello():
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。