(Interrupt Latency) 中断延迟

news/2024/7/17 22:23:32

中断延迟

 (Interrupt Latency) 中断延迟

是指从硬件中断发生到开始执行中断处理程序第一条指令之间的这段时间。
也就是:
计算机接收到中断信号到操作系统作出响应,并完成换到转入中断服务程序的时间。

不严格地,也可以表述为:
(外部)硬件(设备)发生中断,到系统执行中断服务子程序(ISR)的第一条指令的时间。

另外,如果尽可能严格地考虑问题,那么还要考虑下列情况:

1.中断的详细情况就是:外界硬件发生了中断后,CPU到中断处理器读取中断向量,并且查找中断向量表,
找到对应的中断服务子程序(ISR)的首地址,然后跳转到对应的ISR去做相应处理。
此部分时间,我称其为:识别中断时间

2.在允许中断嵌套的实时操作系统中,中断也是基于优先级的,允许高优先级中断抢断正在处理的低优先级中断,
如ucOS/II,所以,如果当前正在处理更高优先级的中断,即使此时有低优先级的中断,
也系统不会立刻响应,而是等到高优先级的中断处理完之后,才会响应。
而即使在不支持中断嵌套,即中断是没有优先级的,中断是不允许被中断的,所以,如果当前系统正在处理一个中断,
而此时另一个中断到来了,系统也是不会立即响应的,而只是等处理完当前的中断之后,才会处理后来的中断。
此部分时间,我称其为:等待中断打开时间

3.在嵌入式系统中,如ucOS/II,(其他类似系统中也有此情况),
常用开关中断来实现共享区的互斥访问。
如:
//利用μC/OS_Ⅱ 宏调用关中断和开中断
void Function (void)
{
     OS_ENTER_CRITICAL(); //关闭中断
     .
     .  
     .
    OS_EXIT_CRITICAL(); //打开中断
}
所以,会出现这种情况:当前中断来了,但由于之前某个程序访问共享区,
而关闭中断了,导致当前中断得不到处理。而只有等待其访问完成共享区之后,再开中断。
(不过,一般来说,关中断的时间都很短,否则也就不适合用开关中断的方法来实现共享区互斥访问,
而应该用信号量或者其他手段实现。因为关中断时间长短,是衡量一个实时系统性能好坏的一个重要指标)
此部分时间,我称其为:关闭中断时间

4.其他的有待高人补充。

所以,总的中断延迟时间就可以表示为:

中断延迟 = 识别中断时间 + [等待中断打开时间] + [关闭中断时间]

当然,对于2,3两种情况,很多时候,并没有遇到,所以,一般多为中断延迟等于识别中断时间。

注:对于保存所要用到的寄存器内容或称保存现场,保存上下文等,此处也叫 中断前导,
并且做相应中断处理,
在处理完之后,进行恢复,此处也叫中断后续,
这些工作,是在中断处理子程序ISR完成的


http://lihuaxi.xjx100.cn/news/219022.html

相关文章

UE商城资源 Kitsune狐狸女孩

Unreal Engine虚幻游戏引擎素材资源 Unreal Engine Marketplace –Kitsune 4.26狐狸女孩 大小解压后:569M 可爱的Kitsune的3D模型。装配到史诗骷髅。完全模块化,包括无衣服的身体。包含不同的发型。通过材质实例轻松改变颜色。包含与Live Link Face应用程…

KVell 单机k/v引擎:用最少的CPU 来调度Nvme的极致性能

文章目录前言KVell背景业界引擎使用Nvme的问题CPU 会是 LSM-kv 存储的瓶颈CPU 也会是 Btree-kv 存储的瓶颈KVell 设计亮点 及 总体架构实现KVell 设计亮点1. Share nothing2. Do not sorted on disk, but keep indexes in memory3. Aim for fewer syscalls , not for sequentia…

嵌入式系统开发过程中遇到的——volatile

嵌入式 系统开发过程中遇到的—— volatile 对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的 。如果系统结构支持独立的 I/O 地址空间,并且是端口映射,就必须使用汇编语言完成实际对设备的控制&#xff…

关于LSM-tree 的 Remote Compaction调度

文章目录前言背景问题Remote Compaction接口设计实践过程中的一些经验1. Compaction Tier2. 加速 Compaction Tier的db open3. Disable L0->L0 compaction总结参考前言 又到了让人激动的周末,而且最近这一个月女朋友回老家了,所以这几周的周末时光都…

Rocksdb 的 MergeOperator 简单使用记录

本篇仅仅是一个记录 MergeOperator 的使用方式。 Rocksdb 使用MergeOperator 来代替Update 场景中的读改写操作,即用户的一个Update 操作需要调用rocksdb的 Get Put 接口才能完成。 而这种情况下会引入一些额外的读写放大,对于支持SQL这种update 频繁的…

【408篇】C语言笔记-第九章(数据结构概述)

文章目录第一节:逻辑结构与存储结构1. 逻辑结构2. 存储结构1. 顺序存储2. 链式存储3. 顺序存储与链式存储分析第二节:算法的评价(时间复杂度与空间复杂度)1. 算法定义2. 时间复杂度3. 空间复杂度第一节:逻辑结构与存储…

PPP和PDP激活是什么区别

From: http://www.mscbsc.com/askpro/question.php?qid16261 ppp相当于链路层协议 socket套接字,对tcp/ip协议的封装、应用 gprs上网首先要设置pdp,接着建立ppp连接,ppp连接建立后,就可以进行tcp/ip传输了, 要进行t…

关于std::string 在 并发场景下 __grow_by_and_replace free was not allocated 的异常问题

使用string时发现了一些坑。 我们知道stl 容器并不是线程安全的,所以在使用它们的过程中往往需要一些同步机制来保证并发场景下的同步更新。 应该踩的坑还是一个不拉的踩了进去,所以还是记录一下吧。 string作为一个容器,随着我们的append 或…