处理机调度策略:周转时间与带权周转时间分析

需积分: 30 1 下载量 65 浏览量 更新于2024-08-22 收藏 3.58MB PPT 举报
"这篇文档是关于操作系统中处理机调度的课件,主要涵盖了平均带权周转时间的概念,以及各种处理机调度算法和调度层次。" 操作系统中的处理机调度是核心功能之一,它决定了如何有效地分配处理器资源给等待执行的进程。调度算法的选择直接影响系统的性能,如响应时间、吞吐量和资源利用率。 首先,平均带权周转时间是衡量调度效率的重要指标。它是系统为作业i提供服务的时间(tSi)与作业i的带权周转时间(wi)的比值,带权周转时间是作业的周转时间T与其服务时间TS的比例。周转时间是从作业提交到完成执行的时间,而带权周转时间则反映了系统的响应速度。降低平均带权周转时间可以提高用户满意度,因为它表示用户等待结果的平均时间更短。 处理机调度算法有多种,包括: 1. 先来先服务(FCFS):按照进程到达的顺序进行调度,简单但可能导致短进程等待时间过长。 2. 短作业优先(SJF):优先选择预计执行时间最短的进程,能有效减少平均周转时间,但可能引起长作业的饥饿问题。 3. 高优先权优先(HPF):优先执行优先级高的进程,常用于实时系统,需防止优先级反转和优先级继承问题。 4. 时间片轮转(RR):每个进程分配固定时间片,轮流执行,适合交互式系统,确保响应时间。 根据调度层次,操作系统有三种调度: 1. 高级调度(作业调度):从外存的后备队列中选取作业调入内存,创建进程并放入就绪队列,执行频率较低。 2. 中级调度:管理内存与外存之间的进程交换,提高内存利用率,执行频率介于高级调度和低级调度之间。 3. 低级调度(进程调度):决定就绪队列中哪个进程应获得处理机,执行频率最高。 调度算法的选择需要考虑以下准则: - 周转时间:希望尽可能短,以减少等待时间。 - 带权周转时间:期望平均带权周转时间小,提升系统响应性。 - 响应时间:对于交互式系统,快速响应用户请求至关重要。 - 吞吐量:单位时间内系统完成的工作量。 - 公平性:避免某些进程长时间得不到执行,导致饥饿现象。 处理机调度是一个涉及多方面因素的复杂问题,需要根据具体操作系统和应用场景选择合适的调度策略,以优化系统的整体性能。

class Process: def init(self, pid, arrival_time, burst_time): self.pid = pid #进程id 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 #结束时间 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 #响应比=1+作业等待时间/估计运行时间 # 选择响应比最大的进程执行 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 #重复上述过程直到所有进程都完成。 # 创建进程列表 processes = [ Process(1, 0, 7), #(进程id,到达时间,执行时间) Process(2, 1, 8), Process(3, 2, 6), Process(4, 3, 4), ] # 运行调度算法 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}") #对进程列表进行修改 #结果预计为: # Process 1:到达时间 0,所需执行时间7,开始时间0,结束时间 7,周转时间 7,带权周转时间 1.00 # Process 4:到达时间 3,所需执行时间4,开始时间7,结束时间 11,周转时间 8,带权周转时间 2.00 # Process 3:到达时间 2,所需执行时间6,开始时间11,结束时间 17,周转时间 15,带权周转时间 2.50 # Process 2:到达时间 1,所需执行时间8,开始时间17,结束时间 25,周转时间 24,带权周转时间 3.00 # 平均周转时间:13.50 # 平均带权周转时间:2.12 简述上述程序的设计思路

107 浏览量