set_current_state
2013-06-25 08:57
274 查看
set_current_state(TASK_INTERRUPTIBLE) 简介 进程状态
进程状态定义:include/linux/sched.h
TASK_RUNNING :
进程处于可运行状态,但并不意味着进程已经实际上已分配到 CPU ,它可能会一直等到调度器选中它。该状态只是确保进程一旦被 CPU 选中时立马可以运行,而无需等待外部事件。
TASK_INTERRUPTIBLE : 这是针对等待某事件或其他资源而睡眠的进程设置的。在内核发送信号给该进程时表明等待的事件已经发生或资源已经可用,进程状态变为
TASK_RUNNING,此时只要被调度器选中就立即可恢复运行。
TASK_UNINTERRUPTIBLE : 处于此状态,不能由外部信号唤醒,只能由内核亲自唤醒。
TASK_STOPPED : 表示进程特意停止运行。比如在调试程序时,进程被调试器暂停下来。
TASK_TRACED : 本来不属于进程状态,用于从停止的进程中,将当前被调试的那些进程与常规进程区分开来。
下面常量既可以用于 struct task_struct 的进程状态字段,也可以用于 exit_state 字段(该字段明确的用于退出进程):
EXIT_ZOMBIE : 僵尸状态。
EXIT_DEAD : 处于该状态, 表示 wait 系统调用已经发出,而进程完全从系统移除之前的状态。只有多个线程对同一个进程发出
wait 调用时,该状态才有意义(为了防止其他执行线程在同一个进程也执行wait()类系统调用,而把进程的状态由僵死状态(EXIT_ZOMBIE)改为撤销状态(EXIT_DEAD)。)。
set_current_state()
的使用
在驱动程序中,进程睡眠往往通过 3 个步骤进行:
1. 将进程加入等待队列中。
2. 然后使用 set_current_state() 来设置进程的状态,设置的状态为 TASK_INTERRUPTIBLE 或 TASK_UNINTERRUTIBLE 。
3. 上面的设置完后,我们就要放弃处理器了。但在放弃处理器之前,还有一件重要的事情需要做:检查睡眠等待的条件。如果不检查,如果此时条件正好变为真,那么就漏掉了继续运行的机会,从而会睡眠更长的时间。就好比如,你在等一辆车,你觉得车还没来,你很困并就打算先睡一会儿,此时有一辆车刚好过来了,你睡眼朦胧的并没打算睁开眼睛去看一下,结果得花更长的时间来等下一趟。所以,一般在睡前需要类似的动作:
进程状态定义:include/linux/sched.h
TASK_RUNNING :
进程处于可运行状态,但并不意味着进程已经实际上已分配到 CPU ,它可能会一直等到调度器选中它。该状态只是确保进程一旦被 CPU 选中时立马可以运行,而无需等待外部事件。
TASK_INTERRUPTIBLE : 这是针对等待某事件或其他资源而睡眠的进程设置的。在内核发送信号给该进程时表明等待的事件已经发生或资源已经可用,进程状态变为
TASK_RUNNING,此时只要被调度器选中就立即可恢复运行。
TASK_UNINTERRUPTIBLE : 处于此状态,不能由外部信号唤醒,只能由内核亲自唤醒。
TASK_STOPPED : 表示进程特意停止运行。比如在调试程序时,进程被调试器暂停下来。
TASK_TRACED : 本来不属于进程状态,用于从停止的进程中,将当前被调试的那些进程与常规进程区分开来。
下面常量既可以用于 struct task_struct 的进程状态字段,也可以用于 exit_state 字段(该字段明确的用于退出进程):
EXIT_ZOMBIE : 僵尸状态。
EXIT_DEAD : 处于该状态, 表示 wait 系统调用已经发出,而进程完全从系统移除之前的状态。只有多个线程对同一个进程发出
wait 调用时,该状态才有意义(为了防止其他执行线程在同一个进程也执行wait()类系统调用,而把进程的状态由僵死状态(EXIT_ZOMBIE)改为撤销状态(EXIT_DEAD)。)。
set_current_state()
的使用
在驱动程序中,进程睡眠往往通过 3 个步骤进行:
1. 将进程加入等待队列中。
2. 然后使用 set_current_state() 来设置进程的状态,设置的状态为 TASK_INTERRUPTIBLE 或 TASK_UNINTERRUTIBLE 。
3. 上面的设置完后,我们就要放弃处理器了。但在放弃处理器之前,还有一件重要的事情需要做:检查睡眠等待的条件。如果不检查,如果此时条件正好变为真,那么就漏掉了继续运行的机会,从而会睡眠更长的时间。就好比如,你在等一辆车,你觉得车还没来,你很困并就打算先睡一会儿,此时有一辆车刚好过来了,你睡眼朦胧的并没打算睁开眼睛去看一下,结果得花更长的时间来等下一趟。所以,一般在睡前需要类似的动作:
相关文章推荐
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection
- set_current_state 应用
- set_current_state 应用
- set_task_state和set_current_state
- set_current_state 应用
- 2010-04-20 18:17 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters
- set_current_state 应用
- GetCurrentDirectory,SetCurrentDirectory
- GetCurrentDirectoryA and SetCurrentDirectoryA
- 怎么设置viewpager在使用setCurrentItem的滑动速度
- Operation is not valid due to the current state of the object.
- SetRenderState 设置渲染状态
- ViewPager.setCurrentItem(0)报错
- JavaScriptSerializer 序列化时异常:Operation is not valid due to the current state of the object.
- iOS问题:[UIButton setCurrentPage:]: unrecognized selector sent to instance
- No dashboards are active for the current data set. 解决tensorboard无法启动和显示问题(pycharm启动)
- SVN无法提交出现 Can't set file "/db/txn_current" read-write :拒绝访问
- react学习笔记之setState方法注意事项
- Ext.state.Manager.setProvider(new Ext.state.CookieProvider())
- 阻止屏保运行、显示器和系统待机(使用SystemParametersInfo和SetThreadExecutionState两种办法)