作业调度和进程调度的辨析题_进程调度的功能有哪些

作业调度和进程调度的辨析题_进程调度的功能有哪些很多学习完《操作系统原理》这门课程的小伙伴都应该对“FCFS(先到先服务)”、“SJF(短作业优先)”等调度算法原理比较熟悉。但是在实际做题的时候,往往一不小心就把概念搞错,不容易区分“作业调度”和“进程调度”的区别。下面我主要针对这两个概念进行解析并给出经典习题解答。PS:本博客并不详解每种调度算法的原理,因此有这方面需求的小伙伴可以直接pass了。1、作业调度作业调度又称为高级调度,频度较低。其主要工作是将位于外存后备队列中的某个(或某几个)作业调入内存,排在就绪队列上。注意了,这个时候仅仅是将作

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

很多学习完《操作系统原理》这门课程的小伙伴都应该对“FCFS(先到先服务)”、“SJF(短作业优先)”等调度算法原理比较熟悉。但是在实际做题的时候,往往一不小心就把概念搞错,不容易区分“作业调度”和“进程调度”的区别。下面我主要针对这两个概念进行解析并给出经典习题解答。
PS:本博客并不详解每种调度算法的原理,因此有这方面需求的小伙伴可以直接pass了。

1、作业调度

作业调度又称为高级调度,频度较低。其主要工作是将位于外存后备队列中的某个(或某几个)作业调入内存,排在就绪队列上。注意了,这个时候仅仅是将作业调入内存,并为作业创建进程、分配资源,此时进程处于就绪态,并没有执行

2、进程调度

进程调度又称为低级调度,是最基本的、频度最高的调度方式。其主要任务是从就绪队列中选取一个(或几个)进程,并分配处理机的过程,这时候才可以理解为“执行”。

3、区别

作业调度和进程调度最主要的区别在于,前者是为作业建立进程的过程,是将作业由外存调入内存的过程;而后者整个过程并没有跑出内存的范围,是将就绪态的进程变为运行态的过程。

下面,我们就某个实例题目,给大家做进一步的辨析。
———————————————————————————
题目:
有一个两道批处理系统,它只有一个CPU(一次只能处理一个进程),在作业调度算法采用短作业优先调度、进程调度算法采用抢占式优先级调度。假设有四个作业J1、J2、J3、J4,其运行情况如下表所示,采用“优先数越小、优先级越高”的原则,计算平均周转时间。
在这里插入图片描述

解析:
在做这种题的时候最好画一个就绪队列,或者脑海中想象一个就绪队列,以免思维混乱,初始情况下就绪队列为空:
在这里插入图片描述

还要注意一点的是,“单CPU两道批处理系统”的意思是,一次最多允许两道作业存在,并且一次只能处理一道作业。

① 首先8:00的时候作业J1到达(注意这里的“到达”不是指到达就绪队列,而是表明“J1这个任务来了,我们即将处理它”,很浅层的意思,不要多想),这个时候只有J1,那么毫无疑问直接调入内存,由于是两道批处理,我们假设这里的内存叫内存1,进入就绪队列,然后开始执行,也就是分配CPU
此时的就绪队列如下(空),因为J1刚进入就绪队列就被分配了CPU,转为运行态:
在这里插入图片描述

② 8:20的时候,J2到达,此时内存还有个位置空闲,显然将J2调入内存,我们叫内存2,进入就绪队列,那调入内存后要不要分配CPU呢?这就得看我们的进程调度算法了,使用抢占式优先级调度,J2的优先数要小于J1,因此优先级大,此时J1被迫暂停执行,重新回归就绪队列,而J2从就绪队列出去,分配CPU,进入运行态,而此时J1还剩下20min时间;
此时的就绪队列如下:
在这里插入图片描述

③ 8:30的时候,J3到达,但是内存此时已经没有位置了,即一道给了J1,另一道给了J2,因此J3只能在外存的后备队列里等着,进不了就绪队列;
此时的就绪队列没变:
在这里插入图片描述

④ 8:50,J2执行完毕,这样“内存2”就空出来了,此时J4正好也到达了,那到底是将J3还是J4调入内存就绪队列中呢?看我们的作业调度算法,短作业优先,J4需要的的时间要比J3短,因此J4先调入内存2;
此时的就绪队列如下:
在这里插入图片描述

⑤ 现在就绪队列里有J1、J4,谁先执行呢?比较优先级的大小!J1的优先级大,因此J1先执行。注意:此时两道内存仍然还有作业,因此J3还是要在外存中等着;
此时的就绪队列如下:
在这里插入图片描述

⑥ 9:10的时候,J1执行完毕了,内存1就空出来了,这个时候J3就可以调入内存1了,即进入就绪队列;
此时的就绪队列如下:
在这里插入图片描述

⑦ 同理,J3优先级高,先占用CPU开始执行,到10:00执行完毕,此时J4分配CPU开始执行20min,到10:20执行完毕。至此,全部作业都完成了。
此时的就绪队列自然也清空了:
在这里插入图片描述

好了,以上就是整个过程的全部详解,只看文字略显枯燥,我们附上整个过程的Gantt图:
在这里插入图片描述

答案:
J1的周转时间 = J1的等待时间 + J1的运行时间 = 30 + 40 = 70min;
J2的周转时间 = 0 + 30 = 30min;
J3的周转时间 = 40 + 50 = 90min;
J4的周转时间 = 70 + 20 = 90min.

最终的平均周转时间 = (70 + 30 + 90 + 90) / 4 = 70min.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187772.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nodejs和java多线程_nodeJS和Java哪个难?「建议收藏」

    nodejs和java多线程_nodeJS和Java哪个难?「建议收藏」刚好最近学了一点Java,来回答下这个问题。首先这个问题不好说谁难谁易(就像是问篮球足球谁难),深入学习之后会发现都很难。nodeJS底层是依赖v8跟libuv(c\c++),部分模块是用c++编写,所以深入了解之后会发现还得学c++。而Java将代码编译成字节码运行在虚拟机上,相应的Java字节码、JVM都要去了解。所以研究底层的话两者都很难,不太好区分谁更难。不过从题主的问题来看可能想问的是n…

    2022年7月7日
    30
  • CSS使图片变模糊,亲测非常好用「建议收藏」

    CSS使图片变模糊,亲测非常好用

    2022年2月15日
    36
  • Python学习(九)Python缩进规则[通俗易懂]

    Python学习(九)Python缩进规则[通俗易懂]其它程序设计语言(如Java、C语言)采用大括号“{}”分隔代码块不同,Python采用代码缩进和冒号(:)来区分代码块之间的层次。在Python中,对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进,表示下一个代码块的开始,而缩进的结束则表示此代码块的结束。注意,Python中实现对代码的缩进,可以使用空格或者Tab键实现。但无论是手动敲空格,还…

    2022年10月13日
    3
  • snort:预处理器开发HelloWorld

    snort:预处理器开发HelloWorld文章目录参考 1 预处理器回顾 2 README PLUGINS3 spp template c 参考 Snort 预处理插件 HelloWorld 程序开发 Snort 预处理器介绍 详细 本专栏所有相关博文使用的 snort 版本均为 2 9 151 预处理器回顾预处理器在 Snort 应用规则前处理接收到的数据预处理器对每一个数据包只执行一次被捕获的数据包首先经过预处理器 然后经过探测引擎根

    2025年7月22日
    2
  • ubuntu安装python pip_anaconda pipenv

    ubuntu安装python pip_anaconda pipenv简单介绍在Ubuntu上安装Python的virtualenv前提:本机安装了Linux系统(这里推荐用Ubuntu安装,或是CentOS)(Ubuntu的安装比较简单,推荐用VirtualBox,可以去Oracle官网下载VirtualBox(https://www.virtualbox.org/),然后去Ubuntu官网(https://www.ubuntu.com/download)…

    2022年8月26日
    4
  • html一个汉字空格占位_html表示空格的特殊符号

    html一个汉字空格占位_html表示空格的特殊符号 ==普通的英文半角空格 == == ==no-breakspace(普通的英文半角空格但不换行) ==中文全角空格(一个中文宽度) == ==en空格(半个中文宽度) == ==em空格…

    2022年10月5日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号