处理机调度的详细介绍

发布时间 - 2017-07-18 00:00:00    点击率:

处理机的调度

标签(空格分隔): 进程调度 调度算法 操作系统


基本概念

定义
: 操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源, 我们称之为调度。

其目的是控制资源使用者的数量,选取资源使用者许可占用资源或占用资源。处理机调度的三个层次:

  • 高级调度:作业调度, 调度对象为作业.

  • 中级调度:内存调度(实质是存储器的对换功能)

  • 低级调度:进程调度, 调度对象为进程或内核级线程

作业调度的算法也适用于进程调度

服务时间\(T_s\): 系统为作业或进程提供服务的时间
周转时间\(T_i\): 作业或进程被提交给系统到作业或进程完成为止的时间间隔.
通常包括:

作业在外存后备队列上等待调度的时间.
进程在就绪队列上等待进程调度的时间.
进程在cpu上执行的时间.
进程等待I/O操作完成的时间.

平均周转时间:
\[T = \frac{\sum_{i=1}^n T_i}{n}\]
带权周转时间: 作业的周转时间与为它提供服务的时间之比
\[W_i = \frac{T_i}{T_s}\]
平均带权周转时间:
\[W = \frac{\sum_{i=1}^n \frac{T_i}{T_s}}{n}\]

调度时机、切换与过程

进程调度和切换程序是操作系统内核程序。当请求调度的事件发生后,才可能会运行进程调度程序,当调度了新的就绪进程后,才会去进行进程间的切换。理论上这三件事情应该顺序执行,但在实际设计中,在操作系统内核程序运行时,如果某时发生了引起进程调度的因素,并不一定能够马上进行调度与切换。

现代操作系统中,不能进行进程的调度与切换的情况有以下几种情况:

  1. 在处理中断的过程中:中断处理过程复杂,在实现上很难做到进程切换,而且中断处理是系统工作的一部分,逻辑上不属于某一进程,不应被剥夺处理机资源。

  2. 进程在操作系统内核程序临界区中:进入临界区后,需要独占式地访问共享数据,理论上必须加锁,以防止其他并行程序进入,在解锁前不应切换到其他进程运行,以加快该共享数据的释放。

  3. 其他需要完全屏蔽中断的原子操作过程中:如加锁、解锁、中断现场保护、恢复等原子操作。在原子过程中,连中断都要屏蔽,更不应该进行进程调度与切换。

如果在上述过程中发生了引起调度的条件,并不能马上进行调度和切换,应置系统的请求调度标志,直到上述过程结束后才进行相应的调度与切换。

应该进行进程调度与切换的情况有:

  1. 当发生引起调度条件,且当前进程无法继续运行下去时,可以马上进行调度与切换。如果操作系统只在这种情况下进行进程调度,就是非剥夺调度。

  2. 当中断处理结束或自陷处理结束后,返回被中断进程的用户态程序执行现场前,若置上请求调度标志,即可马上进行进程调度与切换。如果操作系统支持这种情况下的运行调度程序,就实现了剥夺方式的调度。

进程切换往往在调度完成后立刻发生,它要求保存原进程当前切换点的现场信息,恢复被调度进程的现场信息。现场切换时,操作系统内核将原进程的现场信息推入到当前进程的内核堆栈来保存它们,并更新堆栈指针。内核完成从新进程的内核栈中装入新进程的现场信息、更新当前运行进程空间指针、重设PC寄存器等相关工作之后,开始运行新的进程。

调度的方式

  • 非抢占方式
    一旦处理机分配给某进程后, 就一直让它运行下去, 决不会因为时钟中断或任何其他原因取抢占当前正在运行进程的处理机, 直至该进程完成, 或发生某事件而被阻塞时, 才把处理机分配给其他进程.

  • 抢占方式
    系统允许调度程序根据某种原则, 取暂停某个正在执行的进程, 将已分配个该进程的处理机重新分配给另一进程.
    "抢占"时应遵循一定的原则:

    • 优先权原则

    • 短进程优先原则

    • 时间片原则

典型的调度算法

先来先服务调度算法(first-come first-served):

即FCFS调度算法, 既可用于作业调度, 也可用于进程调度. 系统按照作业到达的先后次序(优先考虑在就绪队列中等待时间最长的作业)进行调度.
缺点:未考虑作业的紧迫程度, 只能顺序运行

短作业(进程)优先的调度算法(short job first):

为短作业而设立, 因为操作系统中大多为短作业.系统在作业运行时, 选出运行时间最短的作业将其调入内存.

  1. SJF(不可抢占):算法以作业的长短(作业需要运行的时间)来计算优先级, 作业越短, 其优先级越高.

  2. SPF(可抢占):同上, 但是当有作业优先级较高时, 便可以抢占资源优先执行.

缺点:

  • 必须预知作业的运行时间

  • 对作业程不利

  • 无法实现人机交互

  • 没有考虑到作业的紧迫程度

优先级调度算法(priority-scheduling algorithm):

PSA算法基于作业的紧迫程度, 由外部赋予作业相应的优先级, 根据作业优先级进行调度.

高响应闭优先调度算法(highest request ratio next):

HRRN算法即考虑了作业的等待时间, 又考虑了作业运行时间. 为没有作业引入一个动态优先级:

优先权 = (等待时间+要求服务时间) / 要求服务时间

可缩写为:

R = 响应时间 / 要求服务时间

特点:

  1. 作业等待时间相同, 则要求服务时间越短, 优先权越高越, 类似于SJF算法, 有利于短作业

  2. 作业要求服务时间相同时, 则作业等待时间约长, 优先权越高, 类似于FCFS算法, 有利于长作业

  3. 对于长作业(要求服务时间长), 随着等待的时间足够长, 也可获得较高的优先级. 不会一直等下去.

时间片轮转调度算法(RR)

原理: 系统根据FCFS策略将所有的就绪进程排成一个就绪队列, 并设置每隔一段时间产生依次中断, 激活系统中的进程调度程序, 完成依次调度, 将cpu分配给新的队首进程(或新到达的紧迫进程).

进程切换

  1. 若一个时间片尚未用完, 正在运行的进程便已完成, 则立即激活调度程序, 将其从执行队列中删除, 在调度就绪队列的队首进程运行, 并启动一个新的时间片.

  2. 在一个时间片用完时, 计时中断处理程序被激活, 如果进程尚未运行完毕, 则调度程序将它送往就绪队列末尾, 并调度就绪队列的队首进程运行, 并启动新时间片.

注意:时间片选取过小, 则将频繁的执行进程调度和进程长下文切换, 增加系统开销; 时间片选取过长, 则RR算法退化为FCFS算法, 无法满足短作业和交互式用户需求. 时间片应选取略大于依次典型的交互所需要的时间, 是大多数进程在一个时间片内完成.

多级反馈队列调度算法(multileved feedback queue):

  1. 设置多个就绪队列, 并为每个队列赋予不同的优先级, 优先级越高的队列其时间片越小.优先级最高的队列最先进入待调度的队列

  2. 队列之间采用FCFS调度算法.只有高优先级队列中的全部进程完成时才调度下一队列

  3. 队列内的进程按照轮转算法调度.新进程进入内存后首先进入优先级最高的队列

  4. 在低优先级队列运行时, 若有新进程到达, 那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)。

实时系统中的进程调度算法

实时系统是指系统能及时响应外部事件的请求并及时处理这些请求.基于这一特性, 实时系统在工业(武器)控制, 多媒体等系统中常见.
实时系统中通分为存在一个截止时间, 硬实时任务(HRT)要求在开始截止时间前必须执行, 在结束截止时间前必须结束. 软实时任务同上, 但并不严格.
在实时系统中有两类算法值得注意:最早截止时间优先算法(Earliest Deadline First)和最低松弛度优先算法(Least Laxity First).两类算法都可用抢占式和非抢占式调度, 但后者常用于抢占式调度.
在m个周期性的实时调度中, 每个实时任务的处理时间\(C_i\), 周期时间\(P_i\), 在但处理机的情况下, 需满足条件:$\sum_{i=1}^m\frac{C_i}{P_i} \(小于1; 多处理机条件下, 须满足条件\)\sum_{i=1}^m\frac{C_i}{P_i} $小于N, N为处理机数量.

最早截止时间优先算法(EDF)

该算法在实时系统中根据任务的截止时间确定其优先级.

  1. 非抢占式

  2. 抢占式

最低松弛度优先算法(LLF)

在该法中根据任务的紧急程度(松弛程度)赋予其优先级, 越紧急的任务优先级越高.

任务的松弛程度 = 必须完成时间 - 其本身运行时间 - 当前时间

系统的任务按照松弛度排成一个就绪队列, 松弛度低的任务排在队列前面, 即调度程序优先执行.


# 操作系统  # 截止时间  # 越高  # 多个  # 过程中  # 较高  # 将其  # 也可  # 不应  # 理论上 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在景安服务器上快速搭建个人网站?  北京的网站制作公司有哪些,哪个视频网站最好?  如何用IIS7快速搭建并优化网站站点?  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Linux系统运维自动化项目教程_Ansible批量管理实战  千库网官网入口推荐 千库网设计创意平台入口  Laravel如何实现用户密码重置功能?(完整流程代码)  如何用AWS免费套餐快速搭建高效网站?  微信小程序 input输入框控件详解及实例(多种示例)  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  浅析上传头像示例及其注意事项  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Python面向对象测试方法_mock解析【教程】  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  如何在阿里云部署织梦网站?  JS中对数组元素进行增删改移的方法总结  香港服务器租用每月最低只需15元?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  长沙做网站要多少钱,长沙国安网络怎么样?  微信公众帐号开发教程之图文消息全攻略  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  微信小程序 require机制详解及实例代码  黑客如何通过漏洞一步步攻陷网站服务器?  简单实现Android验证码  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  Python正则表达式进阶教程_复杂匹配与分组替换解析  Python制作简易注册登录系统  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  🚀拖拽式CMS建站能否实现高效与个性化并存?  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  Laravel如何创建自定义中间件?(Middleware代码示例)  如何在 React 中条件性地遍历数组并渲染元素  Android GridView 滑动条设置一直显示状态(推荐)  微信小程序 wx.uploadFile无法上传解决办法  Python数据仓库与ETL构建实战_Airflow调度流程详解  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  html5的keygen标签为什么废弃_替代方案说明【解答】  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel PHP版本要求一览_Laravel各版本环境要求对照  如何用y主机助手快速搭建网站?  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  南京网站制作费用,南京远驱官方网站?