操作系统--处理机调度

4 处理机调度

4.1 调度类型

    操作系统必须为多个进程的竞争请求分配计算机资源。处理机调度的任务就是选出待分派的作业或进程,为之分配处理机。

    为了便于处理机调度管理,通常在处理机调度中采用分级调度方式,其中包括以下3级调度:
1. 作业调度

    作业调度,又称高级调度。其主要功能是根据一定的算法,从输人的一批作业中选出若干个作业,分配必要的资源,如内存、外设等,为它建立相应的用户作业进程和为其服务的系统进程(如输人、输出进程),最后把它们的程序和数据调人内存,等待进程调度程序对其执行调度,并在作业完成后作善后处理工作。

2. 交换调度

    交换调度,又称中级调度。为了使内存中同时存放的进程数目不至于太多,有时就需要把某些进程从内存中移到外存上,以减少多道程序的数目,为此设立了中级调度。特别在采用虚拟存储技术的系统或分时系统中,往往增加中级调度这一级。所以中级调度的功能是在内存使用情况紧张时,将一些暂时不能运行的讲程从内存对换到外存上等待。当以后内存有足够的空闲空间时,再将合适的进程重新换人内存,等待进程调度。引人中级调度的主要目的是为了提高内存的利用率和系统吞吐量。它实际上就是存储器管理中的对换功能。

3.进程调度

    进程调度,又称低级调度。其主要功能是根据一定的算法将CPU分派给就绪队列中的一个进程。执行低级调度功能的程序称做进程调度程序,由它实现CPU在进程间的切换。进程调度的运行频率很高,在分时系统中往往几十毫秒就要运行一次。进程调度是操作系统中最基本的一种调度。在一般类型的操作系统中都必须有进程调度,而且它的策略的优劣直接影响整个系统的计能。

4.2 进程调度

    进程调度的主要功能是按照某种原则决定就绪队列中的哪个进程能够获得处理机,并将处理机出让给它进行工作。处理机分配任务是由进程调度程序完成的,它是操作系统最为核心的部分,执行十分频繁,并常驻内存工作。

    继承调度的实现过程主要分为3步:

1. 保存现场

    当前运行的进程调用进程调度程序时,表示该进程要求放弃CPU(因时间片用完或等待I/O等原因)。这时,进程调度程序把它的现场信息(如程序计数器及通用寄存器的内容等)保留在该进程PCB的现场信息区中。

2. 挑选进程

    根据一定的调度算法(如优先级算法),从就绪队列中选出一个进程,把它的状态改为运行状态,准备把CPU分配给它。

3. 恢复现场

    为选中的进程恢复现场信息,把CPU的控制权交给该进程,使它接着上次间断的地方继续运行。

4.2.1 引起进程调度的原因

    什么时候需要执行进程调度呢?一般在以下事件发生后要执行进程调度:

1)当前运行进程结束。因任务完成而正常结束,或者因出现错误而异常结束。

2)当前运行进程因某种原因,如I/O请求,P操作、阻塞原语等,从运行状态进入阻塞状态。

3)执行完系统调用等系统程序后返回用户进程,这时可以看作系统进程执行完毕,从而可以调度一个新的用户进程。

4)在采用抢占调度方式的系统中,一个具有更高优先级的进程要求使用处理器,则使当前运行进程进入就绪队列(这与调度方式有关)。

5)在分时系统中,分配给该进程的时间片已用完(这与系统类型有关)。

4.2.2  进程调度的方式

   进程调度方式是指当前一个进程正在处理器上执行,若有某个更为重要或紧迫的进程需要进行处理,此时应该如何分配处理器。

1. 非抢占式调度方式(Non-preemptive)

    非抢占式调度方式是指当一个进程正在处理器上执行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程完成或发生某种事情而进入阻塞状态时,才把处理器分给该重要或紧迫的进程。

2.抢占式调度方式(preemptive

    抢占式调度方式是指当一个进程正在处理器上执行时,若有某个更为重要或紧迫的进程需要使用处理器,则立即暂停正在执行的进程,将处理器分配给这个更为重要或紧迫的进程。

4.3 调度准则

    为了衡量调度算法的性能,人们提出了一些评价准则,主要有以下几点。

1.CPU利用率

    CPU利用率是指CPU做有效工作的时间比例。即CPU利用率=CPU有效工作时间/CPU总的运行时间,CPU总的运行时间=CPU有效工作时间+CPU空闲等待时间。

2.系统吞吐量

    系统吞吐量表示单位时间内完成作业的数量,系统吞吐量越大越好。长作业由于要占用较长的CPU处理时间,因此会导致吞吐量下降,对于短作业则相反。

3.就绪等待时间

     就绪等待时间是指每个进程在就绪队列中的等待时间。

4.响应时间

     响应时间是指从提出请求到第一次回应的时间。

5.周转时间

    周转时间是指每个进程从提出请求到运行完成的时间。

4.4 调度算法

    调度算法是指根据系统的资源分配策略所规定的资源分配方法。

4.4.1 批处理系统中采用的调度算法

1. 先来先服务

    先来先服务(First Come First Serve,FCFS)是按照先进先出(First In First Out,FIFO)的思想设计的,按照进程就绪的先后顺序使用CPU,是一种非抢占式调度方式。

    FCFS算法既可用于作业调度,又可用于进程调度。

    优缺点:公平,实现简单,有利于长进程和CPU繁忙型作业,但是不利于短进程和I/O繁忙型作业。

2. 最短作业优先

    短作业优先(Shortest Job First)是对FCFS算法的的改进,其目的是减少平均周转时间。采用该算法分配CPU时,选择所需处理时间最短的进程。

3. 最短剩余时间优先

    最短剩余时间优先(Shortest Remaining Time First)是把SJF算法改为抢占式,即当一个新就绪的进程比当前运行进程具有更短的完成时间时,系统抢占当前进程,选择新就绪的进程执行。

4. 最高响应比优先

    最高响应比优先是一个综合的算法啊,既考虑作业等待时间,又考虑作业运行时间,调度时,首先计算每个进程的响应比R,总是选择R最高的进程执行。

    响应比R=周转时间/处理时间=(处理时间+等待时间)/处理时间=1+(等待时间/处理时间)。

4.4.2 交互式系统的调度算法

1. 优先级调度

    优先级调度(Priority Scheduling,PS)算法是从就绪队列中选出优先级最高的进程,让它在CPU上运行。该算法的核心问题是如何确定进程的优先级。

    通常:系统进程优先级高于用户进程;前台进程优先级高于后台进程;操作系统更偏好 I/O型进程。

    优先级可以是静态不变的,也可以动态调整。

2. 时间片轮转法

    时间片轮转法(Round-Robin,RR)的实现思想是:将系统中所有的就绪进程按照FCFS原则,排成一个队列。每次调度时将CPU分派个队首进程,让其执行一个时间片。把就绪队列看成一个环状结构,调度程序按时间片长度轮流调度就绪队列中的每一进程,使每一进程都有机会获得相同长度的时间占用处理机运行。在一个时间片结束时,发生时钟中断。调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。进程可以未使用完一个时间片就出让CPU(如阻塞)。

    优缺点:

优点:简单易行,平均响应时间短。

缺点:不利于处理紧急作业。

3. 多级队列法

    多级队列(Multilevel Queue,MQ)调度算法把就绪队列划分成几个单独的队列,一般根据进程的某些特性,如占有内存大小、进程优先级和进程类型,永久性地把各个进程分别链入不同的队列中,每个队列都有自己的调度算法。

4. 多级反馈队列法

    多级反馈队列法(Multilevel Feedback Queue,MFQ)是

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

permgen_什么是PermGen泄漏?

permgen接下来是对Java应用程序中特定类型的内存问题的实用介绍。 即–我们将分析导致java.lang.OutOfMemoryError:PermGen空间的错误 堆栈跟踪中的症状。 首先,我们将介绍理解该主题所需的核心概念,并解释什么是对象,类&#…

TP、PHP同域不同子级域名共享Session、单点登录

TP、PHP同域不同子级域名共享Session、单点登录 目的: 为了部署同个域名下不同子级域名共享会话,从而实现单点登录的问题,一处登录,同域处处子系统即可以实现自动登录。 PHP支持通过设置cookie使得同域不同子域共享SESSION 1. 通…

html语言书写注意事项,HTML注意事项(学习笔记)

1、在所有浏览器中都是有效的,但使用 其实是更长远的保障。类似的标签也一样2、标签最好用小写,未来的版本中可能强制用小写3、标签属性始终为属性值加引号属性值应该始终被包括在引号内。双引号是最常用的,不过使用单引号也没有问题。在某些…

UTF-8、GB2312、GB18030、GBK和BIG5等字符集编码范围的具体说明

一预备知识 1,字符:字符是抽象的最小文本单位。 它没有固定的形状(可能是一个字形),而且没有值。 “A”是一个字符,“”(德国、法国和许多其他欧洲国家通用货币的标志)也是一个字…

使用Forge,WildFly Swarm和Arquillian开发微服务

在本文中,我们将看到如何使用WildFly Swarm和Forge开发微服务,以及如何使用Arquillian和Rest Assured对其进行测试。 WildFly Swarm提供了一种创新的方法来打包和运行Java EE应用程序,方法是将它们与足够的服务器运行时一起打包以“ java -j…

html页面加载时触发的方法,在页面加载时触发onchange html事件

好的,我在select字段上有一个onchange事件。它现在很棒。当下拉“网络”更改时,它会刷新第二个下拉列表。我还希望顶部的ajax代码在页面加载和onchange上触发,以便填充第二个列表。这是因为它在编辑页面上。这是使用第一个的ajax调用function…

PYTHON-进阶-编码处理小结

开始 用python处理中文时,读取文件或消息,http参数等等 一运行,发现乱码(字符串处理,读写文件,print) 然后,大多数人的做法是,调用encode/decode进行调试,并没有明确思考为何出现乱码…

华为鸿蒙话题作文800字,关于鸿蒙OS 华为最高层发布最新通知:统一口径-华为,智能手机,鸿蒙...

6月2日晚,华为正式推出了HarmonyOS(鸿蒙操作系统),引发了国内外空前关注。OS操作系统是中国手机甚至整个科技行业的弱点,因此鸿蒙OS带来的震撼及争议都很多,甚至华为内部员工对它的认知也不相同。为此华为总裁办昨天发布了题为《关…

8-4 Fabled Rooks uva11134

题意:你的任务是在n*n的棋盘上放 n 小于5000 个车 使得任意两个车不互相攻击 且第i个车在一个给定的矩形ri之内 给出该矩形左上角坐标和右下角坐标四个点 必须满足放车的位置在矩形内 边上也行 如果无解输出IMPSSIBLE 行与列是独立的 所以可以分割成两个一模一…

谷歌guava_Google Guava MultiMaps

谷歌guava番石榴 这是我尝试解释和探索Google很棒的Guava java库的系列文章中的第一篇。 我在搜索Apache Commons Collections的通用版本时遇到了番石榴(Guava)–我需要一个Bimap并且厌倦了必须使用强制类型转换来填充我的代码–但是我发现要好得多。 …

python 获取系统相关编码的函数

怎么避免UnicodeEncodeError: ‘ascii’ codec can’t…类似的错误? 1、首先在py文件头部指定文件内容编码,例如:# coding: utf8 2、文件保存的时候要和py文件头部编码一致 3、在用decode和encode的时候,一定要确认要转换的字符原…

百度的html代码是什么,百度网页源代码是什么?

2017-07-28Java抓取网页的内容代码是什么public static String getHtmlReadLine(String httpurl){String CurrentLine”";String TotalString”";InputStream urlStream;String content”";try {URL url new URL(httpurl);// URL url new URL(“http://www。 …

html中高与行高的区别,深入了解css的行高Line Height属性

什么是行间距?古时候我们是用印刷机来处理文字,印出来的每个字都位于独立的一个块里。行间距,即传说中控制两行文字之间垂直距离的东东。在CSS,line-height被用来控制行与行之间的垂直距离。不过行间距与半行间距还是取决于CSS中的…

自动生成优化的Java类专业知识

如果您今年访问过JavaOne,您可能已经参加了我的演讲“如何从数据库生成定制的Java 8代码”。 在那次演讲中,我展示了如何使用Speedment Open Source工具包使用数据库作为域模型来生成各种Java代码。 我们没有时间要考虑的一件事是,Speedment不…

vue动态路由配置,vue路由传参

如果是不同的组件过来的,可以设置不同的id值,只要在目标组件获取属性id的值就可以了,参数就利用query.属性值来获取 转载于:https://www.cnblogs.com/xiaoqi2018/p/10434318.html

Linux Netcat 命令——网络工具中的瑞士军刀

netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。 netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后…

win10怎么放计算机在桌面,win10我的电脑怎么放在桌面

win10我的电脑图标怎么放在桌面呢?一不小心将win10桌面上的此电脑图标删除了,找了半天都没找到它。win10系统怎么将我的电脑图标藏的隐蔽。今天,我就将找回win10我的电脑图标方法分享给你们刚重装完win10系统有些小伙伴就急急忙忙的来询问小编…

project 2013 显示标题

1、分析 右键只能插入任务,不能插入标题,而插入任务会被编号,目前只能在打印设置标题,不能在编辑界面显示标题的,或者使用最高级任务的方式 2、解决 文件,打印,页面设置,页眉&#x…

getopt在Python中的使用

在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为"-"加上单个字母选项;长选项为"--"加上一个单词。长格式是在Linux下引入的。许多Linux程序都支…

大数据的数据采集数据处理_让我们处理大数据

大数据的数据采集数据处理作为开发人员,我们的重点是简单,有效的解决方案,因此,最有价值的原则之一就是“保持简单和愚蠢”。 但是使用Hadoop map-reduce很难坚持这一点。 如果我们要评估多个Map Reduce作业中的数据,我…