OS中处理机调度模型和调度算法

  1. 调度层次

    1.1. 高级调度(长程调度,作业调度)

    功能:依据某种算法。把在外存队列上处于后备队列的那些作业调入内存。以作业为操做对象。

    作业:比程序更为广泛的概念,不仅包括通常的程序和数据。还包括一份作业说明书,系统依据作业说明书对程序的运行进行控制。

    作业步:每一个作业都要经过若干个相对独立而又相互关联的顺序加工步骤才干得到结果,我们把每一个步骤称为一个作业步。

    作业流:若干个作业进入系统后被依次存放在外存上,这样便形成了输入的作业流。

    作业控制块(JCB):JCB是作业在系统中存在的标志。保存着系统对作业进行管理和调度所需的所有信息。详细包括的内容依据系统而异。

    作业调度 的作用

    1. 决定接纳多少个作业
    2. 决定接纳那些

    1.2. 中级调度(中程调度,对换)

    功能:将临时不能运行的进程调到外存上,使其处于外存就绪状态或者外存挂起状态,提高系统的利用率和吞吐量。

    3. 低级调度 (短程调度,进程调度)

    功能:最主要的一种调度 ,主要用来保存处理机的现场信息(进行进程调度时首先保存当前进程的现场信息,将现场信息保存到该进程PCB的对应位置),按某种算法选取进程(依据算法选进程),把处理机分配给进程(由进程分配程序将处理机分配给进程)。

    基本机制:排队器,分派器,上下文切换机制。

    1. 排队器: 事先将系统的就绪队列中所有的就绪进程依照一定的方式排成一个或者是多个队列。

    2. 分派器:将进程调度程序所选定的的进程从就绪队列中取出。

    3. 上下文切换机制: 对处理机进行切换时,会出现两次的上下文切换。系统首先保存当前进程的上下文。装入分派程序的上下文;最后移除分派程序。把选中的进程的CPU现场信息装入各个对应的寄存器。

    调度方式:抢占式 || 非抢占式

    1. 非抢占式:一旦将处理机分配个某进程,无论运行多长时间,决不同意由于时钟中断而抢占处理机,也不同意其它进程抢占已经分配给他的处理机。除非进程运行结束或者是其自身由于某种原因而发生了堵塞时。才会把处理机交个其它的进程。

    2. 抢占式:同意调度程序基于某种原则而暂停当前正在占用处理机的进程,而将处理机分配给其它的进程。

      (原则:优先权原则,短作业(进程)优先原则,时间片原则)

  2. 调度队列模型及准则

    2.1 调度队列模型

    2.1.1 仅有进程调度的调度队列模型:

    每一个进程在运行时都可能出现下面三种情况:

    (1) 任务在给定的时间片内已经完毕。该进程便在释放处理机后进入完毕状态

    (2) 任务在本次分得的时间片内尚未完毕,OS便将该任务再放入就绪队列的末尾;

    (3) 在运行期间,进程由于某事件而被堵塞后,被OS放入堵塞队列。

     

    2.1.2 具有低级和高级调度的队列模型:

    由作业调度按一定的作业调度算法,从外存的后备队列中选择一批作业调入内存,并为它们建立进程,送入就绪队列,然后才由进程调度依照一定的进程调度算法选择一个进程,把处理机分配给该进程。

    2.1.3 三级调度队列模型:

    在引入中级调度之后。将进程的就绪状态分为内存就绪和外存就绪。相似的也能够将堵塞状态进行划分。分为内存堵塞和外存堵塞,在调度操作下,进程能够由内存堵塞转换为外存堵塞。

2.2 调度准则

2.2.1 面向用户:

(1)周转时间短:所谓周转时间。是指从作业被提交给系统開始,到作业完毕为止这段时间间隔。

其包括四部分时间:1>作业在外存后备队列等待调度时间,2>进程在就绪队列上等待调度时间。3>进程在cpu上运行的时间,4>进程等待I/O操作完毕时间。

平均周转时间:所有作业的周转时间总和与作业数量的比值。

T=1n[∑ni=1Ti]

带权周转时间:作业的周转时间T和系统为它提供服务的时间Ts之比W=TTs

平均带权周转时间:W=1n[∑ni=1TiTs]

(2)响应时间快:所谓的响应时间。是指从用户提交一个请求開始。到系统首次产生响应为止的时间。是选择分时系统中进程调度的重要准则之中的一个。

(3)截止时间的保证:所谓截止时间。是指某任务必须開始运行的最迟时间,挥着必须完毕的最迟时间。

是评价实时系统的重要指标。

(4)优先权原则: 在选择调度算法时,均可遵循优先权原则,让紧急的任务得到及时的处理。必要时要採用抢占式的调度方式,才干保证紧急作业及时处理。

2.2.2 面向系统:

系统吞吐量高,处理机利用率好,各类资源平衡利用。

2.3 调度算法

(1)先来先服务算法(FCFS):最简单的调度算法,既可用于作业调度,也能用于进程调度。

应用在作业调度时,每次都是从后备作业队列中选择一个或者多个最早进入该队列的作业,将其调入内存,为其分配须要的资源,创建进程,加入入就绪队列尾部。应用在进程调度时。每次调度都是从就绪队列中选择一个最早进入对列中的进程,为其分配处理机。直到该进程放弃处理机。

优缺点:有利于长作业(进程)。不利于短作业(进程)

(2)短作业(进程)优先算法(SJF/SPF):从后备队列中选择一个或者多个预计运行时间短的作业或者进程,将他们调入内存或者是为其分配处理机。

优缺点:能明显的改善平均带权周转时间,尤其是对短作业而言。可是该算法对长作业不利,并且未考虑作业的紧迫程度,在实际运行过程中。评判依据仅仅是用户提供的预计运行时间,而用户有可能无意或者有意的缩短预计运行时间,导致不一定能真正的做到短作业优先。

(3)高优先权优先调度算法(FPF):可用于作业调度和进程调度。当进行调度时,选择若干个优先权高的作业或者是进程调入内存或者是为其分配处理机。

优先权的确定分为两类:

(3.1)静态优先权:在创建进程时优先权便已经确定,并且在整个运行期间保持不变。确定依据有:1>进程类型(通常系统进程的优先权高于一般用户的优先权)2>进程对资源的需求(对资源要求少的应该赋予较高的优先权)3>用户要求(由用户进程的紧迫程度以及用户所付费用来确定优先权)

(3.2)动态优先权:动态优先权是指在创建进程时所赋予的优先权,是能够随进程的推进或随其等待时间的添加而改变的,以便获得更好的调度性能。

优缺点:能非常好的体现作业(进程)紧急程度。并依据优先级来进行调度,可是要调度前要比較或者计算作业的优先级,添加了系统的开销。

(4)高响应比优先算法:为每一个作业引入动态的优先权。使得作业的优先权随着等待时间的添加而以速率a提高。

优先权=等待时间+要求服务时间要求服务时间=响应时间要求服务时间

优缺点:该算法既照应了短作业,又考虑了作业到达的先后次序,不会使得长作业长时间得不到服务。

可是该算法每次调度前都要进行响应比的计算,添加系统的开销。

(5)基于时间片的轮转调度算法:

基本原理:系统将所有的就绪进程按先来先服务的原则排成一个队列。每次调度都将cpu交给队首的进程,令其运行一个时间片的时间。运行的时间片用完就令该进程放弃时间片,并将其挂入队尾进行下一次的等待。

时间片大小的确定(核心):在时间片轮转法中,最核心的就是时间片大小的额确定,时间片大小对系统的性能有非常大的影响。时间片太短,有利于短作业,但会频繁的发生中断,。进程上下文的切换,添加系统开销;时间片太长,使得每一个进程在一个时间片单位内都能完毕任务。算法便退化成了FCFS算法,无法满足交互式需求。最为合理的是,时间片略大于一次典型的交互所需的时间。

优缺点:基于时间片轮转,能让每一个任务都有时间得到运行,有较好的交互性,缺点是时间片的确定比較复杂。

(6)多级反馈队列调度算法:

原理:

(1)设置多个就绪队列,并为各个队列赋予不同的优先级。 第一个队列的优先级最高。第二个队列次之,其余各队列的优先权逐个减少。该算法赋予各个队列中进程运行时间片的大小也各不同样,在优先权愈高的队列中,为每一个进程所规定的运行时间片就愈小。

(2)当一个进程进入内存时,首先将其放入第一队列,按FCFS原则排队等候调度。

当调度到该进程时,若能在时间片内完毕,便撤离系统。若在一个时间片内未完毕,将其挂入第二队列队尾,再依照FCFS原则进行排队等候。之后依照第一队列的方式进行运行。

(3)仅当第一队列空暇时,才会调度第二队列中的进程,仅当第1~(i-1)队列均空暇时。才会调度第i队列中的进程。

优缺点:有较好的性能,能非常好的满足各类型用户的需求,缺点是有非常多的排队队列,要消耗系统资源。

OS中处理机调度模型和调度算法的更多相关文章

  1. 《Tsinghua os mooc》第15~16讲 处理机调度

    第十五讲 处理机调度 进程调度时机 非抢占系统中,当前进程主动放弃CPU时发生调度,分为两种情况: 进程从运行状态切换到等待状态 进程被终结了 可抢占系统中,中断请求被服务例程响应完成时发生调度,也分 ...

  2. 计算机操作系统处理机调度读后感—–关于进程概念的剖析。从RING3到RING0(32位操作系统)

    计算机操作系统处理机调度读后感: 笔者在看操作系统西安电子科技大学那本书的时候,初次感觉本科教的不会太难,所以没有认真的看,但是随后这本书讲的刷新了我的世界观.这本书居然是ring0级别的,这时不禁吐 ...

  3. Python中利用LSTM模型进行时间序列预测分析

    时间序列模型 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征.这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺 ...

  4. skynet源码阅读<5>--协程调度模型

    注:为方便理解,本文贴出的代码部分经过了缩减或展开,与实际skynet代码可能会有所出入.    作为一个skynet actor,在启动脚本被加载的过程中,总是要调用skynet.start和sky ...

  5. Spark源码分析之二:Job的调度模型与运行反馈

    在<Spark源码分析之Job提交运行总流程概述>一文中,我们提到了,Job提交与运行的第一阶段Stage划分与提交,可以分为三个阶段: 1.Job的调度模型与运行反馈: 2.Stage划 ...

  6. Java NIO学习系列六:Java中的IO模型

    前文中我们总结了linux系统中的5中IO模型,并且着重介绍了其中的4种IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路复用(IO multi ...

  7. [golang]Golang实现高并发的调度模型---MPG模式

    Golang实现高并发的调度模型---MPG模式 传统的并发形式:多线程共享内存,这也是Java.C#或者C++等语言中的多线程开发的常规方法,其实golang语言也支持这种传统模式,另外一种是Go语 ...

  8. 图解协程调度模型-GMP模型

    现在无论是客户端.服务端或web开发都会涉及到多线程的概念.那么大家也知道,线程是操作系统能够进行运算调度的最小单位,同一个进程中的多个线程都共享这个进程的全部系统资源. 线程 三个基本概念 内核线程 ...

  9. 重新梳理调度器——GMP 调度模型

    调度器--GMP 调度模型 Goroutine 调度器,它是负责在工作线程上分发准备运行的 goroutines. 首先在讲 GMP 调度模型之前,我们先了解为什么会有这个模型,之前的调度模型是什么样 ...

随机推荐

  1. Django-Form 补充

    一.Form的前端循环 class LoginForm(Form): name = ... pwd = ... def func(request): form = LoginForm() return ...

  2. rtp/rtsp over http的学习

    要做rtp/rtsp over http, 我对http也有点了解, 以前也做过rtp/rtsp over tcp/udp传输264视频流, 但刚开始还是没有一点思路,想着把http和rtp等联系到一 ...

  3. 微信网页版的onclick事件不起作用

    我的错误是在跳转的url中拼接了url,如下: var myBaseUrl="https://xxx/"; function do() { $.ajax({ url :myBase ...

  4. LAMP安装细则

    利用xshell从Windows向Linux传输文件[root@nanainux ~]#yum install lrzsz[root@nanalinux ~]#rz  MySq二进制包安装 mysql ...

  5. python 垃圾回收详解

    原文:https://zhuanlan.zhihu.com/p/31150408 总纲 策略和垃圾回收系统工作内容 引用计数详解 标记-清除+分代收集 循环引用 编程应用-常见方法 ex 过程详解 使 ...

  6. [libGDX游戏开发教程]使用Libgdx进行游戏开发(5)-关卡加载

    在上一章我们介绍了如何管理和利用素材,但是我们注意到,这些素材都是零散的,比如岩石的左部等,这一章,我们将利用这些零件拼合成完整的游戏对象. 回顾最开始的设计类图,注意Level类和所有Level中的 ...

  7. 如何在GPT分区上安装WIN7

    大硬盘和WIN8系统,让我们从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的主流电脑,都是预装WIN8系统,为了更好的支持2TB硬盘,更快速的启动win8,预装系统都采取了GPT分区 ...

  8. 第八届省赛 B:Quadrat (打表找规律)

    Description It is well-known that for any n there are exactly four n-digit numbers (including ones w ...

  9. centos6.5 phpmyadmin 您应升级到 MySQL 5.5.0 或更高版本

    看到自己当初写的,并没有直接的解决问题,而是退而求其次,安装低版本的mysql5.1,然后安装对应版本的phpmyadmin 4.0.10.5 UnicodeDecodeError: 'ascii' ...

  10. Python的异步编程[0] -> 协程[0] -> 协程和 async / await

    协程 / Coroutine 目录 生产者消费者模型 从生成器到异步协程– async/await 协程是在一个线程执行过程中可以在一个子程序的预定或者随机位置中断,然后转而执行别的子程序,在适当的时 ...