嵌入式系统与安全
1. General Intro
安全问题
七大安全问题
中断机制
实时调度系统RTS
硬件结构
2. 嵌入式系统的任务调度策略
任务状态模型
实时调度任务
参数Real-Time tasks – Typical parameters
Activation modes
Time driven: periodic tasks周期性任务,时间驱动
Task is automatically activated by the kernel at
regular intervals.
Event driven: aperiodic/ sporadic tasks非周期性任务,事件驱动
调度算法分类
Scheduling algorithm taxonomy
Preemptive vs. Non Preemptive抢占非抢占
Static vs. dynamic静态动态
静态调度决策是基于固定的参数(例如计算时间),在激活之前静态地分配给任务。
调度决策是基于可以随时间变化的参数(例如:到达时间,exe时间等)。
On line vs. Off line在线离线
离线:所有调度决策都是在任务激活之前做出的:调度存储在一个表中。
在线:调度决策是在运行时对已激活的任务集作出的
Best Effort vs. Optimal
BE:如果有的话,他们会尽力找到一个可行的时间表,但他们不能保证是否会产生一个最佳的时间表。
Opt:总是试图确定一个最优的时间表,如果有的话;
Classification of ERT Scheduling
Algorithms嵌入式实时调度系统分类
(a) Clock-driven - Scheduling points are determined by
the interrupts received from a clock
Clock-driven schedulers are off-line / static schedulers
because scheduling points are determined by clock
timer interrupts.
Clock Driven – simple and efficient; used frequently
in several embedded applications - limited memory
-- Table Driven schedulers
-- Cyclic schedulers
题目:
Exercise: Design a table-driven static scheduler for
the following periodic tasks. Note that a scheduler
always attempts to use a task that has less execution
time first, if it is available.
Given task set:
T1 = (4,1); T2 = (5,1.8); T3 = (20,1); T4 = (20,2); Clearly,
the phases of the tasks are zero;
Draw a schedule using a timing diagram. Determine the
table entries- show at least the top 8 entries using the
timing diagram drawn.
(b) Event-driven - Scheduling points are defined by
certain events which precludes clock interrupts
Event Driven
-- Simple Priority based schedulers
-- Rate Monotonic Algorithm (RMA) (Chapter 4)
-- Earliest Deadline First (EDF) (Chapter 4)
(c) Hybrid - Uses both clock interrupts and event
occurrences to define their scheduling points
Hybrid
-- Round-robin
Common scheduling algorithms
Not all are suited for real-time embedded systems
First Come First Served
Shortest Job First
Priority Scheduling
A priority-driven algorithm is greedy because it tries to
make locally optimal decisions. Leaving a resource idle
while some job is ready to use the resource is not
locally optimal. So when a processor or resource is
available and some job can use it to make progress,
such an algorithm never makes a job to wait.
多处理机系统中效果好
In a multi-processor system, the minimum makespan
(i.e., the response time of the job that completes last among all jobs)
achievable by an optimal preemptive algorithm is
shorter than the makespan achievable by an optimal
non-preemptive algorithm.
The above claim has been shown to be true only for
a 2 processor case in the literature.
Round Robin & its variant
Q: When is preemptive scheduling better than
non-preemptive scheduling and vice versa?
Q: Is there any rule with which we could
determine from the given parameters of the jobs
whether to schedule them preemptively or non-
preemptively?
if Q + context switch time (δ) then
Metrics for Performance Evaluation
Average Response Time;
Total Response Time;
Weighted sum of completion times;
Maximum lateness;
Maximum number of late tasks
3. 嵌入式系统的可靠性/错误容许
Chap 3 - State-dependent system- RT Issues [Markov models]
(#28-#38); Software fault tolerant techniques (#54-#66) Markov
model for Availability (#67-#71); Reliability maximization under
cost constraints-dynamic prog;
Failure Rate / Hazard Rate Function
Memoryless Property of CFR Model模型没记忆,从哪开始都一样
Failure Modes 冗余(2核心系统,每个核心满足CFR,两个核心同时失效系统才故障)
通常,组件可能会以多种不同的方式失效。每种失效机制称为一种失效模式。
通常情况下,每种故障模式都是独立于其他故障模式的。
每个故障模式都有自己的f(t)和R(t),以此类推。
•任何失效模式的发生都被认为足以导致组件失效(s/w大于h/w)。
整体部件故障率是各个独立失效模式的故障率之和。
错误的分布
Any known distributions like, exponential,
normal, log-normal can be assumed
depending on the application/component
failure historical data.
Generic distribution – Weibull Distribution
Generates most commonly known distributions
with respective parameter choices.
根据应用程序/组件故障历史数据,可以假设任何已知的分布,如指数分布、正态分布、对数正态分布。
通用分布-威布尔分布生成最常见的分布,并提供相应的参数选择。
RTS -可靠嵌入式系统配置的设计与分析
串行模块
Question 3.1 - Consider a system of 10 computing
components with a series reliability configuration. If
the reliability of each component is 0.99, what is the
overall reliability of the computing system ?
考虑一个由10个计算组件组成的系统,具有串联可靠性配置。如果每个组件的可靠性为0.99,计算系统的整体可靠性是多少?
在串联可靠性配置中,组件相当于系统的失效模式。(累加)
Question 3.2 - If a system with a series reliability configuration
contains three components with constant failure rates of
0.4, 0.5, and 0.6 failures/year respectively, determine the
overall MTTF of the system. Comment on the failure
rate of the overall system.
问题3.2—如果采用串联可靠性配置的系统包含三个部件,故障率分别为0.4、0.5和0.6次/年,确定系统的总体MTTF。对整个系统的故障率进行评论。
定理-如果一个系列的所有执行组件的可靠性配置。具有具有相同形状因子β的Weibull分布失效时间,则整个系统具有具有相同形状因子β的Weibull分布失效时间。
并行模块
系统的失效率等于每个组件失效率的乘积(显示出比串行的优势)
请注意,我们假设系统中某个组件的可靠性与其他组件的故障状态无关。
Question 3.3 - Consider a system of 4 components with
a parallel hardware configuration. If the reliability of
each component is 0.8, what is the reliability of this
overall parallel computing system ?
问题3.3 -考虑一个由4个组件组成的并行硬件配置系统。如果每个组件的可靠性为0.8,那么整个并行计算系统的可靠性是多少?
Question 3.4 - If a system with a parallel reliability configuration
contains three components with constant failure rates of 0.4, 0.5, and 0.6 failures/months, respectively, determine the MTTF and failure rate of the overall system. Comment on the failure rate of the entire system.
问题3.4如果一个并联可靠性配置的系统包含三个组件,故障率分别为0.4、0.5和0.6次/月,确定整个系统的MTTF和故障率。对整个系统的故障率进行评论。
Question 3.5 – Consider a complex computing system with the following hardware configuration. Compute the overall system reliability.
考虑一个具有以下硬件配置的复杂计算系统。计算系统整体可靠性。
冗余
两个级别的冗余可以用于提高系统可靠性——高级别冗余和低级别冗余。
Two levels at which redundancy can be applied to improve
system reliability - high-level & low-level redundancy.
High Level Redundancy: In this case, identical components
(with assumed series reliability configuration) are configured
to form a parallel redundant system. 将串行的一组基础部件作为整体冗余
Low Level Redundancy: In this case, parallel redundancy
is applied at the component level.将最基础的部件作为冗余
负载共享系统和备用系统
负载共享系统:在这种情况下,负载(应力)通常在并行冗余配置中的运行组件之间平均共享。
如果一个组件发生故障,则其负载份额将在剩余的操作组件(例如:SoC/NoC)中重新分配,因此剩余操作组件的压力将增加,从而导致其可靠性功能发生变化。
备用系统:在这种情况下,并联冗余配置中只有一个组件承载负载,其余组件处于待机状态(关闭/空闲),准备从故障组件接管(上电并连接)。
备用部件仅在接合时承受操作应力。它们在闲置时可以承受较少的环境压力。
K out of N Redundancy
排列组合罢了
上面的例子说明了k / n冗余的二项式性质。若有n个元件具有相同且独立的可靠性r,则:
Question 3.6 - Compute the probability for a four core
system for which at least two cores must operate for the
system to continue computing a certain task. Assuming
that all cores have equal reliability r :
计算一个四核系统的概率,该系统至少需要两个核才能继续执行某项任务。假设所有核心的可靠性r相等:
System Availability 高可用?
总结串行系统和并行系统的区别和可用性计算:
成本约束下的可靠性最大化
问题说明:给定N个设备的系列配置,我们知道整体可靠性是单个可靠性的乘积,因此整个系统只提供最小可靠性。
因此,在设计这样的系统时,在下列约束条件下,我们的目标是在给定预算下寻求最优(最大)可靠性。
可维护性
可维护性是对系统或物品在由合格人员使用规定程序和资源进行维护时保持或恢复到规定状态的能力的度量。
可维护性可以用平均维修时间(MTTR)来衡量,MTTR是平均维修时间,由(T总维修停机时间)/(总维修动作数)
MTBMA是维修动作之间的平均时间,包括预防性和纠正性维修任务
RTOS and POSIX Embedded RT Scheduling Policies (实时操作系统和POSIX嵌入式实时调度策略)
嵌入式RT调度算法——EDD、EDF、LLF
问题表示:
α / β / γ [Graham et. Al 1979]
machine infrastructure / task information / metric
Earliest Due Date (EDD) 1 /synch / Lmax
It selects the task with the earliest relative
deadline [Jackson’s Algorithm].
All tasks arrive simultaneously
Fixed priority (Di is known in advance)
Preemption is not an issue (why?)
It minimizes the maximum lateness (Lmax)
Earliest Deadline First (EDF) 1 /preem/ Lmax
它选择绝对截止时间最早的任务[霍恩算法]。
任务可以在任何时间到达(di取决于到达)完全抢占式的任务,它最小化了最大延迟(Lmax)。队列头部的任务被执行。
如果一个新到达的任务被插入到队列的头部,当前正在执行的任务被抢占。
EDF Optimality for Identical Ready Times: Single CPU
最优性证明:
EDF的性质:
-
EDF特性在抢占下是单处理器调度的最佳方案;
- 如果存在可行的时间表,那么EDF将安排任务,达到100%的处理器利用率
-
如果在EDF下错过了截止日期,则意味着系统过载。
EDF对于多处理器不是最优的,即使Identical Ready Times
Least Laxity First (LLF)
我们有另一种(更好的?)比EDF的算法,它考虑了计算的剩余时间。
虽然计划被生成,但当我们试图实现时,
以下是问题:
-没有前瞻性的工作风格
-基于当前状态决定;这意味着当到达的时间间隔很短且截止日期很短时,LLF生成的时间表可能不是最优的;
它只能保证一个好的(!)解决方案。
-在每个间隔O(n) (n:任务)确定T(i)的开销-空间复杂性-每个任务的整个状态需要保持直到它完成;
时间复杂度
Time complexity issues
- EDD
- O(n log n) to order the task set
- O(n) to guarantee the whole task set
- EDF
- O(n) to insert a new task in the queue
- O(n) to guarantee a new task
在非抢占执行下,EDF不是最优的。
透视的策略Clairvoyant strategy
为了实现最优性,算法应该具有洞察力Clairvoyant,并在存在就绪任务时决定将CPU闲置。
注意:如果我们禁止在存在就绪任务的情况下让CPU处于空闲状态,那么EDF是最优的。
Rate Monotonic Algorithm (RMA)
非抢占调度对某些Emb应用程序很重要
Non-Preemptive-EDF is optimal among
work-conserving scheduling algorithms
在省力调度算法中,非抢占- edf算法是最优的
Work-conserving: Defined as an algorithm
that does not leave the processor idle, if there
is work to do i.e., non-idle algorithm.
节省工作:定义为不使处理器空闲的算法,如果有工作要做,即非空闲算法。
非抢占式调度算法寻找可行调度的问题是NP困难问题,用树搜索算法离线处理。
树形算法示例(Bratley算法)
时间触发系统
时间触发系统-具有任意到达时间的非抢占任务-布拉特利算法生成可行的时间表(c)
定义:时间触发系统:在预定义的时间瞬间触发事件以实现自主控制的系统
假设:到达时间(任意)是事先已知的;不允许抢占;
核心思想:在搜索的每一步都要做以下工作:
(a)检查任务是否错过了截止日期;-
(b)看看你是否有一个可行的时间表;
如果(a):完全放弃沿着该路径的搜索(剪枝);可行解决方案序列-回溯
就是个BFS
调度异常——优先级、cpu数量、任务大小、资源约束等
RMA和DMA
关于事件驱动调度程序的快速说明
-静态调度算法-实时问题(如果时间允许…)
嵌入式的进程、线程、同步、通信、死锁
Quick review on RTOS – Process/tasks & threads任务、进程与线程
进程(在前面的章节中也称为“任务”)是运行程序的抽象,是实时操作系统(RTOS)可调度工作的逻辑单元。
进程通常由私有数据结构表示,该数据结构至少包含标识、优先级、执行状态(例如,运行、就绪或挂起)以及与进程相关的资源。
线程是一个轻量级进程,它必须驻留在某个常规进程中,并且只能使用该特定进程的资源。
逻辑上驻留在同一进程中的多个线程可以彼此共享资源。
因此,进程是系统级多任务的活跃参与者,而线程可以被视为进程级多任务的成员。下图显示了层次结构。
Understanding the need for Synchronization理解同步的需求
多任务系统通常与资源共享有关。
在大多数情况下,资源一次只能由单个任务使用,并且资源的使用不能中断。(**)这些资源被认为是串行可重用的,它们包括某些外设、共享内存和CPU。
因此,当进程/任务争夺资源并在“共享资源”上执行“共享逻辑”时,如果没有正确调度,可能会导致生成的输出值不一致!这需要进程/任务和线程之间适当的同步机制,无论粒度是什么。
生产者消费者问题 Producer-Consumer Paradigm
这是两个相互竞争的进程试图访问一个共享变量的示例,结果得到不一致的值,从而导致异常行为!生产者是产生相关产出的过程,而消费者是试图消费生产者产出的过程。
线程安全问题,由于上下文切换可能发生在任意时刻,一句c语言指令可能是由多条汇编指令组成,而雀环时机不同导致了可能在不同的寄存器状态进行切换,这可能会造成多次执行c程序,结果不一致
比如Counter++ and Counter--由以下的汇编指令实现:
Register1 = counter // current value of the counter
Register1 = Register1+1
counter = Register1
Register2 = counter // It is possible that system uses Reg1 alone!
Register2 = Register2 – 1
counter = Register2
Software Solutions解决生产者消费者问题的软件方案
Control strategy on
Critical Sections of the codes:提出了解决任务调度的三点要求
四个简单而有问题的软件方案:
1.
-
Peterson’s Solution比较完善的软件方案,验证是否满足前面的三点要求
-
Lamport’s Bakery Algorithm
软件方案的缺点:
软件解决方案是非常微妙的。
需要进入临界区的进程可能会忙等待(不必要地消耗处理器时间)。
如果临界区很长,阻塞正在等待的进程会更有效。
Hardware Solution硬件方案
许多系统为实现临界区代码提供硬件支持。
几乎所有列出的解决方案都是基于锁的思想,即通过锁来保护关键区域。
对于单处理器——禁用中断是一种方法——这意味着完全避免了抢占;
对于多核/处理器-硬件方案对多核/处理器系统而已不是一种可扩展的解决方案;
硬件实现锁, 并提供原子硬件指令
Q 6.7: How do you bring in the bounded waiting
time feature in the T&S() procedure? Show your
implementation clearly.
Discuss clearly all possible cases on how a
process acquires a lock, enters the CS, and
releases it. Identify and convince yourself on
the fairness of your implementation.
问6.7:如何在T&S()过程中引入有界等待时间特性?清晰地展示你的实现。
清楚地讨论进程如何获取锁、进入CS并释放锁的所有可能情况。确定并说服自己实现的公平性。
Q 6.8: How do you bring in the bounded waiting
time feature in the Swap() procedure? Show
your implementation clearly.
Discuss clearly all possible cases on how a
process acquires a lock, enters the CS, and
releases it. Identify and convince yourself on
the fairness of your implementation.
Q 6.8:如何在Swap()过程中引入有界等待时间特性?清晰地展示你的实现。
清楚地讨论进程如何获取锁、进入CS并释放锁的所有可能情况。确定并说服自己实现的公平性。
互斥锁Mutex Locks
Previous solutions seem complicated and generally
inaccessible to application programmers; OS
designers build software tools to solve critical section
problem
前面的解决方案似乎很复杂,通常对应用程序程序员来说难以理解;操作系统设计者构建软件工具来解决临界截面问题
最简单的是互斥锁——通过以下方式保护临界区:首先:获取()锁;-然后:release()锁;-指示锁是否可用的布尔变量;
Simplest is mutex lock - Protect a critical section by:
- First: acquire() a lock;
- Then: release() the lock;
- Boolean variable indicating if lock is available or
not;
Remarks: Calls to acquire() and release()
must be atomic; Usually implemented via
hardware atomic instructions;
But this solution requires busy waiting;
This lock therefore referred to as a spinlock;
注意:acquire()和release()的调用必须是原子的;通常通过硬件原子指令实现;但这个解决方案需要忙碌的等待;因此,这个锁被称为自旋锁;
讲的是应用程序程序员(我)平常用到的互斥锁,在底层是由阴间原子指令支持的。是像这样被封装的:
避免忙等待:信号量
Semaphores & their use; 信号量机制
因此,信号量是一种不需要繁忙等待的同步机制。
什么是信号量?把它想象成一个整数变量,一个内核变量,一个共享变量,使用两个标准(原子)操作- wait()和signal()[替代引用:P()和V()]
- Semaphore变量不能直接修改;
- wait()和signal()是原子操作——作为内核的一部分实现;
- 信号量变量初始化为整数值;
Use of Semaphores to solve - Critical Section Problem, Producer-
Consumer Problem
信号量的分类
整形计数信号量与二元信号量
计数信号量:初始值为大于0的整数值;整数值的范围可以在不受限制的域中;使用:可以控制对实例数量有限的资源的访问;比如说,它可以初始化为可用资源的数量;
二进制信号量:假设整数值为0/1;计数信号量的特殊情况;
信号量的使用:CS接入;二进制信号量可用于解决临界区问题;一个信号量变量(如互斥锁)被N个进程共享,初始化为1;每个进程的结构如下:
信号量的使用:解决生产者和消费者的问题
A -提供互斥(锁);U & B -允许Prod()和Cons()进行通信并帮助同步;
U =防止下溢-表示缓冲区中要消耗的项数;如果它是负的,它给出了在这个信号量上被阻塞的线程数的指示;
B -缓冲区中剩余的可用空间量,有助于防止溢出;随着项目的增加,B计数下降,当它变为负数时,它表示阻塞的线程数,以向缓冲区添加项目;
Semaphore A = 1; // Controls buffer Access
Semaphore U = 0; // Controls buffer Underflow
Semaphore B = buffSize; // Avoids buffer Overflow
信号量的缺点
信号量操作的不正确使用:
(1)程序的调试可能会更复杂
-错误的顺序:信号(互斥)....等待(互斥);
-错误调用:wait (mutex)…wait (mutex)
(2)省略wait (mutex)或signal (mutex)(或两者都有)
- 计时错误-只会在某些情况下发生,否则不会发生,
- 运行一个程序,它崩溃了,再运行一次,它不会!
(3)可能出现死锁和饥饿
解决方案?-使用监视器
监视器
对进程/线程之间的信号机制进行控制的编程范例,以实现同步。
Monitor是一个实现互斥的同步构造;它使用条件变量(CVs):特定于用户的对象,在进程之间不共享;CVs是基本的同步原语,它根据发生的特定条件触发事件;使用CVs,进程/线程尝试获取和释放锁;程序设计语言具体设计;示例- Java监视器,使用Java虚拟机
Deadlock & Starvation 死锁和饥饿
定义:
当一组进程中的每个进程都在等待一个事件,而这个事件只能由另一个进程引起,而另一个进程又在等待一个事件发生时,我们就说这组进程处于死锁状态!
死锁的四个必要条件
发生死锁的必要条件[Coffman(1971)]——这些条件必须同时保持,才会发生死锁。
- 互斥(所涉及的资源是不可共享的,即一次只有一个进程可以使用资源)
- 占有并等待(进程持有一些资源,等待其他进程释放资源;
- 非抢占(一旦分配,资源不能被抢占;进程必须主动释放它!)
- 循环等待(#2的特殊情况)
对付死锁的四种方法
预防、避免、检测、解除
-
预防:
一个系统设计问题!关键问题-如何在系统中发出对资源的请求以及如何处理这些请求?目标是确保至少一个必要的死锁条件永远不会发生- -
避免:我们考虑每一个请求,并决定是否在此时授予它是安全的;需要从进程获得更多关于其资源需求的先验信息!(我们可以在Banker算法中看到这一点)
Example – Dining Philosopher’s Problem哲学家进餐
死锁避免:银行家算法Banker’s Algorithm
分布式死锁
分布式死锁问题:
-
每个分布式节点包含不同的进程-公共/共享资源池;
-
每个进程可以独立地对任何资源发出请求;
两种可能的设计方法:
集中控制
流程分布在多台机器上;每个进程不知道其他机器上的进程,但它知道其他机器上可用的资源;整个系统有一个中央协调器(CC)维护全局资源分配图(GRA);每台机器的任务是将资源请求的状态和每个进程拥有的当前资源更新到CC,只有CC才能维护GRA图;
GRA图的更新有两种方式:(a) As soon As Possible (ASAP)策略:当机器的局部资源分配图发生变化时,它可以更新CC, CC可以反映GRA图的变化;(b)定期更新战略:自上次更新以来,只在预先确定的时间点发送更新。在此期间,如果在局部RA图中删除了一些边,那么所有这些更改将发送给CC,并且它可以一次更新;然后死锁检测必须由CC完成;因此,当它发现死锁时,它可以决定杀死一个或多个进程,以便系统可以摆脱死锁。
- 假死锁问题
具体场景:例如,在释放R后,B对资源T发出请求;T在另一台机器里。让我们看看事件的先后顺序。
当B释放R时,需要拆除R-B连杆;这是由机器0向CC发送的消息(Msg1)来更新GRA图;在0号机中删除R-B边后,向T发出请求;机器0向机器1发送请求消息;然后,机器1将此请求以消息Msg2)的形式发送给CC,表示需要添加一条边B-T;这两个是2个独立的消息传达给CC;
这里会出什么问题呢?假定消息2先到达CC !然后CC会看到一个循环!因此出现了死锁场景!CC将认为这是死锁,并可能不必要地终止其中一个进程。这被称为“假死锁”。
如何避免这样的假死锁?策略是使用全局时钟。每台机器都有一个全局时钟,每当需要从一台机器向CC发送消息时,都会有一个时间戳。因此,我们的消息将是:(Msg1,t1)和(Msg2,t2),其中t2 > t1。
因此,当Msg2首先到达CC时,当它看到死锁时,它向所有机器广播(O(n)!!)这个条件,说有死锁,并请求在此消息之前的任何消息。
因此,在我们的例子中,机器0将重新发送消息,CC将发现边缘R-B不再存在,因此没有死锁。因此,我们可以通过使用全局时钟来避免。
再说一遍,哪里出了问题?如果CC本身死了怎么办?因此,这不是一种容错的方法,也会产生开销;适用于小型系统;
分布式控制(每个节点都参与解决死锁)
注:不存在全局时钟,也不存在定期更新的共享知识;
ERTSS Resource Sharing Protocols
在传统的操作系统中,处理CS执行的一种方法是通过信号量;这可能不适用于ERTS的情况!这主要是由于ERTS处理调度方式中的两个截然不同的基本问题。
它们是:
-
优先级反转
-
无界优先级反转
优先级反转
当一个任务在CS中执行时,它正在使用的资源不应该被抢占(不是CPU抢占!
这意味着低优先级的任务可以继续计算,而高优先级的任务需要等待;
因此,更高优先级的任务可能会错过截止日期!这违反了我们在RTS中的首要调度原则!
让我们假设一个资源需要被一个任务以排他模式共享;这意味着没有其他任务可以要求此资源;
因此,如果一个低优先级的任务在CS执行中,并且拥有独占模式下的资源,那么任何需要相同资源的高优先级任务都需要等待/阻塞!
我们观察到这里发生了优先级反转!
无界优先级反转
考虑与前面相同的情况—低优先级任务(TL)现在处于CS执行中,并且在独占模式下拥有资源,那么需要相同资源的任何高优先级任务(TH)都处于阻塞状态。
问:如果其他一些任务集{Ti, i=1,2,…k}不需要TL使用的资源,优先级为pri(TL) < pri(Ti) < pri(TH),所有i到达处理怎么办?
在这种情况下,Ti将首先抢占TL进行处理,因此,TH必须等待所有Ti和TL完成后才能开始处理!
这里的主要问题是我们不知道有多少这样的中间优先级任务会到达!这称为无界优先级反转!
解决优先级反转问题:优先级继承协议Priority Inheritance Protocol
通过限制任务执行其CS的时间,可以容忍简单的优先级反转,这可以在编程中实现;可在方案拟订中明确考虑优先事项,以限制在有限时间内获得资源;因此,处理简单的PI问题并不是一个关键问题。
挑战在于处理无界PI问题!无界优先级反转-优先级继承协议的解决方案
回想一下前面讨论的无界优先级反转场景;
结果——在最坏的情况下,高优先级的任务可能会错过截止日期!
对于这种情况,我们提出了一个简单的解决方案:优先级继承协议Priority Inheritance Protocol我们知道,当一个任务在独占模式下使用资源时,它不能被资源抢占。
目的: 让任务尽早完成!
手段:提高它的优先级,这样低优先级的任务就不能抢占它,因此它会尽早完成!!所以没有中间任务可以抢占!但是减少了多少呢?
[解决方案实例:sha&rajkumar (199X)]将其提升到至少是当前等待资源的任务的最高优先级!
因此,这个任务“继承”了最高任务的优先级(暂时)。一旦任务释放了资源,如果它不持有其他进程所需的任何其他关键资源,它就会恢复其原始优先级
优先级继承协议(PIP)的缺点
因此,很明显,PIP可以让RT任务共享关键资源,而不会让它们产生以延迟为代价的无界优先级反转!
然而,存在两个主要缺点:
(i)死锁——两个或多个任务竞争共享资源并到达死锁;
(ii)链式阻塞-每次任务需要资源时,它被阻塞并等待;此外,每当它需要低优先级任务持有的资源时,低优先级任务的优先级就会发生优先级反转。
典型题目
(i) For a set of 2 periodic tasks schedulable under RMA on a
uniprocessor system, compute the upper bound on the utilization.
(ii) Consider 4 tasks T1=(0,8), T2=(1,4), T3=(2,9), and T4=(3,5), scheduled under Shortest Remaining Job First (SRJF) algorithm. In the above representation of a task, the first component denotes the arrival time and the second component denotes the execution time of the task. Compute the average waiting time of the tasks.
(iii) To discover and connect to an IoT device in a secured manner, network
address translation mechanism is in place. Comment on why this is an
imperative need.
(iv) Using a Constant Failure Rate (CFR) model, for a 2-core CPU
system, determine the failure rate function. Assume that the cores
have identical failure rates and fail independently and that the system
failure will occur only when both cores have failed.
(v) A hacker first attempts to listen to a specific IoT device A. Then
he/she sends a fake update notification with corrupted links to that
device A. The links redirect the device A to a malicious website,
asking to submit personal details or infect systems with malware.
Identify the types of attacks involved in this scenario in the order in
which these attacks are perpetrated. (a) Firmware hijacking (b) DDoS
(c) Malicious node injection (d) Eavesdropping
(vi) Consider a priority-driven pre-emptive scheduler handling two
periodic tasks T1=(e1=10 ms, p1=20 ms) and T2=(e2=20 ms, p2=50
ms) as foreground tasks and one background task T3 requires 100 ms
to complete. Assuming all tasks start at t=0, determine the time at
which T3 will complete.
(vii) Why implementing synchronization primitives by disabling interrupts
in user-level programs is not appropriate in a single processor, single
core system?
(viii) How (a) FCFS and (b) Round Robin (RR) scheduling algorithms
discriminate in favor of short processes?
(ix) Draw clearly a task state transition diagram that captures all events
from a task activation stage to its termination stage.
(x) State three primary advantages of using a non-preemptive scheduling algorithm for real-time tasks.
(xi) While handling an aperiodic and periodic tasks in priority driven systems, a polling strategy is adopted. What can go wrong in using
this strategy? If there is anything wrong in using this strategy how
would you take care?
(xii) Aperiodic jobs are scheduled and executed only at times when there
is no periodic or sporadic job ready for execution. Consider using a
background running strategy for executing aperiodic tasks. Consider
the system of two periodic tasks T1 = (3, 1) and T2 = (10, 4) ( task: (period, exec time) ); Assume that the scheduler uses a RMA
strategy. Consider an aperiodic task A with execution time equal to
2.2 is released (arrives) at time t = 0.5. What is the response time of the aperiodic task and what do you observe/conclude?
(i)在单处理器系统上,对于一组2个在RMA下可调度的周期任务,计算其利用率的上界。
(ii)考虑4个任务T1=(0,8), T2=(1,4), T3=(2,9), T4=(3,5),在最短剩余作业优先(SRJF)算法下调度。在上述任务表示中,第一个组件表示任务的到达时间,第二个组件表示任务的执行时间。计算任务的平均等待时间。
(iii)为了安全发现和连接物联网设备,网络地址转换机制到位。评论一下为什么这是一个迫切的需要。
(iv)使用恒定故障率(Constant Failure Rate, CFR)模型,对于2核CPU系统,确定故障率函数。假设两个核心具有相同的故障率,并且独立故障,并且只有当两个核心都故障时才会发生系统故障。
(v)黑客首先试图监听特定的物联网设备A,然后他/她向该设备A发送带有损坏链接的虚假更新通知。这些链接将设备A重定向到恶意网站,要求提交个人详细信息或用恶意软件感染系统。
根据攻击发生的顺序,确定此场景中涉及的攻击类型。(a)固件劫持(b) DDoS (c)恶意节点注入(d)窃听
(vi)考虑优先级驱动的抢占式调度程序处理两个周期任务T1=(e1=10 ms, p1=20 ms)和T2=(e2=20 ms, p2=50 ms)作为前台任务,一个后台任务T3需要100 ms才能完成。假设所有任务从t=0开始,确定T3完成的时间。
(vii)为什么通过在用户级程序中禁用中断来实现同步原语在单处理器单核系统中是不合适的?
(viii) (a) FCFS和(b)轮询(RR)调度算法如何区分短进程?
(ix)清晰地绘制任务状态转换图,捕获从任务激活阶段到任务终止阶段的所有事件。
(x)说明对实时任务使用非抢占式调度算法的三个主要优点。
(xi)在处理优先级驱动系统中的非周期性和周期性任务时,采用了轮询策略。使用这种策略可能会出现什么问题?如果使用这个策略有什么错误,你会怎么注意?
(xii)只有在没有定期作业或零星作业可供执行时,才安排和执行非周期性作业。考虑使用后台运行策略来执行非周期性任务。考虑两个周期任务T1 =(3,1)和T2 =(10,4)的系统(task:(period, exec time));假设调度器使用RMA策略。假设执行时间为2.2的非周期性任务A在时间t = 0.5时释放(到达)。非周期性任务的反应时间是多少?你观察到/得出了什么结论?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?