为什么interrupt context中不能调用导致睡眠的kernel API呢?如果驱动这么做会导致什么样的后果呢? 本文的实验在X86 64bit + 标准4.4内核上完成。 看下一个中断: #define DRIVER_DESC "context schedule ...
前几天被人问到了 中断里为什么不能睡眠 这个问题,之前我并没有深究过这个问题。后来查了一下资料,基本上所有的论坛和博客都说:因为中断没有上下文,如果睡眠被切换出去之后就无法再切回来。我实在是不能认同这种说法,中断确实没有自己的上下文,但是中断发生的时候它使用的是被中断进程的上下文,如果真的让中断睡眠的话在switch to函数里会把当前中断的cs:eip保存到被中断进程的thread里,所以在一些 ...
2020-04-29 22:22 0 765 推荐指数:
为什么interrupt context中不能调用导致睡眠的kernel API呢?如果驱动这么做会导致什么样的后果呢? 本文的实验在X86 64bit + 标准4.4内核上完成。 看下一个中断: #define DRIVER_DESC "context schedule ...
中断分析 首先来看中断的流程: 如果条件满足了(即:有中断描述符,并成为调度器的调度单位,栈也不溢出了,理论上是可以做到中断睡眠的),中断是可以睡眠的,但会引起很多问题. 例如,你在时钟中断中睡眠了,那操作系统的时钟就乱了,调度器也了失去依据;例如,你在一个IPI(处理器间中断)中 ...
睡眠和休眠都是笔记本电脑的节能方式,但有细微的差别: 睡眠还保持着开机状态的,休眠是关机了,但是再次开机之后和关闭时的系统状态是一样的。 睡眠还是保持着系统运行数据在内存中,而休眠则将内存中的数据保存在硬盘中。(应该是虚拟内存) 睡眠的唤醒时间应该比休眠要短。 参考来源 ...
一个是只要是内存动态申请,必然涉及到了堆,所以必然是要做共享资源保护的,FreeRTOS里,用了临界区,没毛病。第二,只要是内存的动态管理,必然涉及到了复杂的算法,他的运行时间是带有很强的不确定性的。在中断里跑算法,跑耗时的操作,只会是坑你自己而已。 当你在一个多线程环境内使用堆时,会出 ...
中断的概念 中断是指在程序执行过程中,出现某种紧急事件,CPU暂停执行现行程序,转去执行处理该事件的程序——中断服务程序,执行完后再返回到被暂停的程序继续执行,这一过程称为中断。 中断源 引起中断的设备或事件称为中断源。 分类: 可笼统地分为两类:CPU内产生的,称为内部中断 ...
最近,我看了《睡眠革命》一书,作者介绍了如何使用独创的R90睡眠法进行高效睡眠,颠覆了我以往对睡眠的认知。这本书是英超多个豪门球队(曼联、阿森纳等)特聘睡眠教练、前英国睡眠协会会长——利特尔黑儿斯写的。 下面是我整理的笔记内容。 遵守昼夜节律 图解:身体在晚上9点开始分泌褪黑素让我们产生 ...
/* 上一例在主函数中利用累计定时器中断的次数来实现独立按键的检测,但是 如果在某些项目中,需要主函数里面间歇性地执行一些一气呵成的耗时任务, 当主函数正在执行一气呵成的耗时任务时(前提没有关闭定时器中断),这个时候 如果有按键按下来,就有可能没有被及时响应而遗漏了。 解决办法 ...
在程序里面使用到定时器,初始化的时候赋值分频系数和自动重装值: TIM3_Int_Init(5000-1,8400-1); 但是在应用里面经常需要这个定时器能够扮演很多时间长度的角色,在中断或者打开定时器前 加入对arr重新赋值,就可以定时不同的长度 TIM3->ARR= arr ...