高级分布式系统-第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.mzph.cn/news/621374.shtml

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

相关文章

vue2配置教程

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

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; ......当我们在对这些基…

js检测网址是否可访问,javascript检测网址是否可访问,支持跨域;

js检测网址是否可访问&#xff0c;javascript检测网址是否可访问&#xff0c;支持跨域&#xff1b; <!DOCTYPE html> <html> <head><meta name"viewport" content"widthdevice-width" /><title>url检测是否可访问</tit…

从生活入手学编程(1):Edge浏览器设置自动刷新专业教程

一、前言 我们都知道&#xff0c;Edge浏览器运行时的速度卡的实在是感人…… 于是今天&#xff0c;我就突发奇想&#xff0c;来看一看怎么刷新并且还能保留页面内容。 二、探索 首先&#xff0c;我在此提醒您&#xff0c;在使用这种方法时要非常小心。因为更改网页源代…

MySQL——深入数据库原理(事务及锁)

文章目录 锁行级锁共享 (S) 锁排他 (X) 锁间隙锁 表级锁意向锁自增锁Lock Table/DDL 事务ACID 原则1. 原子性 A2. 一致性 C3. 隔离性 I4. 持久性 D 隔离级别1. READ UNCOMMITTED&#xff08;未提交读&#xff09;2. READ COMMITTED&#xff08;提交读&#xff09;3. REPEATABLE…

webpack魔法注释-预获取/预加载模块

Webpack v4.6.0 增加了对预获取&#xff08;prefetch&#xff09;和预加载&#xff08;preload&#xff09;的支持。 在声明 import 时&#xff0c;使用下面这些内置指令&#xff0c;可以让 webpack 输出“resource hint”&#xff0c;来告知浏览器&#xff1a; prefetch&…

【JavaWeb】Web程序设计期末复习总结

试题 一. 单选题&#xff08;共24题&#xff0c;24分&#xff09; 二. 多选题&#xff08;共16题&#xff0c;32分&#xff09; 三. 填空题&#xff08;共20题&#xff0c;10分&#xff09; 四. 判断题&#xff08;共30题&#xff0c;15分&#xff09; 五. 论述题&#xf…

基于TOGAF和WAF的企业级架构

TOGAF是技术无关的企业级架构框架&#xff0c;WAF则侧重于云的最佳实践和指导方针&#xff0c;本文介绍了两者的异同。原文: Enterprise Architecture with TOGAF and Well-Architected Frameworks (AWS, Azure and Google) 简介 本文旨在解释TOGAF和云架构框架/良好架构框架(W…

IaC基础设施即代码:使用Terraform 连接 alicloud阿里云

目录 一、实验 1.环境 2.alicloud阿里云创建用户 3.Linux使用Terraform 连接 alicloud 4.Windows使用Terraform 连接 alicloud 二、问题 1.Windows如何申明RAM 相关变量 2.Linux如何申明RAM 相关变量 3. Linux terraform 初始化失败 4.Linux terraform 计划与预览失败…

【LeetCode: 57. 插入区间+分类讨论+模拟】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

blender 导入到 Marvelous Designer

1&#xff09; 将模型的所有部分合并为一个单独的mesh 2&#xff09; 先调整计量单位&#xff1a; 3&#xff09;等比缩放&#xff0c;身高调整到180cm左右 4&#xff09;应用当前scale 首先&#xff0c;选中你要修改的物体&#xff0c;然后按下Ctrl-A键&#xff0c;打开应用…

CSAPP - bomblab 作弊方式2: gdb jump 命令, 以及修改 jne 为 nop 指令

CSAPP - bomblab 作弊方式2&#xff1a; gdb jump 命令&#xff0c; 以及修改 jne 为 nop 指令 厌倦了在 gdb 中一步步顺序执行 bomb 可执行程序。为什么不能自行控制程序的执行呢&#xff1f;跳到特定的函数去执行&#xff0c;又或者把原本要执行的指令改掉&#xff0c;gdb 里…

linux环境下安装postgresql

PostgreSQL: Linux downloads (Red Hat family)postgresql官网 PostgreSQL: Linux downloads (Red Hat family) 环境&#xff1a; centos7 postgresql14 选择版本 执行启动命令 配置远程连接文件 vi /var/lib/pqsql/14/data/postgresql.conf 这里将listen_addresses值由lo…

【位运算】【二分查找】【C++算法】100160价值和小于等于 K 的最大数字

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 二分查找算法合集 位运算 LeetCode100160. 价值和小于等于 K 的最大数字 给你一个整数 k 和一个整数 x 。 令 s 为整数 num 的下标从1 开始的二进制表示。我们说一个整数 num 的 价值 是满足 i % x 0 且…

阿里云ingress配置时间超时的参数

一、背景 在使用阿里云k8s集群的时候&#xff0c;内网API网关&#xff0c;刚开始是用的是Nginx&#xff0c;后面又搭建了ingress。 区别于nginx配置&#xff0c;ingress又该怎么设置参数呢&#xff1f;比如http超时时间等等。 本文会先梳理nginx是如何配置&#xff0c;再对比…

优雅的删除链表元

王有志&#xff0c;一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群&#xff1a;共同富裕的Java人 在数据结构&#xff1a;链表中&#xff0c;我们实现了链表的删除方法&#xff0c;但代码看起来并不“优雅”&#xff0c;那么今天我们就来尝试使用多种方法&#xff0c…

windows安装conda环境,开发openai应用准备,运行第一个ai程序

文章目录 前言一、windows创建openai开发环境二、国内代理方式访问openai的方法&#xff08;简单方法&#xff09;三、测试运行第一个openai程序总结 前言 作者开发第一个openai应用的环境准备、第一个openai程序调用成功&#xff0c;做个记录&#xff0c;希望帮助新来的你。 …

31 树的存储结构一

无法直接用数组表示树的逻辑结构&#xff0c;但是可以设计结构体数组对节点间的关系进行描述&#xff1a;【如表】 这样做的问题&#xff1a; 可以利用 组织链表 parent指针&#xff1a; 注意&#xff1a;树结点在 组织链表 中的位置不代表树的任何逻辑关系 树的架构图&#xf…

从0开始学Git指令(3)

从0开始学Git指令 因为网上的git文章优劣难评&#xff0c;大部分没有实操展示&#xff0c;所以打算自己从头整理一份完整的git实战教程&#xff0c;希望对大家能够起到帮助&#xff01; 远程仓库 Git是分布式版本控制系统&#xff0c;同一个Git仓库&#xff0c;可以分布到不…

java客户端连接redis并设置序列化处理

1、导入依赖 <!--继承父依赖--> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup paren…