找回密码
 立即注册
查看: 1057|回复: 8

华山论剑(1): 科普“零中断延迟”的临界区保护方法

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-5-4 12:54:34 | 显示全部楼层 |阅读模式
本帖最后由 杨为民 于 2024-5-24 16:05 编辑

一、什么是“零中断延迟”
1)任何单片机RTOS系统在运行的时候都有一些程序段需要不被外界打断地完整执行,这些程序段被称为“临界区”。为了确保不被外界打断的方法被称为“临界区保护方法”
2)“临界区保护方法”按照是否采用“关闭总中断”分为两类常规的关闭总中断方法不关闭总中断的方法。后者在本论坛中被称为“零中断延迟”方法
3常规方法的缺点是当系统进入临界区保护的时候,由于总中断被关闭,这期间发生的任何用户中断都会被延迟
4不关闭总中断的方法的优点是当系统进入临界区保护的时候,由于总中断没有关闭,这期间发生的任何用户中断都不会被延迟,故称“零中断延迟”方法。
二、“不关闭总中断”的风险
5)一朋友是常规“T台秀游乐园”的建筑商。“T台秀游乐园”(单片机RTOS)的核心是时装模特T台表演(执行任务),其余还包括一些吃喝玩乐项目。
6T台秀的模特在两轮表演(两个任务)之间需要更换服装(进行任务调度)。更换过程包括脱下本轮演出服(保存当前任务现场),换上下轮演出服(恢复新任务现场)。
7)出于竞争和保护隐私的目的,更换服装的过程(临界区)需要严格保密和连续进行,常规的保护方法(常规的临界区保护方法)是在模特换衣之前发出“禁止令”(关闭总中断),停止“T台秀游乐园”内所有的动物的运动,哪怕吃饭的也停下来。然后在模特换衣之后撤销“禁止令”(重新打开总中断),恢复“T台秀游乐园”内所有的动物的运动。
8)可以看出常规的保护方法有一个重要的缺陷:在禁止令发布区间,也禁止了本来与T台表演无关的其他游客的行动,比如让餐厅中吃饭的客人也不能正常吃饭了。
9)由于行业内卷太厉害,这位朋友新使用了一种新的保护方法“非全面禁止令”(不关闭总中断),只是禁止了“T台表演厅”内的动物的活动,对其他区域的游客实现了“零限制活动”(零延迟中断)
10)显然新方法有益于游客,朋友的“零限制活动”的“T台秀游乐园”打开了新的局面。
11)不过这位朋友告诉我他每天都提心吊胆。由于对其他区域的游客实行的是“零限制活动”(零延迟中断),如果在换衣服的时间(临界保护区内)有其他地方的游客跑来看热闹,吃瓜拍照,导致换服装过程不能正常进行,演出崩溃怎么办
三、解决的方法
12)我建议朋友向我学习(我移植uC/OS-II时移植了两个版本,一个是关闭总中断的“微山x51”系列,一个是不关闭总中断的“挑战者x51”系列),建两个游乐园,一个是常规的,一个是“零限制活动”。
13)朋友说建两个不行,时间一长,“零限制活动”的游乐园就不会有“T台秀”了。因为演出团和演员很少会冒换衣服被围观的风险的。
14)我问他的建议,他认为对于想要看“T台秀”的游客专门建一个采用常规保护方法的“T台秀剧场”(关闭总中断的RTOS,对于真正需要艺术的人不会在乎被“限制行动”几分钟。
而对于爱好自由的吃货和玩家,专门建一个不需要任何限制的“游乐园”(就是不进行任何临界区保护的“前后台操作系统”),游客任何时候想做什么都没有限制(对任何中断都是真正“零延时”)。
注:文中朋友是虚构的
注:本论坛的《任务调度方法,【无错,至简】!多任务分时调度》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7611&extra=page%3D1
是一个不进行任何临界区保护的“前后台操作系统”,是一个真正意义上的“零中断延时”操作系统


回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:454
  • 最近打卡:2025-05-01 08:52:14

3

主题

109

回帖

855

积分

高级会员

积分
855
发表于 2024-7-5 20:38:19 | 显示全部楼层
初学的,我的理解就是一个是时间保护,一个是空间保护,这样理解对?
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-10 16:08:45

6

主题

131

回帖

666

积分

高级会员

积分
666
发表于 2024-7-19 15:31:24 | 显示全部楼层
任务调度方法,【无错,至简】!“多任务分时调度” -- 几乎不是一个多任务, 而是一个前后台轮询例程

如果一个任务在一次执行中要多次等待, 这个“多任务分时调度”就要把这个任务分成多个阶段并加上状态机进行处理
其实,还是传统的前后台加标志状态的模式, 状态一多 就谈不上 至简, 也自然容易引入逻辑错误和设计实现的误差.

因此, 多任务还是需要一个真正的平台而不是一个单纯的多轮询.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2024-11-8 10:59:43 | 显示全部楼层
不明白,如果不关总中断,中断来了,调用OS API,中断返回时进行任务切换怎么办

点评

谁见过Windows和Linux关闭过总中断?采用其他操作系统技术就行了。  详情 回复 发表于 2024-11-8 11:31
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-11-8 11:31:31 | 显示全部楼层
bkeu*** 发表于 2024-11-8 10:59
不明白,如果不关总中断,中断来了,调用OS API,中断返回时进行任务切换怎么办

谁见过Windows和Linux关闭过总中断?采用其他操作系统技术就行了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2024-11-8 11:35:31 | 显示全部楼层
杨*** 发表于 2024-11-8 11:31
谁见过Windows和Linux关闭过总中断?采用其他操作系统技术就行了。

这我就真不懂了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-02 00:29:54

10

主题

1159

回帖

5121

积分

论坛元老

积分
5121
发表于 2024-11-8 13:06:20 | 显示全部楼层


我问AI。



在实时操作系统(RTOS)中,为了在临界区实现“零中断延迟”的保护,需要选用既能保证数据一致性、又不会延长中断响应时间的方法。以下是一些常见的“零中断延迟”临界区保护方法:

### 1. **原子操作(Atomic Operations)**
   - **方法描述**:使用硬件支持的原子操作,比如对共享数据的原子增减、位操作等,这类操作在硬件层面上是不可分割的。因为单一的指令周期内完成,无需加锁或禁用中断,保证了数据的一致性。
   - **优点**:不会影响中断响应时间,可以实现对简单变量或标志位的快速保护。
   - **限制**:原子操作通常只能处理单次读-改-写的操作,复杂的逻辑(如多个变量的操作)无法实现。

### 2. **无锁数据结构和算法(Lock-Free Data Structures and Algorithms)**
   - **方法描述**:采用无锁数据结构(如无锁队列、环形缓冲区)和无锁算法(如双缓冲),使得共享资源的操作无需进入临界区。例如,通过“比较并交换”(CAS,Compare-And-Swap)来进行指针切换。
   - **优点**:完全避免了加锁或禁用中断带来的开销,不会影响中断延迟。
   - **限制**:设计和实现复杂,适用于特定的场景,如数据队列、缓冲区。

### 3. **任务调度锁(Task-Level Scheduler Locking)**
   - **方法描述**:通过临时锁住调度器来保护临界区,防止任务切换,但不禁用硬件中断。这样,当前任务在执行临界区代码时不会被其他任务打断,保证临界区的原子性。
   - **优点**:不会禁用中断,硬件中断可以正常响应,因此不会延迟中断处理。
   - **限制**:只适用于任务之间的数据保护,对于中断服务程序(ISR)访问的资源无保护作用。

### 4. **优先级反转处理(Priority Inheritance / Priority Ceiling)**
   - **方法描述**:使用优先级反转保护机制,让临界区内的任务获得更高的优先级,从而尽快完成执行,避免被其他任务打断。这样无需禁用中断,也可以有效防止任务间的资源竞争。
   - **优点**:保持系统的实时性,在不影响中断延迟的情况下确保关键任务快速完成临界区操作。
   - **限制**:仅适用于需要保护的资源在任务间共享的情况,且需要RTOS支持优先级反转机制。

### 5. **优先级屏蔽(Interrupt Prioritization / Masking)**
   - **方法描述**:如果RTOS和硬件支持优先级化的中断,可以在进入临界区时仅屏蔽较低优先级的中断,高优先级的中断依然可以响应。这样既保证了临界区的完整性,又允许关键中断不中断。
   - **优点**:保持了高优先级中断的响应能力,同时保证了临界区操作的完整性。
   - **限制**:优先级屏蔽机制需要硬件支持,且需要合理分配中断优先级,避免关键中断被错误屏蔽。

### 6. **硬件支持的互斥机制(Hardware Mutexes or Semaphores)**
   - **方法描述**:一些现代MCU支持硬件互斥机制(如硬件信号量或MPU),可以通过硬件直接实现临界区保护,无需禁用中断。例如,某些硬件具有内建的信号量或排他性访问功能,专门用来管理资源访问。
   - **优点**:利用硬件加速保护资源访问,不会影响中断延迟。
   - **限制**:依赖硬件支持,适用范围有限,移植性差。

### 选择合适的保护方法

选择保护方法时,需要考虑以下几个因素:
- **实时性要求**:如果系统对中断延迟极为敏感,可以优先考虑原子操作和无锁数据结构。
- **临界区的复杂性**:如果临界区操作复杂且包含多个变量,调度锁、优先级反转、优先级屏蔽等方法可能更适用。
- **硬件支持**:根据硬件是否支持信号量、优先级屏蔽或原子操作来选择合适的方法。

在大多数情况下,可以通过组合使用这些方法,既能实现高效的临界区保护,又能保持系统的实时性和中断响应能力。




1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-02 00:29:54

10

主题

1159

回帖

5121

积分

论坛元老

积分
5121
发表于 2024-11-8 13:16:21 | 显示全部楼层
这段描述生动地比喻了RTOS中的“零中断延迟”临界区保护方法及其风险。以下是对内容的分析和总结:

一、什么是“零中断延迟”
在RTOS中,临界区是需要不被打断地完成的代码段。传统的做法是关闭总中断(即“禁止令”),确保执行期间不会有外部中断打断,以保护临界区的完整性。然而,关闭总中断会影响整个系统,使得与当前任务无关的中断也被延迟,增加了响应时间。

“零中断延迟”方法则通过不关闭总中断来保护临界区,避免了对其他无关中断的干扰。这使得在进入临界区时系统的其他中断不会受到影响,从而实现“零中断延迟”。这种方法的优点是提高了系统的响应性,不会延迟与当前任务无关的中断。

二、不关闭总中断的风险
比喻中的“游乐园”和“T台秀”表演展示了不关闭总中断方法的潜在风险。在“零限制活动”的游乐园中,不关闭总中断意味着其他任务和外部事件(比如其他区域的游客)可以随时“打断”临界区的操作(模特换衣)。如果在保护临界区时其他任务进入干扰,可能导致当前操作失败或数据不一致,甚至引发系统崩溃。因此,不关闭总中断的保护方法虽能提供更好的实时性,但也增加了数据一致性和任务调度出错的风险。

三、应对策略
为解决这个问题,可以采取以下策略:

1.区分两种保护场景:对于不同类型的任务需求,采用不同的RTOS版本。例如,对于需要严格保护的任务(如“T台秀”),可以用关闭总中断的方法(传统的RTOS),确保任务不会被任何中断打断。对于其他对实时性要求较高但无严格保护需求的任务(如吃喝玩乐的游客),则采用不关闭总中断的方法,实现真正的“零中断延迟”。

2.任务隔离:在实际系统设计中,采用硬件隔离或优先级管理的方式,确保关键任务能获得独立的执行空间,而不影响其他任务。比如可以为关键任务分配单独的中断优先级,或在硬件上实现“屏蔽”机制,只允许特定优先级的任务访问临界区。

3.基于需求设计:针对不同需求提供不同的系统架构,比如在高实时性要求的系统中选择“零中断延迟”的保护方案,而在数据一致性要求高的场景中则使用传统方法,通过关闭总中断来保护关键操作的完整性。

通过这些方法,RTOS可以根据实际需求提供更灵活的临界区保护,实现“零中断延迟”与数据一致性的平衡。




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2024-11-8 13:31:05 | 显示全部楼层
一般情况下,临界代码短小,中断延迟影响不大
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:21 , Processed in 0.151631 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表