高级分布式系统-第9讲 实时调度--静态调度与动态调度

静态调度

在静态调度中,任务组的调度表是通过离线计算得出的。在调度表的生成过程中,必须把所有任务的资源、优先级和同步要求考虑进去,并且确保所有的截止时间要求。这个调度表指明了各个任务的运行起始时间 ,一旦生成就不再变化。在系统运行期间 ,任务调度器只需要根据这张表在指定的时刻启动相应的任务 。

静态调度表是一个周期性的、时间触发的进度表。时间轴被分成一系列基本粒度,每个基本粒度被认为是一个基本循环时间(basic cycle time) 。

采用静态调度的系统只有一种中断 :周期性时钟中断。每个时钟中断都是一个基本粒度的起点。在分布式系统中 ,这种时钟中断必须是全局同步的,同步精度要明显高于基本粒度的持续时间。

在不同节点中运行的任务 ,它们之间的相互制约关系可用优先顺序图,利用优先顺序图很容易得到搜索树 。

动态调度

在动态调度中,大部分或全部调度决策是在系统运行时由任务调度器执行某种调度算法来决定的。也就是说,由动态调度算法在线确定“就绪”任务组中下一个必须服务的任务 。

独立任务的调度:

在利用单一CPU的系统里 ,对一组周期性的、相互独立的强实时任务进行调度的最佳算法是单调速率(Rate Monotonic, RM ) 算法、最早截止时间优先(Earliest Deadline First,EDF ) 算法和最小疏密度( Least

Laxity , LL ) 算法。

信号量:

用来协调不同进程间的数据对象,最主要的应用是共享内存方式的进程间通信。本质上,信号量是一个计数器(非负整数),用于记录对某个资源(如共享内存)的存取状况。一般说来,为了获得共享资源,进程需要执行下列操作:

(1)测试控制该资源的信号量。

(2)若此信号量的值为正,则允许进行使用该资源。进程将信号量减1。

(3)若此信号量为0,则该资源目前不可用,进程进入睡眠状态,直至信号量值大于0,进程被唤醒,转入步骤(1)。

(4)当进程不再使用一个信号量控制的资源时,信号量值加1。如果此时有进程正在睡眠等待此信号量,则唤醒此进程。

互斥量:

控制某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。通常是0/1两个状态。

一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量时,也可以完成一个资源的互斥访问。

非独立任务的调度:设任务组是由周期性任务形成的,每个任务都拥有共享资源的独占访问权,共享资源(如共享数据结构)是通过信号量(semaphore)进行保护的 ,可以用来实现任务间(inter-task)通信。当使用信号量来协调任务对共享资源的访问时 ,可能遇到两个同步问题 :死锁和优先级倒置 。

死锁问题

(1)优先级较高的任务T2正在运行 ,而任务T1处于就绪状态 。为了访问由信号量S1保护的共享资源(独占访问),T2锁定了S1。

(2)任务T2为了等待事件E的发生,自行转入等待状态。

(3)任务T1得以运行,并在运行中锁定了信号量S2(保护另外一些共享资源)。

(4)事件E发生了,由于T2的优先级高于T1, T2抢占T1,再次开始运行。

(5)假如T2 想要锁定信号量S2必然失败 ,因为S2已经被T1锁定。

(6)T2又进入了等待状态(直到S2 变成可锁定的),任务T1恢复运行。

(7)任务T1试图锁定信号量S1,但失败了 ,因为S1己经被T2锁定。

(8)T1 也进入等待状态(直到S1变成可锁定的)

优先级倒置问题

(1)在T2、T3和T4挂起期间,T1正在运行,并且锁定了信号量S(保护共享资源)。

(2)T2、T3和T4被激活,进入就绪状态,准备运行。

(3)由于T4的优先级最高 ,所以T4抢占T1获得运行权,其他任务进入就绪状态。

(4)T4在运行期间尝试锁定信号量S,由于S已经被T1锁定,T4的锁定操作失败 ,只能进入等待状态 。

(5)下一个高优先级任务T3开始运行,直至结束。然后T2运行至结束。之后T1又获得运行权 。

(6)T1在运行过程中释放了S,T4脱离等待状态 ,锁定信号量S并恢复运行。

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

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

相关文章

UE5 C++(十三)— 创建Character,添加增强输入

文章目录 创建Character第三人称模板添加增强输入引用在脚本中实现移动、旋转 创建Character第三人称模板 创建MyCharacter C类 添加增强输入引用 在DEMO.Build.cs 脚本中添加增强输入模块 有个容易出错的点,这里的设置一定要正确 然后添加引用到C头文件中 …

Python读取log文件报错“UnicodeDecodeError”

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 问题描述: 写了一个读取log文件的Python脚本: # -*- coding:utf-8 -*- import os import numpy as np …

Java基本数据类型boolean占用几个字节?

我们知道Java中的基本数据类型有以下几种 char占用2个字节 boolean占用1个字节或者4个字节(稍后解释) byte占用1个字节 short占用2个字节 int占用4个字节 long占用8个字节 float占用4个字节 double占用8个字节 char a a; boolean b false; int c 1; ......当我们在对这些基…

vue2配置教程

5.12.3 Vue Cli 文档地址: https://cli.vuejs.org/zh/ IDEA 打开项目,运行项目

虚拟机配置网络

1开启网络 右击打开属性配置ipv4 配置vm 配置系统 配置liunx网卡信息 vim /etc/sysconfig/network-scripts/ifcfg-ens33 打开电脑任务管理器

5、C语言:结构

结构 结构的基本知识结构与函数传递结构 结构数组、指向结构的指针自引用结构(二叉树)表查找类型定义(typedef)联合位字段 结构也是一种数据类型。类似于int、char、double、float等。 结构是一个或多个变量的集合,这些…

12.3在应用层使用SPI总线

在SPI总线驱动框架中提供了一个spidev 的字符设备驱动,在应用层可以通过它来访问SPI总线。 应用层访问SPI总线的步骤 编写spidev设备树节点,在SPI总线的设备树节点下添加spidev设备的树节点,设备树示例如下所示: spidev0: spid…

Wargames与bash知识17

Wargames与bash知识17 Bandit25(Bandit26) 关卡提示 从bandit25登录到bandit26应该相当容易…用户bandit26的shell不是/bin/bash,而是其他东西。找出它是什么,它是如何工作的,以及如何摆脱它。 推荐命令 ssh, cat, …

STM32——高级定时器输出比较模式实验

1高级定时器输出比较模式实验 1.1高级定时器输出比较模式实验原理 1.2高级定时器输出比较模式实验实验配置步骤 1,配置定时器基础工作参数 HAL_TIM_OC_Init() 2,定时器PWM输出MSP初始化 HAL_TIM_OC_MspInit() 配置NVIC、CLOCK、GPIO等 3,配…

【面试突击】并发编程、线程池面试实战

🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

C++进阶--红黑树

红黑树 一、红黑树的概念二、红黑树的性质三、红黑树结点的定义四、红黑树的插入五、红黑树的验证七、红黑树的查找七、红黑树与AVL树的比较七、完整代码RBTree.h 一、红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色…

test-04-test case generate 测试用例生成 tcases 快速开始

拓展阅读 junit5 系列 基于 junit5 实现 junitperf 源码分析 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) 自动生成测试用例 入门指南 关于…

获取当前设备的IP

背景: 在本地使用自带webUI的项目时,需要制定webUI的访问地址。 一般本地访问使用:127.0.0.1,配置为可以从其他设备访问时,需要指定当前设备的IP,或者指定为0.0.0.0。 例如:使用locust的时候&a…

【蓝桥杯软件赛 零基础备赛20周】第7周——二叉树

文章目录 1 二叉树概念2 二叉树的存储和编码2.1 二叉树的存储方法2.2 二叉树存储的编码实现2.3 二叉树的极简存储方法 3 例题4 习题 前面介绍的数据结构数组、队列、栈,都是线性的,它们存储数据的方式是把相同类型的数据按顺序一个接一个串在一起。简单的…

腾讯云COS桶文件上传下载工具类

1&#xff0c;申请key和密钥 2&#xff0c;引入依赖 <dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>5.6.24</version></dependency>3&#xff0c;工具类 package com.example.activi…

【学习iOS高质量开发】——熟悉Objective-C

文章目录 一、Objective-C的起源1.OC和其它面向对象语言2.OC和C语言3.要点 二、在类的头文件中尽量少引用其他头文件1.OC的文件2.向前声明的好处3.如何正确引入头文件4.要点 三、多用字面量语法&#xff0c;少用与之等价的方法1.何为字面量语法2.字面数值3.字面量数组4.字面量字…

QT上位机开发(进度条操作)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 进度条是一个比较常见的控件。如果某个操作需要很长的时间才能完成&#xff0c;那么这个时候最好有一个进度条提示&#xff0c;这样比较容易平复一…

CPT203-Software Engineering 笔记

Week 1 -- Introduction failure reason professional software development*** maintain, security, efficiency, acceptability two kinds***: generic, customized software deterioration 软件退化 reduce changes/ side effects after changes software engineering …

前端重置密码报错记录

昨天晚上&#xff0c;我写了重置密码的前端&#xff0c;测试的时候报错 今天上午&#xff0c;我继续试图解决这个问题&#xff0c;我仔细检查了一遍&#xff0c;前端没有问题 可以正常接收输入的数据并且提交 但是后端接收到的数据为空&#xff0c;后端接口也没有问题 但后端收…

Java SE入门及基础(12)

do-while 循环 1. 语法 do { //循环操作 } while ( 循环条件 ); 2. 执行流程图 3. 案例 从控制台录入学生的成绩并计算总成绩&#xff0c;输入0 时退出 4. 代码实现 public static void main ( String [] args ) { Scanner sc new Scanner ( System . in )…