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 /硬件功能?