為什么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 ...