为什么interrupt context中不能调用导致睡眠的kernel API呢?如果驱动这么做会导致什么样的后果呢? 本文的实验在X86 64bit + 标准4.4内核上完成。 看下一个中断: #define DRIVER_DESC "context schedule ...
中断分析 首先来看中断的流程: 如果条件满足了 即:有中断描述符,并成为调度器的调度单位,栈也不溢出了,理论上是可以做到中断睡眠的 ,中断是可以睡眠的,但会引起很多问题. 例如,你在时钟中断中睡眠了,那操作系统的时钟就乱了,调度器也了失去依据 例如,你在一个IPI 处理器间中断 中,其它CPU都在死循环等你答复,你却睡眠了,那其它处理器也不工作了 例如,你在一个DMA中断中睡眠了,上面的进程还在同 ...
2020-10-15 14:41 0 731 推荐指数:
为什么interrupt context中不能调用导致睡眠的kernel API呢?如果驱动这么做会导致什么样的后果呢? 本文的实验在X86 64bit + 标准4.4内核上完成。 看下一个中断: #define DRIVER_DESC "context schedule ...
前几天被人问到了“中断里为什么不能睡眠”这个问题,之前我并没有深究过这个问题。后来查了一下资料,基本上所有的论坛和博客都说:因为中断没有上下文,如果睡眠被切换出去之后就无法再切回来。我实在是不能认同这种说法,中断确实没有自己的上下文,但是中断发生的时候它使用的是被中断进程的上下文,如果真的让中断 ...
用了好久的FreeRTOS以前只是知道,如果在中断服务程序中调用某一些FreeRTOS的API函数时需要注意,如果有ISR版本的一定要调用,末尾带ISR的函数,并且要调用系统的API函数,中断服务程序的中断优先级不能高于配置宏 ...
事件. 对于一个 Linux 驱动使一个进程睡眠是一个容易做的事情. 但是, 有几个规则必须记住 以安全的方式编码睡 ...
如果我们深入 <linux/wait.h>, 你见到在 wait_queue_head_t 类型后面的数据结构是非 常简单的; 它包含一个自旋锁和一个链表. 这个链表是一个等待队列入口, 它被声明做 wait_queue_t. 这个结构包含关于睡眠进程的信息和它想怎样被唤醒 ...
1 Linux进程的睡眠和唤醒 在Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状态标志位为TASK_RUNNING。一旦一个运行中的进程时间片用完, Linux内核的调度器会剥夺这个进程对CPU的控制权,并且从运行队列中选择一个合适的进程 ...
1、用w命令查看当前系统登录的用户 USER —登录的用户名TTY —登录后系统分配的终端号FROM—远程主机名,即从哪儿登录来的LOGIN@—何时登录IDLE—空闲了多长时间,表 ...
中断的描述符如上所述。作为背景知识,可以理解下面的内容,本文讨论基于的内核版本信息如下: 我们知道,nvme的多队列,默认按照核数的多少来设置,目前nvme的队列有两种,admin队列,IO队列,两者都属于nvme_queue对象,submit queue ...