操作系统调度算法

计算机操作系统【进程的调度】 如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。该实验利用进程调度中的优先级算法调度进程,开始给每一个进程设定一个优先级数,对于优先级高的进程先调度,优先级低的进程后调度,在调度一个进程时,其他进程将处于就绪态,而正在被调度的进程应处于运行态。进程名 进程优先数 进程需要总运行时间 进程已运行时间。 阅读详情

实验目的:

1.理解操作系统进程管理中心进行进程调度的过程和编程方法,创建进程控制块PCB。

2.理解进程的状态及变化,动态显示每个进程的当前状态及进程的调度情况。掌握几种调度算法。理解几种进程调度的方式,用代码将几种进程调度的方式表现出来

实验内容:

  1. 先来先服务:按照进程提交给系统的先后次序来进行调度。
  2. 短作业优先:按照进程所要求的运行时间来衡量。
  3. 时间片轮换:根据先来先服务排序,以一个时间片尾单位,依次执行不同的进程。
  4. 响应比高者优先调度算法:为每个作业设置一个优先权(响应比),调度之前先计算各作业的优先权,优先权高者优先调度。

RP(相应比)=作业周转时间/作业运行时间=1+作业等待时间/作业运行时间

整个程序的大致流程

 

 

先来先服务算法流程图

 

 

短作业优先算法流程图

 

 

轮转调度算法流程图 

 

 

高响应比算法流程图 

 

 

public class FCFS {
    public static void fcfs(Process[] processes){
        float time = processes[0].getArriveTime();
        float turn = 0;
        float powerturn = 0;
        for (int i = 0; i < processes.length; i++) {
            processes[i].setStartTime(time);
            processes[i].setFinishTime(processes[i].getRunningTime() + time);
            processes[i].setTurnTime(processes[i].getFinishTime() - processes[i].getArriveTime());
            processes[i].setPowerTurnTime(processes[i].getTurnTime() / processes[i].getRunningTime());
            time += processes[i].getRunningTime();
            turn  += processes[i].getTurnTime();
            powerturn += processes[i].getPowerTurnTime();
            System.out.println(processes[i].toString());
        }
        processes[0].setAverageTurnTime(turn / (float)processes.length);
        processes[0].setAveragePowerTurnTime(powerturn / (float)processes.length);
        System.out.println("平均周转时间:" + processes[0].getAverageTurnTime());
        System.out.println("平均带权周转时间:" + processes[0].getAveragePowerTurnTime());
    }
}

 

public class HRRN{
    public static void hrrn(Process[] processes){
        float time = processes[0].getArriveTime();
        float turn = 0;
        float powerturn = 0;
        //进程响应比
        ArrayList<Float> radio = new ArrayList<>();
        ArrayList<Integer> index = new ArrayList<>();
        ArrayList<Process> a = new ArrayList<>();
        Collections.addAll(a, processes);
        for (int i = 1; i < processes.length; i++){
            Process t = a.get(0);
            a.remove(0);
            ResponseRatio(radio,a, processes, t);
            System.out.print("第" + i + "次相应时间为:");
            for (float f:radio) {
                System.out.print(f + " ");
            }
            System.out.println();
            index.add(sort(radio));
            radio.clear();
            swap(a,0,index.get(index.size()-1));
        }
        ssort(processes, index);
        for (int i = 0; i < processes.length; i++) {
            processes[i].setStartTime(time);
            processes[i].setFinishTime(processes[i].getRunningTime() + time);
            processes[i].setTurnTime(processes[i].getFinishTime() - processes[i].getArriveTime());
            processes[i].setPowerTurnTime(processes[i].getTurnTime() / processes[i].getRunningTime());
            time += processes[i].getRunningTime();
            turn  += processes[i].getTurnTime();
            powerturn += processes[i].getPowerTurnTime();
            System.out.println(processes[i].toString());
        }
        processes[0].setAverageTurnTime(turn / (float)processes.length);
        processes[0].setAveragePowerTurnTime(powerturn / (float)processes.length);
        System.out.println("平均周转时间:" + processes[0].getAverageTurnTime());
        System.out.println("平均带权周转时间:" + processes[0].getAveragePowerTurnTime());
    }

    private static void ssort(Process[] processes, ArrayList<Integer> index) {
        Process tmp = null;
        for (int i = 1; i < processes.length; i++){
            for (int j = 0; j < index.size(); j++) {
                if (processes[i].getPeocessName() == index.get(j)) {
                    tmp = processes[i];
                    processes[i] = processes[j+2];
                    processes[j+2] = tmp;
                }
            }
        }
    }

    private static void swap(ArrayList<Process> a, int i, Integer integer) {
        Process t;
        t = a.get(i);
        a.set(0,a.get(integer));
    }

    private static int sort(ArrayList<Float> radio) {
        int x = 0;
        float max = radio.get(0);
        for (int i = 0; i < radio.size(); i++){
            if (max < radio.get(i)){
                max = radio.get(i);
                x = i;
            }
        }
        return x;
    }

    private static void ResponseRatio(ArrayList<Float> radio, ArrayList<Process> a, Process[] processes, Process t) {
        float waitTime = 0;
        float w;
        for (int i = 0; i < a.size(); i ++){
            waitTime = t.getArriveTime() + t.getRunningTime();
            w = waitTime - a.get(i).getArriveTime();
            radio.add(1 + (w / a.get(i).getRunningTime()));
        }
    }
}
public class Process{
    //进程名
    private float PeocessName;
    //到达时间
    private float ArriveTime;
    //运行时间
    private float RunningTime;
    //开始时间
    private float StartTime;
    //完成时间
    private float FinishTime;
    //周转时间
    private float TurnTime;
    //带权周转时间
    private float PowerTurnTime;
    //平均周转时间
    private float AverageTurnTime;
    //平均带权周转时间
    private float AveragePowerTurnTime;

    public float getPrior() {
        return prior;
    }

    public void setPrior(float prior) {
        this.prior = prior;
    }

    private float prior;

    public float getPeocessName() {
        return PeocessName;
    }

    public void setPeocessName(float peocessName) {
        PeocessName = peocessName;
    }

    public float getArriveTime() {
        return ArriveTime;
    }

    public void setArriveTime(float arriveTime) {
        ArriveTime = arriveTime;
    }

    public float getRunningTime() {
        return RunningTime;
    }

    public void setRunningTime(float runningTime) {
        RunningTime = runningTime;
    }

    public float getStartTime() {
        return StartTime;
    }

    public void setStartTime(float startTime) {
        StartTime = startTime;
    }

    public float getFinishTime() {
        return FinishTime;
    }

    public void setFinishTime(float finishTime) {
        FinishTime = finishTime;
    }

    public float getTurnTime() {
        return TurnTime;
    }

    public void setTurnTime(float turnTime) {
        TurnTime = turnTime;
    }

    public float getPowerTurnTime() {
        return PowerTurnTime;
    }

    public void setPowerTurnTime(float powerTurnTime) {
        PowerTurnTime = powerTurnTime;
    }

    public float getAverageTurnTime() {
        return AverageTurnTime;
    }

    public void setAverageTurnTime(float averageTurnTime) {
        AverageTurnTime = averageTurnTime;
    }

    public float getAveragePowerTurnTime() {
        return AveragePowerTurnTime;
    }

    public void setAveragePowerTurnTime(float averagePowerTurnTime) {
        AveragePowerTurnTime = averagePowerTurnTime;
    }

    @Override
    public String toString(){
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("进程:").append(PeocessName).append(" ")
                .append("到达时间:").append(ArriveTime).append(" ")
                .append("运行时间:").append(RunningTime).append(" ")
                .append("开始时间:").append(StartTime).append(" ")
                .append("完成时间:").append(FinishTime).append(" ")
                .append("周转时间:").append(TurnTime).append(" ")
                .append("带权周转时间:").append(PowerTurnTime).append(" ");
        return stringBuilder.toString();
    }

}
public class RR {
    private static int slice;
    private static float time;
    private static float turn = 0, powerturn = 0;
    private static float[] flag, run;
    public static void rr(Process[] processes) {
        Scanner scanner = new Scanner(System.in);
        //当前时间
        time = processes[0].getArriveTime();
        //设置时间片大小
        System.out.print("请输入时间片大小:");
        slice = scanner.nextInt();
        sort(processes);
        for (int i = 0; i < processes.length; i++){
                processes[i].setStartTime(flag[i]);
                processes[i].setRunningTime(run[i]);
                processes[i].setTurnTime(processes[i].getFinishTime() - processes[i].getArriveTime());
                processes[i].setPowerTurnTime(processes[i].getTurnTime() / processes[i].getRunningTime());
                turn  += processes[i].getTurnTime();
                powerturn += processes[i].getPowerTurnTime();
            System.out.println(processes[i].toString());
        }
        processes[0].setAverageTurnTime(turn / (float)processes.length);
        processes[0].setAveragePowerTurnTime(powerturn / (float)processes.length);
        System.out.println("平均周转时间:" + processes[0].getAverageTurnTime());
        System.out.println("平均带权周转时间:" + processes[0].getAveragePowerTurnTime());
    }

    private static void sort(Process[] processes) {
        int i = 0;
        int k = 1;
        flag = new float[processes.length];
        run = new float[processes.length];
        Process[] processes1 = new Process[processes.length];
        for (int j = 0; j < processes1.length; j++){
            processes1[j] = processes[j];
            run[j] = processes[j].getRunningTime();
        }
        //就绪队列
        ArrayList<Process> a = new ArrayList<>();
        a.add(processes1[0]);
        while (!a.isEmpty()) {
            Process tmp = a.get(0);
            a.remove(0);
            if (k < processes.length) {
                if (processes[i].getArriveTime() <= Math.min(slice, processes[i].getRunningTime())) {
                    a.add(processes1[k]);
                }
                flag[k] = time + a.size();
                k++;
            }
            if (tmp.getRunningTime() > slice) {
                tmp.setRunningTime(tmp.getRunningTime() - slice);
                time += slice;
                a.add(tmp);
            } else {
                time += slice;
                tmp.setFinishTime(time);
                processes[(int) tmp.getPeocessName()].setFinishTime(tmp.getFinishTime());
            }
        }
    }
}
public class SchedulingAlgorithm {

    public static void main (String[] args){
        SchedulingAlgorithm s = new SchedulingAlgorithm();
        s.schedulingalgorithm();
        System.out.println(s.toString());
    }

    public void schedulingalgorithm() {
        Scanner scanner = new Scanner(System.in);

        //初始化进程
        System.out.println("请输入进程数目:");
        int size = scanner.nextInt();//进程数
        Process[] processes = new Process[size];//进程存储
        for (int i = 0; i < size; i++) {
            Process process = new Process();
            System.out.println("请输入第" + (i + 1) + "个进程的名字 提交时间 运行时间");
            process.setPeocessName(scanner.nextFloat());
            process.setArriveTime(scanner.nextInt());
            process.setRunningTime(scanner.nextInt());
            processes[i] = process;
        }

        while (true) {
            System.out.println("1.FCFS");
            System.out.println("2.SJF");
            System.out.println("3.RR");
            System.out.println("4.HRRN");
            System.out.println("5.退出");
            int chioce;
            System.out.print("请选择算法:");
            chioce = scanner.nextInt();
            while (chioce <= 0 || chioce > 5) {
                System.out.println("无此选项请重新输入:");
                chioce = scanner.nextInt();
            }
            if (chioce == 5) {
                System.exit(0);
            }
            switch (chioce) {
                case 1:
                    FCFS.fcfs(processes);
                    break;
                case 2:
                    SJF.sjf(processes);
                    break;
                case 3:
                    RR.rr(processes);
                    break;
                case 4:
                    HRRN.hrrn(processes);
                    break;
            }
        }
    }
}
public class SJF {

    public static void sjf(Process[] processes){
        float time = processes[0].getArriveTime();
        float turn = 0;
        float powerturn = 0;
        sort(processes);
        for (int i = 0; i < processes.length; i++) {
            processes[i].setStartTime(time);
            processes[i].setFinishTime(processes[i].getRunningTime()+time);
            processes[i].setTurnTime(processes[i].getFinishTime() - processes[i].getArriveTime());
            processes[i].setPowerTurnTime(processes[i].getTurnTime() / processes[i].getRunningTime());
            time += processes[i].getRunningTime();
            turn  += processes[i].getTurnTime();
            powerturn += processes[i].getPowerTurnTime();
            System.out.println(processes[i].toString());
        }
        processes[0].setAverageTurnTime(turn / (float)processes.length);
        processes[0].setAveragePowerTurnTime(powerturn / (float)processes.length);
        System.out.println("平均周转时间:" + processes[0].getAverageTurnTime());
        System.out.println("平均带权周转时间:" + processes[0].getAveragePowerTurnTime());
        newsort(processes);
    }

    private static void newsort(Process[] processes) {
        for (int i = 1; i < processes.length; i++){
            int l = (int) processes[i].getPeocessName();
            Process t;
            t = processes[l];
            processes[l] = processes[i];
            processes[i] = t;
        }
    }


    public static void sort(Process[] processes){
        Process tmp = null;
        for (int i = 1; i < processes.length-1; i++){
            for (int j = 1; j < processes.length-i; j++){
                if (processes[j].getRunningTime() > processes[j+1].getRunningTime()){
                    tmp = processes[j];
                    processes[j] = processes[j+1];
                    processes[j+1] = tmp;
                }
            }
        }
    }
}

Java操作系统进程调度算法——先来先服务(FCFS)算法 Java操作系统进程调度算法——先来先服务(FCFS)算法 Java操作系统进程调度算法——先来先服务(FCFS)算法 文章目录Java操作系统进程调度算法——先来先服务(FCFS)算法前言一、算法思想二、数据结构1.定义(PCB)进程控制块2.实现思路三、流程图新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数 阅读详情

相关推荐

【操作系统 - 6】磁盘调度算法

【操作系统 - 6】磁盘调度算法 --- 学习至此,发现很多学了但很久没用的知识,久而久之,慢慢遗忘。等哪天还需要的话,却发现已经忘得差不多了,即使整理了文档(word等),还是得从头再学一遍。读研第一学期,发现很多东西都可以从博客上学习到,也有不少博主呕心沥血整理了挺多有用的博文。于是,本人借此契机,也慢慢开始整理一些博文,不断改进完善中。

Houchaoqun_XMU的博客 2万+

先来先服务、高优先权、按时间片轮转调度算法(含清晰流程图)

操作系统实验三 实验报告 课程名称 计算机操作系统 实验名称 进程调度 实验类型 验证 设计 综合 创新 【实验目的】 实验目的: (1)通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调...

居贝比的博客 3万+

模拟实现操作系统调度算法

结合自己所学知识(数据结构)以及对操作系统调度算法的理解,模拟实现了一下操作系统的调度算法,主要包括先来先服务和短作业优先调度。

only_do_IT 6534

短进程优先的调度算法详解

一、SPF算法简介 SJF算法 SJF(shortest job first)是以进程的运行时间长度作为优先级,进程运行时间越短,优先级越高。 SJF算法的缺点 必须预知进程的运行时间。即使是程序员也很难准确估计进程运行时间。如果估计过低,系统就可能按估计的时间终止进程的运行,但此时进程并未完成,故一般都会偏长估计对长进程不利。长进程的周转时间会明显地增长。可怕的是,SJF

yinjing8435的博客 3万+

操作系统之调度算法

调度算法的评价指标 cpu利用率 cpu利用率=cpu有效工作时间 / (cpu有效工作时间+cpu空闲时间) 系统吞吐量:单位时间内完成作业的数量 系统吞吐量=总共完成作业数 / 总共耗费时间 周转时间:从作业被提交到作业完成为止的时间间隔 周转时间 = 作业完成时间 - 作业提交时间 带权周转时间 带权周转时间 = 周转时间 / 作业实际运行时间 平均周转时间 平均周转时间 = 各作业周转时间之和 / 作业数 平均带权周转时间 平均带权周转时间 = 各作业带

weixin_43644527的博客 2350

操作系统实验—进程调度算法(java)

模拟进程调度的5个算法:FCFS、SJF、RR、PR(动态)、HRRN

weixin_55743328的博客 4601

操作系统——调度算法

本文的主要内容是调度算法的介绍,包括先来先服务(FCFS)、最短时间优先(SJF)、最高响应比优先(HRRN)、时间片轮转(RR)、优先级调度和多级反馈队列这六种方法,这些调度算法会从其算法思想、算法规则、该方法用于作业调度还是进程调度、进程调度的方式(抢占式和非抢占式)、优缺点以及是否会导致饥饿这几个方面展开介绍,同时在介绍每种调度算法时还会举例子辅助理解。...

西岸贤 1万+

进程调度流程图.doc

进程调度流程图.doc

【操作系统】调度算法

微信搜索:编程笔记本 微信搜索:编程笔记本 微信搜索:编程笔记本 点击上方蓝字关注我,我们一起学编程 欢迎小伙伴们分享、转载、私信、赞赏 小伙伴儿们看完以后可不可以帮我点亮一下在看呀~ 调度算法 文章目录调度算法1. 先来先服务调度算法(FCFS)2. 短作业优先调度算法(SJF)3. 高响应比优先调度算法(HRRN)4. 时间片轮转调度算法(RR)5. 优先级调度算法6. 多级反馈队列调度算法 1. 先来先服务调度算法(FCFS) 算法思想: 主要从“公平”的角度考虑(类似于生活中排队买东西的例子.

qq_42247231的博客 2627

Flink CDC 3.0 详解

Flink CDC 是基于数据库日志 CDC(Change Data Capture)技术的实时数据集成框架,支持全增量一体化、无锁读取、并行读取、表结构变更自动同步、分布式架构等高级特性。配合Flink 优秀的管道能力和丰富的上下游生态,Flink CDC 可以高效实现海量数据的实时集成。Flink CDC 于2023年12月7日重磅推出其全新的 3.0 版本,3.0版本的发布对 Flink CDC 而言具有里程碑的意义,自此 Flink CDC 从捕获数据变更的Flink 数据源正式迈向为以 Flink

奔跑的蜗牛的博客 2638

别再死磕官方文档了!用宿舍开黑的故事,5分钟搞懂Autosar CanNM网管报文

本文通过宿舍开黑游戏的生动类比,深入浅出地解析了Autosar CanNM网管报文的工作原理。从游戏队友协作到汽车ECU节点的同步机制,详细介绍了网管报文的唤醒流程、通信协议及休眠策略,帮助读者快速掌握这一关键技术。

weixin_30463341的博客 261

【操作系统】几种常用调度算法

先来先服务调度算法(FCFS)、短作业优先调度算法(SJF)、最短作业优先调度算法(SJF)、最短剩余时间优先调度算法(SRTF)、响应比最高者优先调度算法(HRRF)、时间片轮转调度算法(RR)、优先级调度算法(PSA)、多级反馈队列调度算法 (MLFQ)

FishC的博客 3万+

告别AT串口线!用STM32F407的USB FS口直连EC800M进行物联网通信

本文介绍了一种创新的物联网通信方案,利用STM32F407的USB FS接口直连EC800M模块,替代传统的AT串口线连接。通过详细的硬件对比、STM32CubeMX配置和USB驱动调试步骤,展示了如何实现更高效的AT指令通信,同时降低硬件复杂度和功耗。

weixin_29189987的博客 705

操作系统任务调度算法

简单调度算法(如 FCFS)适用于负载较低或任务均匀的系统。短作业优先能优化平均等待时间,但存在长作业饥饿问题。时间片轮转适合多任务操作系统,保证公平性和响应性。优先级调度适合有优先级差异的任务,但可能导致低优先级任务饥饿。多级队列调度能适应不同任务的需求,但管理复杂。多级反馈队列灵活性高,能动态调整进程优先级,适用于任务类型复杂的系统。响应比优先避免饥饿现象,适合公平调度和实时任务处理。最早截止时间优先适合硬实时系统,保证任务按时完成。速率单调调度适用于周期性任务,适合硬实时系统。

jlihan的博客 1883

【PCIe】CDNS PCIe VIP 杂记 -- Callback

最近在研究Cadence PCIe VIP,怎一个“惨淡”来描述。用的真是一言难尽啊,都是泪。记录一些最近学习的觉得想记录的内容在此,仅供参考讨论学习哈。有不对之处请指出大家一起讨论。

小邦是名小ICer的博客 2716

Matlab仿真:均匀面阵方向图、均匀线阵方向图、均匀圆阵方向图

其中,阵列方向图是评价阵列性能的重要参数之一。均匀面阵由若干个相同的阵元构成,阵元间等距排列,阵元的方向图形状为一个圆盘。均匀线阵由若干个相同的阵元构成,阵元间等距排列,阵元的方向图形状为一个矩形。本文将采用Matlab进行仿真,分别实现均匀面阵方向图、均匀线阵方向图和均匀圆阵方向图,并对三种阵列进行比较分析。通过以上代码仿真,我们可以对均匀面阵、均匀线阵和均匀圆阵进行方向图的绘制,进一步分析不同阵列在天线性能方面的差异。Matlab仿真:均匀面阵方向图、均匀线阵方向图、均匀圆阵方向图。

2301_79326857的博客 3436

【操作系统】 2.2 调度概念以及调度算法

手中有粮,心中不慌。

小新的博客 4327

mbed驱动st7789屏幕-硬件选择及连接(1)

在单片机项目中,交互性至关重要,而视觉感知是用户交互的直接体现。本期专栏介绍了如何使用mbed平台驱动ST7789型号的TFT屏幕,以显示字符、汉字和图像。由于针对STM32L432KC的mbed驱动库尚未完整,作者自行编写了一个基于mbed的ST7789屏幕驱动库,并将在专栏中提供全代码及使用指南。

weixin_64524066的博客 390

操作系统实验六:作业调度算法模拟

一、实验目的 (1)掌握周转时间、等待时间、平均周转时间等概念及其计算方法。 (2)理解五种常用的进程调度算法(FCFS、SJF、HRRF、HPF、RR),区分算法之间的差异性,并用C语言模拟实现各算法。 (3)了解操作系统中高级调度、中级调度和低级调度的区别和联系。 二、实验环境 硬件环境:计算机一台,局域网环境; 软件环境:Windows或Linux操作系统,C语言编程环境。 三、实验内容和步骤 (一)实验说明 1.基本概念 程序:程序是指静态的指令集合,它不占用系统的运行资源,可以长久地保存在磁盘中。

努力学习的小菜同学 1万+

Transformer实战(39)——多模态生成式Transformer

能够理解多种类型输入的模型被称为多模态模型。多模态学习是人工智能 (Artificial Intelligence, AI) 领域的重要研究方向之一,长期受到众多研究人员的关注。本节将介绍使用多模态模型的生成式 AI,包括文本到图像 (text-to-image) 和文本到音乐 (text-to-music) 的生成模型。将介绍 Stable Diffusion 及其工作原理,同时也将介绍 MusicGen 和 AudioGen 模型。

盼小辉丶的博客 2406

SystemVerilog从入门到实战

SystemVerilog复合数据类型概述 SystemVerilog增强了Verilog的数据建模能力,提供多种复合数据类型: 数组类型:包括定宽数组(固定大小)、动态数组(运行时分配)和多维数组,支持高效索引访问。 队列:结合数组和链表特性,支持两端快速插入/删除操作,提供push/pop等方法。 关联数组:键值对存储结构,支持稀疏数据存储和快速查找,提供exists/delete等方法。 结构体:组合不同类型数据成员,支持打包(packed)形式以优化存储空间。 枚举类型:为数值赋予语义名称,支持状态

2301_79143213的博客 1223

【操作系统】常用的调度算法

在操作系统中,进程或作业调度的实质是进行资源分配,而这主要涉及CPU的分配与调度。CPU的调度算法就是根据该系统的资源分配策略设计出来的一个资源分配算法,常用的调度算法有:先来先服务调度算法、短作业/短进程优先算法、时间片轮转调度算法、高响应比优先调度算法、优先级调度算法和多级反馈队列调度算法等6种,接下来围绕着这6种算法进行讲解。...

weixin_45893787的博客 7306

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

操作系统中作业的调度算法

选择调度方式和调度算法的若干准则 1.面向用户的准则 (1) 周转时间短。 周转时间是指从作业被提交给系统开始,到作业完成为止的这段时间间隔(称为作业周转时间)。 包括四部分: 1、作业在外存后备队列上等待(作业)调度的时间 2、进程在就绪队列上等待进程调度的时间 3、进程在CPU上执行的时间 4、进程等待I/O操作完成的时间。 (a)周转时间 = 完成时刻 - 提交时刻(到达时间) ...

ganghaodream的博客 8626

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: 操作系统实验动态分区
java洲
博客等级 码龄6年 5粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值