1
當進程等待IO時,如何將任務狀態更新爲TASK_INTERRUPTABLE(即阻塞)?進程狀態如何更新爲阻塞狀態(TASK_INTERRUPTABLE)?
想象一下,這種情況下,進程向塊設備發出IO請求。根據我以前的thread,該過程最終調用elv_add_request()
將請求添加到IO隊列。所以我想在這個elv_add_request()
調用,實現將是這樣的:
elv_add_request(){
// Register IO_CALLBACK()
set_task_state(task, TASK_INTERRUPTABLE); // blocked
// flush IO request to disk
...
}
IO_CALLBACK(){
set_task_state(task, TASK_RUNNING); // IO completed, ready to run
}
的邏輯是這樣的:當IO請求完成後,它會使用回調函數來通知進程準備內核現在。是否有意義?
如果是這樣的話,回調機制如何實現?它是一個CPU /硬件功能?