操作系统-轮转法(时间片轮转法)

轮转法(时间片轮转法)

简介

在轮转算法中,系统根据先来先服务策略,将所有的就绪进程排成一个就绪队列。并可设置每隔一定的时间间隔即可产生一次中断,激活系统中的进程调度程序,完成一次调度,将CPU分配给队首的进程,令其执行。当该进程的时间片结束,或者该进程在时间片上提前结束,系统在将CPU分配给队首的进程。由此,可以保证就绪队列的所有进程在一个确定的时间片内,都能获得一次CPU执行

进程切换的情况

  1. 在一个时间片内,时间片用尽进程没有结束,这时就要把当前运行的进程放入就绪队列的队尾,就绪队列队首的进程获取到CPU并开始执行

  2. 在一个时间片内,进程提前结束,这时候此进程运行结束,并且就绪队列的第一进程获取到CPU开始执行。

时间片确定问题

时间片的确定对性能有很大的影响,比如时间片很小,就会出现进程上下文之间频繁切换很影响性能。如果时间片过大,轮转法就退化为了先来先服务算法。

代码演示

首先创建一个Process类来模拟进程,没有lombok包的手动生成getter setter和构造方法即可

package com.xu.demo.ytu;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Process {
   
    //作业名
    private String ProcessName;
    //到达时间
    private int InterTime;
    //运行时间
    private int WorkTime;
    //开始时间
    private int StartTime;
    //完成时间
    private int FinishTime;
    //周转时间
    private int TurnTime;
    //带权周转时间
    private float PowerTurnTime;
    //时间标识判断是否在时间片上运行结束
    private int TimeFlag;
    //用于接收用户输入并赋值
    public Process(String processName, int interTime, int workTime) {
   
        ProcessName = processName;
        InterTime = interTime;
        WorkTime = workTime;
        TimeFlag= workTime;
    }
    @Override
    public String toString() {
   
        return
                "作业名:" + ProcessName  +
                "   到达时间:" + InterTime +
                "   运行时间:" + WorkTime +
                "   开始时间:" + StartTime +
                "   完成时间:" + FinishTime +
                "   周转时间:" + TurnTime +
                "   带权周转时间:" + PowerTurnTime
                ;
    }
}

论转算法核心部分代码(这里的时间片为1,可在修改timeSlice进行修改)

package com.xu.demo.ytu;

import java.util.*;

/**
 * @Author XuJiAn
 * @Time 2022/4/24
 */
public class RR {
   

    /**
     * 初始化操作
     * @param list 原本的进程数据源程集合
     * @param readyQueue 就绪队列
     * @return map list与readyQueue结果集映射*
     */
    public static Map<String, Object> initProcess(List<Process> list, Deque<Process
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小徐404

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值