時鐘中斷處理完成後,如何進行搶占排程的?

2021-10-03 21:43:47 字數 1080 閱讀 5805

當系統收到中斷後,會通過中斷向量表跳轉到中斷處理函式中。

例如,時鐘中斷觸發時,會執行到el1_irq,進而執行irq_handler。當從irq_handler返回後,中斷處理函式就完成了,此時產生乙個搶占點,首先ldr w24, [tsk, #tsk_ti_preempt]讀取當前程序struct task_struct中的premmpt_count值,如果為0表示可以搶占排程,不為0的話,說明已經被搶占了,不能再次搶占,跳到1中;然後繼續判斷當前程序是否已經設定了tif_need_resched標誌位(時鐘中斷的處理函式會根據需要設定程序的此標誌位),如果沒有設定,不能被搶占排程,跳到1中,否則跳到el1_preempt,進行搶占排程。

#ifdef config_preempt

ldr w24, [tsk, #tsk_ti_preempt] // get preempt count

cbnz w24, 1f // preempt count != 0

ldr x0, [tsk, #tsk_ti_flags] // get flags

tbz x0, #tif_need_resched, 1f // needs rescheduling?

bl el1_preempt

1:#endif

#ifdef config_trace_irqflags

bl trace_hardirqs_on

#endif

kernel_exit 1

endproc(el1_irq)

#ifdef config_preempt

el1_preempt:

mov x24, lr

1: bl preempt_schedule_irq // irq en/disable is done inside

ldr x0, [tsk, #tsk_ti_flags] // get new tasks ti_flags

tbnz x0, #tif_need_resched, 1b // needs rescheduling?

ret x24

#endif

執行緒處理完成,如何立即釋放執行緒?

因此執行緒程式就如下了 include include void func void arg int main int argc,char argv return 0 直到,我們的網路伺服器在客戶端頻繁斷開 鏈結.終於出現了建立執行緒失敗。於是,要執行緒處理函式退出時,執行緒資源立即被 那麼就應該使...

php安裝完成後如何新增mysql擴充套件

php安裝完成後新增mysql擴充套件基本步驟如下 1 進入php源 目錄 1 cd usr php 5.3.1 2 再進入要新增的mysql擴充套件原始碼目錄 1 2 cd ext mysql yum install autoconf centos5.4需安裝 3 呼叫已經編譯好的php可執行程式...

PHP 登入完成後如何跳轉上一訪問頁面

專案需求 訪問 頁面時,有的頁面需要授權才能訪問,這時候就會要求使用者登入,跳轉到登入頁面login.php,怎麼實現pxrscwplc登入後返回到剛才訪問的頁面。解決思路1 在跳轉到登入頁面之前要將當前訪問頁面的url儲存到cookie裡面,登入驗證授權通過後,從cookie中取出這個url值,跳...