多处理器调度

多处理器系统分类:

1.松耦合、分布式多处理器(集群):一系列相对自治的系统组成,每个处理器有属于自己的内存和I/O通道。

2.专用处理器:有一个通用的主处理器,专用处理器由主处理器控制并为它提供服务。

3.紧耦合多处理器:一系列共享同一内存并受 OS 完全控制的处理器组成。

粒度:

1.无约束并行性(independent parallelism):进程间没有显式的同步,每个进程都表示独立的应用或者作业。(为啥不是翻译为“独立”?= =)

2.粗粒度(coarse)和极粗粒度(very coarse)并行性:进程之间存在同步。

3.中粒度(medium-grain)并行性:应用程序按照进程中的一组线程实现,这组线程之间的合作和交互性更高。

4.细粒度(fine-grain)并行性:与线程并行相比,更复杂。具体是啥玩意,不知道。反正这个领域目前研究不成体系。(译者翻译的意思)

当所有处理器访问内存和I/O设备时从物理上来说是公平的情况下,最简单的调度策略是把所有处理器看作一个资源池。

静态分配:一个进程从创建到运行完成,完全由一个特定的处理器进行执行。

优点:调度开销较小。

缺点:一个处理器可能空闲,而其他处理器可能忙碌且相关队列积压很多的就绪进程等待执行。

主从式:OS 的核心功能在某个特定的处理器上运行,其他处理器可能仅执行用户程序。

缺点:主处理器失败导致整个系统失败;主处理器可能成为系统瓶颈。

对等式:OS 能在任何一个处理器上执行。

缺点:OS 的复杂性增加。

在多处理器系统中运行中粒度的应用程序时,要求每个处理器的利用率提高不是很重要,应用的平均性能的提高更重要。

在处理器系统中,相对简单的进程调度算法可能更有效,开销也较低。调度算法的选择不那么重要,使用FCFS或在静态优先级中使用FCFS即可。

一个应用程序的各个线程同时在各个独立的处理器中执行时,其性能会显著提升。

负载分配:系统维护一个全局就绪线程队列,处理器空闲时就从队列中选择一个线程执行。

优点:

1.当有工作可做时,没有处理器处于空闲状态。

2.不需要集中调度程序。

3.可以执行任意的调度算法。

缺点:

1.中心队列(central queue,具体什么玩意?是就绪线程队列吗?)占据了必须互斥访问的存储器区域。

2.被抢占的线程可能不在同一个处理器上恢复执行。

3.若所有线程被视为一个公共线程池,那么一个程序中的所有线程不可能同时访问处理器。

三种负载分配的调度算法

1.FCFS

2.最少线程数优先:一个作业包含的未调度线程的数量最少时,给它指定最高的优先级。该策略为非抢占式。

3.可抢占的最少线程数优先:和上述第2个算法一样,不过是可抢占式。

三种策略,FCFS效果最好。

组调度(gang scheduling):同时调度组成一个进程的一组线程。

优点:进程切换的开销最小;节省资源分配时间。

专用处理器分配:一种极端的组调度。一个应用程序被调度时,它的每个线程被分配给一个处理器,直到进程执行完成。

使用该方法原因:

1.多处理器中,单个处理器只占系统资源的一小部分,单个处理器的利用率不再是重要因素。

2.一个进程的生命周期中,避免进程切换可以加快执行速度。

对于专用处理器分配,为了提高性嫩,限制活跃线程的数量,使其不超过系统中处理器的数量。

多处理器系统中的处理器分配问题类似单处理器系统中的存储器分配问题。

动态调度:进程执行过程中可以动态改变该进程中线程的数量。

对于适用动态调度的应用程序,动态调度优于组调度和专用处理器分配。

缓存共享需要考虑因素:合作资源共享(多个线程访问相同内存区域)和资源抢占(独占内存区域)。

实时调度

实时计算:系统的正确性不仅取决于计算的逻辑结果,而且取决于产生结果的时间。

实时 OS 的需求:

1.可确定性:可以按照固定的、预先确定的时间或者时间间隔执行操作。

2.可响应性:获知中断后,OS 为中断提供服务的时间。

具体包括:最初处理中断并开始执行中断服务例程(ISR)所需的时间总量;执行ISR所需的时间总量;中断嵌套的影响。

3.用户控制:允许用户细粒度地控制任务的优先级。

4.可靠性。

5.故障弱化操作(fail-soft operating):系统在故障时尽可能多地保存其性能和数据的能力。

实时 OS 常见功能:

1.使用优先级更严格。

2.中断延迟相对较短。

3.时许特征更精确、更可预测。

实时调度算法:

1.静态表调度法:分析任务的到达时间、执行时间、优先级等信息确定任务何时执行。适用周期性任务。

2.静态优先级抢占调度法:基于优先级的抢占式调度。

3.基于动态规划的调度法:一个任务已到达但未执行时,尝试创建一个包含前面被调度的任务和新达到的任务的调度。

4.动态尽力调度法:一个任务到达时,系统根据任务特性指定一个优先级。优点是易于实现。

调度需要的信息:

1.就绪时间:任务开始准备执行时的时间。

2.启动最后期限:任务必须开始的时间。

3.完成最后期限:任务必须完成的时间。

4.处理时间:从执行任务到完成任务所需的时间。

5.资源需求:任务在执行过程中需要的除处理器之外的资源。

6.优先级:度量任务的相对重要性。

7.子任务结构:一个任务可分解为一个必须执行的子任务和一个可选执行的子任务。

速率单调调度(rate monotonic scheduling, RMS):任务的周期越短,其优先级越高。

优先级反转(priority inversion):系统环境迫使一个较高优先级的任务等待一个较低优先级的任务。

解决方法:

优先级继承:优先级较低的任务继承任何一个与其共享同一资源的优先级较高任务的优先级。

优先级置顶:优先级与每个资源相关联,资源的优先级被设定为比使用该资源的具有最高优先级的任务的优先级高一级。

OSIDP-多处理器和实时调度-10的更多相关文章

  1. Linux进程管理 (9)实时调度类分析,以及FIFO和RR对比实验

    关键词:rt_sched_class.SCHED_FIFO.SCHED_RR.sched_setscheduler().sched_setaffinity().RR_TIMESLICE. 本文主要关注 ...

  2. Linux进程管理 (7)实时调度

    关键词:RT.preempt_count.RT patch. 除了CFS调度器之外,还包括重要的实时调度器,有两种RR和FIFO调度策略.本章只是一个简单的介绍. 更详细的介绍参考<Linux进 ...

  3. 在Android中使用实时调度(real-time)

    Linux的线程调度策略中有FIFO和RT的实时调度方法,但是在Android中做了限制,普通用户不能修改线程的调度算法为FIFO和RT,必须ROOT用户才能更改.但问题是程序是以普通用户启动和运行的 ...

  4. 【原创】(六)Linux进程调度-实时调度器

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  5. 机械师实时调度示例(I) - 实时规划

    OptaPlanner创办人Geoffrey De Smet及其团队,在Red Hat 技术峰会上主题会场上,演示了一个通过OptaPlanner实现实时规划与调度的示例.Geoffrey及其团队专门 ...

  6. Python之实时调度任务

    过了年就开始面临毕业了,毕业季是幸福的,但也是紧迫的.2月已过就开始着手策划毕业论文了,一直到现在,论文基本完成了,感觉过去的一个半月的时间,对自己过去2年在实验室所学又温习了一遍.书到用时方恨少,在 ...

  7. Springmvc中配置Quartz使用,实现任务实时调度。

    菜鸡的自我修炼,第一次接触quartz,做个记录.-------jstarseven 最近在项目中,第一次在springmvc中配置实用quartz,深刻的感受到quartz带来的方便,顺手做个记录. ...

  8. 操作系统概念学习笔记三 cpu调度算法

    一 基本概念 1 队列中的记录通常是进程的进程控制块. 2 CPU调度决策可在如下四种环境下发生 a 当一个进程从运行状态切换到等待状态 例如,I/O请求或调用wait以等待一个子进程的终止 b 党一 ...

  9. OS之进程管理---实时CPU调度

    引言 一般来说,我们将实时操作系统区分为软实时系统(soft real-time system)和硬实时系统(hard real-time system).软实时系统不保证会调度关键实时进程,而只保证 ...

  10. OS之进程管理---多处理器调度

    引言 之前我们所学习的操作系统进程调度策略的前提条件是单处理器系统下的CPU调度程序.如果系统中存在多个CPU,那么负载分配就成为可能,但是相应的调度问题就会更加复杂. 多处理器调度方法 对于多处理器 ...

随机推荐

  1. 攻防世界-fileinclude

    一道简单的文件包含题目,源代码如下 一.代码分析 此题中关键代码为 分析此处代码可知,$lan的值是cookie中language所对应的值,当该值不为english时,会将$lan的值与.php字符 ...

  2. 第15周作业--JDBC连接数据库

    编写一个应用程序,输入用户名和密码,访问test数据库中t_login表(字段包括id.username.password),验证登录是否成功.当登录成功后,将t_user表(id.name.sex. ...

  3. Fortran处理无符号整型unsigned integer

    背景: 计算机是以一串二进制数,用约定的表示方式来存储数据的.约定表示方式的不同,造成了可以表示数的范围不同.其中,对于整数类型数据的表示,有unsigned integer(无符号整型)和signe ...

  4. 浅谈JS输出中的“+”作用问题

    背景(问题) web前端考试有这么一道题目(为了阅读方便和应文章的景,小编将题目进行了微调) <input type="number" value="1" ...

  5. httpclint的传值和访问https

    一.StringContent与FormUrlEncodedContent 可参考这篇文章写的非常好: https://blog.csdn.net/lxrj2008/article/details/7 ...

  6. go组合

    package main import "fmt" func main() { aa := []string{"a", "b", " ...

  7. windows中的换行符和Linux中的换行符

    # cat -A tmp.tmp 120.4987 12.717858^M$ ^M 对应的字符是 \r # cat tmp.txt | awk -vRS='\r\n' '{print $2,$1}' ...

  8. AspectRatio、Card 卡片组件

    一.Flutter AspectRatio 组件 AspectRatio 的作用是根据设置调整子元素 child 的宽高比. AspectRatio 首先会在布局限制条件允许的范围内尽可能的扩展,wi ...

  9. gauva cache

    guava 的cache比较好用.    用户使用的对象是LoadingCache, 通过CacheBuilder来创建,通过 CacheLoader来根据key加载数据.而且可以定时刷新缓存(有访问 ...

  10. JDBC之Statement

    Statement 目录 Statement Statement Statement概述 要执行的SQL分为两类 查询 增删改 Statement继承体系 SQL注入问题 SQL注入问题解决 获取得到 ...