操作系统实验(三)---用python设计高响应比优先调度算法

高响应比优先调度算法是一种常见的进程调度算法,它根据进程等待时间和需要执行的时间来计算响应比,然后将响应比最高的进程置于就绪队列的最前面,以便更快地得到处理。

本实验的目的是使用Python设计并实现高响应比优先调度算法,并通过测试数据验证其性能表现。具体实现步骤如下:

1、定义Process

首先需要定义一个Process类,表示一个进程。该类包含进程id、到达时间、需要执行的时间、等待时间、周转时间、响应比等属性。

class Process:
    def __init__(self, pid, arrival_time, burst_time):
        self.pid = pid
        self.arrival_time = arrival_time
        self.burst_time = burst_time
        self.waiting_time = 0
        self.turnaround_time = 0
        self.response_ratio = 0
        self.start_time = 0
        self.complete_time = 0

2、实现高响应比优先调度算法

高响应比优先调度算法是一种动态调度算法,它根据作业的等待时间和估计运行时间来决定下一个要执行的作业。具体实现过程如下::

def hrrn(processes):
    n = len(processes)
    current_time = 0
    completed_processes = []

    while len(completed_processes) < n:
        # 计算每个进程的响应比
        for p in processes:
            if p not in completed_processes:
                waiting_time = current_time - p.arrival_time
                p.response_ratio = 1 + waiting_time / p.burst_time

        # 选择响应比最大的进程执行
        selected_process = max(processes, key=lambda x: x.response_ratio)

        selected_process.start_time = current_time
        selected_process.complete_time = current_time + selected_process.burst_time
        selected_process.turnaround_time = selected_process.complete_time - selected_process.arrival_time
        current_time = selected_process.complete_time
        completed_processes.append(selected_process)

    return completed_processes

hrrn()函数接收一个包含所有进程对象的列表 processes,并返回完成的进程对象列表。

在函数内部,先对每个进程计算它的响应比(使用 (1 + 等待时间/执行时间),然后选择响应比最大的进程进行执行。执行结束后,计算所选进程的开始执行时间、结束时间和周转时间,并将其添加到已完成的进程列表中。重复上述过程直到所有进程都完成。

3、测试程序

可以使用以下代码进行测试:

# 创建进程列表
processes = [
    Process(1, 0, 10),
    Process(2, 1, 5),
    Process(3, 2, 8),
    Process(4, 3, 6),
]

# 运行调度算法
completed_processes = hrrn(processes)

# 输出结果
total_wait_time = sum([p.waiting_time for p in completed_processes])
total_turnaround_time = sum([p.turnaround_time for p in completed_processes])
total_weighted_turnaround_time = sum([p.turnaround_time / p.burst_time for p in completed_processes])

for p in completed_processes:
    print(f"Process {p.pid}:到达时间 {p.arrival_time},所需执行时间{p.burst_time},开始时间{p.start_time},结束时间 {p.complete_time},周转时间 {p.turnaround_time},带权周转时间 {p.turnaround_time / p.burst_time:.2f}")

print(f"平均周转时间:{total_turnaround_time / len(completed_processes):.2f}")
print(f"平均带权周转时间:{total_weighted_turnaround_time / len(completed_processes):.2f}")

以上代码中,我们创建了一个包含4个进程的进程列表,然后运行 hrrn() 函数进行调度。最后,输出每个进程的开始时间、结束时间、周转时间和带权周转时间,以及所有进程的平均周转时间和平均带权周转时间。

运行程序后,可以得到如下输出结果:

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值